[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下的快捷方式