[root@localhost ~]# su - test

[test@localhost ~]$ sudo su -

[root@localhost ~]# whoami


chattr +i file # 只能查看文件,不能对文件进行其他操作

chattr -i file 

chattr +a file # 只能查看和追加内容,不能进行其他操作 

chattr -a file

lsattr file


vim:

/etc/vimrc 或 /etc/vim/vimrc

syntax on

设置tab宽度为4

set ts=4

set expandtab  (将tab转换为空格)

:nohl  (取消高亮显示)

vim乱码,在vimrc里加如下面内容:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936

set termencoding=utf-8

set encoding=utf-8


rpm -qfl `which busybox`    

yum provides */filename     

yum search filename


tar -zxf apr-util-1.3.12.tar.gz

cd apr-util-1.3.12

./configure --prefix=/usr/local/apr-util -with- apr=/usr/local/apr/bin/apr-1-config  

make && make install



linux中PS1的各项参数 \u = user  \h = hostname  \W = 相对路径  \w = 绝对路径  

export PS1='\[\e[35;1m\]\u@centos \w \$ \[\e[0m\]'



sort 1.txt | uniq



grep 'r*t' 1.txt   'r*t' 

grep -w 'word'  精确匹配word 

ps aux | grep -w mp  ==   ps aux | grep '\'


[0-9]*[1-9][0-9]*\.[0-9]*[1-9][0-9]*\.[0-9]*[1-9][0-9]*\.[0-9]*[1-9][0-9]*

[0-9][1-9]*[0-9]*\.[0-9][1-9]*[0-9]*\.[0-9][1-9]*[0-9]*\.[0-9][1-9]*[0-9]*

grep '[0-9]\{9\}'  至少有9个前面数字

echo 112233 | grep '[0-9]\{9\}'  

grep -E 与 egrep 一样



下载的源码放在/usr/local/src里

用户的脚本放在/usr/local/sbin里



-eq =

-ge >=

-gt >

-le <=

-lt <

-nt !=


cat /proc/cpuinfo   查看cpu信息

lsb_release -a      查看比较详细的信息


top -bn1  静态输出


ps -elf   ps aux

kill -HUP pid   


~/.bashrc 用户变量 /etc/profile 全局变量

--color=auto   ls, grep会有颜色


查看流量: sar -n DEV 1 10  

sar

sysstat


tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e " http.requst.uri"

?? ls /tmp/etherXXX | xargs rm


sestatus  查看selinux状态


getotps


read读取数据时,不能用退格删除

#!/bin/bash

stty erase '^H'  #加上这句

read -p "Please input a string: " string

echo $string


netstat -tuln(lntu)

netstat -ntlp(lntp) 查看监听端口


反引号与$(): echo `date` 与 echo $(date) 一样

反引号齐本身就对\进行了转义,保留了齐本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。

所以我们可以简单的想象成反引号中: \\ = \

$()中则不需要考虑\的问题,与我们平常使用的一样:\ = \

题外话: 反引号是老的用法,$()是新的用法,不管是在学习测试中,还是在实际工作中,$()的用法都是被推荐的。


a=1; b=2; c=$[$a+$b] 或 c=$(($a+$b)) 


.与source一样


centos的man命令出现: No manual entry for xxx, 解决方法: yum install man-pages



执行shell脚本时出现:[[: not found

ls /bin/sh 指向dash, /bin/sh, ln bash -s /bin/sh


a=1; echo ${a}M 结果:1M  (或用$[a]M)



find . -type d -exec cp -r {} {}.bak \;

find . -type d | xargs -n1 -i{} cp -r {} {}.


cat a.txt | while read line

for line in $(cat a.txt | xargs) 或 for line in `cat ip.txt`



debian/ubuntu自启管理sysv-rc-conf类似reahat系列chkconfig(ntsysv)


alias grep='grep -v grep |grep --color=auto'

alias fgrep='fgrep --color=auto'

alias egrep='egrep -v egrep |egrep --color=auto'


当前脚本所在的绝对路径:

baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd


远程复制(把一个服务器上文件复制另一个服务器上):

scp  

rsync  (备份数据)


screen命令:

screen


apt search package

aptitude search package (ubuntu, 支持部分正则语法)

aptitude search apt$  (搜索以apt开头的包)

aptitude search '~i apt$'  (搜索已安装的以apt开头的包, ~i表示已安装)  

aptitude search . (列出所有的包)

aptitude search ~i (列出所有已安装的包)

apt-cache search .

apt-file search ifconfig | grep -w s*bin/ifconifg   (可看出ifconfig是用的哪个包)

apt-file search bin/ifconfig


filename=${fileuser:-"filename"} 

fileuser 变量未设定或者为空,filename取"-"后面的值;否则filename=$fileuser

filename=${fileuser-"filename"} 

fileuser 变量未设定,filename取"-"后面的值;否则如果变量fileuser为空或者有值filename=$fileuser


apt-get install -y a b c 如果a安装失败, 可能会影响到b和c的安装

用for循环的形式

for i in a b c; do apt-get install -y $i; done


端口映射:

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A PREROUTING -t nat -p tcp --dport 137 -j REDIRECT --to-ports 80  (mproxy用80端口,手机上mproxy使用137端口)


判断是redhat|centos还是debian|ubuntu:

test -n $(apt-get 2>/dev/null) && echo 'debian|ubuntu'

test -n $(yum 2>/dev/null) && echo 'redhat|centos'


-I 必须指定替换字符 -i 是否指定替换字符-可选

举例:

find . | xargs -I {} cp {} $path

find . | xargs -i cp {} $path

两者效果相同

find / -name '*.txt' | xargs -i cp {} $dir/   #找出所有的.txt文件,并全部复制到$dir/下

find * -type d -name $dirname | xargs -i cp 1.txt {}  # 把1.txt复制到$dirname目录下


[[ ]]就是条件表达式,在bash中,字符串比较用  > < != == <= >= 只是在[]中 < >需要转义;对于数值比较.用 -lt -le -eq -ge -gt 来比较,与[[ ]]中表达不太一样,在[ ] 中的 < > 需要用转义 \< \>,如果有多个表达式,在[[ ]] 中用 && || 来组合,而[] 中是用 -a -o 来组合


 强制踢人命令格式:pkill -kill -t tty

    解释:

    pkill -kill -t  踢人命令

   tty 所踢用户的TTY

   如上踢出liu用户的命令为: pkill -kill -t pts/1

   只有root用户才能踢人,至少我测试的是这样的。如果同时有二个人用root用户登录,任何其中一个可以   踢掉另一个。任何用户都可以踢掉自己-_-

   如何踢掉用终端登陆的用户,如: 

   root     pts/0    :0.0             10:01    0.00s 0.03s 0.00s w

   首先用命令查看pts/0的进程号,命令如下:

   [root@Wang ~]# ps -ef | grep pts/0

   root     15846 15842 0 10:04 pts/0    00:00:00 bash

   root     15876 15846 0 10:06 pts/0    00:00:00 ps -ef

   root     15877 15846 0 10:06 pts/0    00:00:00 grep pts/0

   踢掉用户的命令:

   kill -9 15846

   skill -t pts/1

   


   

[root@Centos /etc]# netstat -anp | grep mproxy

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      16489/mproxy        

tcp        0      0 59.111.99.7:80              106.186.18.222:29656        ESTABLISHED 4483/mproxy         

tcp        0      0 127.0.0.1:45754             127.0.0.1:443               ESTABLISHED 12742/mproxy        

tcp        0      0 59.111.99.7:80              106.186.18.199:24195        ESTABLISHED 5751/mproxy         

tcp        0      0 59.111.99.7:80              106.186.18.222:29635        ESTABLISHED 4475/mproxy         

tcp        0      0 59.111.99.7:80              124.73.175.119:35407        ESTABLISHED 15643/mproxy        

tcp        0      0 59.111.99.7:80              220.132.81.117:2270         ESTABLISHED 22272/mproxy        

tcp        0      0 59.111.99.7:80              220.132.81.117:2905         ESTABLISHED 32330/mproxy        

tcp        0      0 59.111.99.7:80              106.186.18.199:24200        ESTABLISHED 5752/mproxy         

tcp        0      0 59.111.99.7:80              106.186.18.222:29662        ESTABLISHED 4478/mproxy    


把进程的pid打印出来

netstat -anp | grep mproxy | awk '{print $7}' | awk -F "/" '{print $1}'

netstat -anp | grep mproxy | awk '{print $7}' | cut -d '/' -f1

cut -d 与 awk -F 后面接的分隔符可以不加空格和引号



build-essential与Development Tools

linux操作系统上面开发程序, 光有了gcc 是不行的

它还需要一个   build-essential软件包

作用是提供编译程序必须软件包的列表信息


也就是说 编译程序有了这个软件包

它才知道 头文件在哪 才知道库函数在哪

还会下载依赖的软件包   最后才组成一个开发环境

当然 build-essential包 安装时 需要的依赖包 有些你用不上


软件包: build-essential 安装方法:

apt-get install build-essential

centos上类似的为

yum groupinstall "Development Tools"

yum install -y gcc g++ kernel-devel 

http://www.linuxdown.net/install/soft/2016/0227/4849.html


>/dev/null 2>&1 == &>/dev/null


cat a.txt

echo !$ (!$指上次输入的a.txt)



查看磁盘占用:

    du -h dir/

  显示目录及其所有子目录、文件占用大小

du -sh dir/

  只显示目录本身占用大小

  

软链接相当于Windows下的快捷方式