列出文件或目录信息
1 |
ls -ltrAR test |
显示变量或文本
1 |
echo $PATH |
有些系统没有安装诸如vi等编辑器,可以用echo和3个单引号和重定向创建简单文本文件
1 2 3 4 |
echo ''' spring.application.name=test server.port=8080 ''' > application.properties |
显示文件内容
1 |
cat /dev/null > ./test.txt |
1 |
cat -n test.txt |
1 |
grep -E 'pattern1.*pattern2' [files] |
1 |
grep -E 'pattern1|pattern2' [files] |
1 |
grep -v pattern [files] |
1 |
grep -l -r -E 'hello|world' test |
1 |
grep -r -c hello test |
查找文件或目录
1 |
find . -type d -name *log |
1 |
find test -type f -cmin -5 -size +1k |
1 |
find test -type f -size +1M \( -name *.jpg -or -name *.png \) |
1 |
find test -type f -size +1M -and ! -name *.bin |
或
1 |
find test -type f -size +1M -and -not -name *.bin |
统计数量
1 |
wc -l test/*.txt |
1 |
ls test/*.txt | wc -l |
分割并输出字段
1 |
cut -d ' ' -f 2 test/test.txt |
1 |
cut -d ':' -f 2-3 test/test.txt |
显示文件前几行或前几个字节内容
1 |
head -n 20 test.txt |
显示文件最后几行内容
1 |
tail -n 20 test.txt |
1 |
tail -f -n 20 test.txt |
1 |
tail -f -n 20 -s 10 test.txt |
查看文件内容(同more相比,more只能往后查看内容,不能往前,less功能更强大,建议用less替换more)
1 |
ps -ef | less |
更改文件权限
1 |
chmod a+w test.txt |
或
1 |
chmod ugo+w test.txt |
或
1 |
chmod +w test.txt |
1 |
chmod ug+w,o-w file1.txt file2.txt |
1 |
chmod -x test.sh |
1 |
chmod -R ug+rw,o-w test |
1 |
chmod 744 test.sh |
设置文件的所有者和组
1 |
chown ucmed test.sh |
1 |
chown ucmed:ucmed test.sh |
1 |
chown :ucmed test.sh |
1 |
chown -R ucmed:ucmed test |
链接
软链接:
硬链接:
1 |
ln -s libtest.1.2.1.so libtest.1.2.so |
1 |
ln -s /mnt/sda/mysql /mysql |
1 |
ln a.txt b.txt |
拷贝文件、目录
远程拷贝
1 |
scp root@192.168.1.2:~/test.txt ./other-name.txt |
1 |
scp -P 5122 ./test.txt root@192.168.1.2:/root/ |
1 |
scp -r root@192.168.1.2:/root/test ./test |
1 |
scp -i my.key test.txt root@192.168.1.2:/root/ |
在环境变量$PATH设置的目录里查找符合条件的文件
创建目录
1 |
mkdir -p ./a/b/c |
显示当前工作目录
文本文件处理
注:
1 |
sed -n '5,7p' test.txt |
1 |
sed -e '1i pre' test.txt > new.txt |
1 |
sed -e '5,$d' test.txt |
1 |
sed '2,5c new line' test.txt |
1 |
sed -n '/hello/p' test.txt |
1 |
sed -i 's/hello/hi/g' test.txt |
1 |
sed -i -e '4,5d' -e 's/hello/hi/g' test.txt |
文本分析处理
语法:
1 |
awk [选项参数] 'script' var=value file(s) |
或
1 |
awk [选项参数] -f scriptfile var=value file(s) |
1 |
ls -l test/*.txt | awk '{print $9,$5}' |
1 |
awk 'NR%2==1' test.txt |
1 |
awk -F\; '$1 ~ /test/ { print $1,$3 }' test.txt |
1 |
awk '{ print FNR "\t" $0 }' test.txt |
1 |
awk '{ print FNR " " NF}' test.txt |
如echo ,rm, mkdir, ls等这些命令只接受命令行参数,不能把标准输入作为参数, xargs将标准输入(特别是管道输出)转换为命令行参数
1 |
find test -name "*" -type f -size 0 | xargs -n 1 rm -f |
或
1 2 |
<span class="hljs-built_in">find</span> test -<span class="hljs-built_in">name</span> <span class="hljs-string">"*"</span> -<span class="hljs-built_in">type</span> f -<span class="hljs-built_in">size</span> <span class="hljs-number">0</span> -print0 | xargs -<span class="hljs-number">0</span> rm -f |
1 |
find test -name *.txt -type f -print0 | xargs -0 grep -l hello |
注:另外的方案:
1 |
grep -r -l world test |
在大量大文件场景grep效率会低一些,因为grep会搜索所有文件的内容,而find+xargs只找符合条件的文件并逐个搜索内容,大量大文件场景建议用find + xargs方案
显示目录和文件所占磁盘大小
注:此大小不是文件大小,而是所占磁盘block的大小,一般一个block为4k,所以即使文件只有1个字节,也要分配一个block来存储,此时所占磁盘大小也是4k
1 |
du -h |
1 |
du -hs test |
显示磁盘使用情况
1 |
df -h |
显示或设置网络设备
1 |
ifconfig |
显示网络状态
1 |
netstat -i |
1 |
netstat -an | grep 8080 |
1 |
netstat -an | grep 192.168.1.2 |
1 |
netstat -antp |
抓包(有些系统需要额外安装)
1 |
tcpdump -i eth0 host 192.168.1.2 |
1 |
tcpdump -i l0 port 8080 |
1 |
tcpdump -i eth0 host 192.168.1.2 and port 8080 |
1 |
tcpdump -i eth0 dst host 192.168.1.2 |
1 |
tcpdump -i eth0 src host 192.168.1.2 |
1 |
tcpdump -i eth0 port 8080 -w test.pcap |
1 |
tcpdump -i eth0 -c 200 port 8080 |
1 |
tcpdump -i ens160 \( dst host 192.168.1.2 and dst port 8080 \) or \( src host 192.168.1.3 and dst port 8081 \) |
显示进程状态
1 |
ps -ef |
显示列:
1 |
ps -aux |
同ps -ef 不同的有列有
杀死进程或通知进程
信号编号 | 信号名 | 含义 |
---|---|---|
0 | EXIT | 程序退出时收到该信息 |
1 | HUP | 挂起或重新初始化 |
2 | INT | 结束进程,常用的 “Ctrl+C” 组合键发出就是此信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误信号 |
15 | TERM | 默认信号,正常结束进程 |
注:
1 |
kill 12345 |
或
kill -TERM 12345
1 |
kill -9 12345 |
或
kill -KILL 12345
显示系统日期时间
切换登录用户
1 |
su root |
以root身份执行命令
1 |
sudo chmod +x test.sh |
显示系统内存使用情况
1 |
free -h |
1 |
free -m |
实时显示进程动态
列含义:
常用命令:
1 |
top -p 12345 |
显示或设置系统资源
1 |
ulimit -a |
1 |
ulimit -n 65535 |
或
1 |
sudo sh -c "ulimit -n 65535 && exec su $LOGNAME" |
设置或显示环境变量
1 |
export -p |
1 |
export WORKSPACE=/nsfw |
删除环境变量或函数
1 |
unset WORKSPACE |
在系统后台不挂断地运行命令,退出终端不会影响程序的运行,用于长时间或永不退出任务。
1 |
nohup python test.py & |
zip压缩
1 |
zip -r test.zip ./test |
1 |
zip test.zip test1.txt test2.txt |
zip解压缩
1 |
unzip -v test.zip |
1 |
unzip test.zip |
1 |
unzip -d /tmp/test test.zip |
gzip压缩、解压缩(只处理文件,不处理目录)
1 |
gzip -c test.txt > test.gz |
1 |
gzip -d -c test.gz > test.txt |
tar压缩、解压缩
1 |
tar cvf test.tar ./test |
1 |
tar xvf test.tar |
或
1 |
tar xvf test.tar -C /tmp/ |
1 |
tar zcvf test.tgz ./test |
1 |
tar zxvf test.tgz |
1 |
tar -jcvf test.bz2 ./test |
1 |
tar -jxvf test.bz2 |
1 |
tar -Jcvf test.xz ./test |
1 |
tar -Jxvf test.xz |
1 2 3 |
uname -a cat /proc/version cat /etc/redhat-release |
总核数 = 物理CPU个数 X 每颗物理CPU的核数
1 |
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l |
1 |
cat /proc/cpuinfo| grep "cpu cores"| uniq |
1 |
cat /proc/cpuinfo| grep "processor"| wc -l |
如果
1 |
top |
或
1 |
free -h |
显示的内存被buff/cache占用过多。可以:先同步缓存到磁盘,防止数据丢失:
1 |
sync |
释放pagecache:
1 |
sudo sh -c "echo 1 >/proc/sys/vm/drop_caches" |
释放dentries and inodes:
1 |
sudo sh -c "echo 2 >/proc/sys/vm/drop_caches" |
二者都释放:
1 |
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" |
1 |
netstat -tln |
1 |
sudo netstat -antp | grep LISTEN | grep 22 |
1 2 |
netstat -an | grep 192.168.1.48:22 | grep ESTABLISHED | wc -l netstat -an | grep 192.168.1.48:22 | grep TIME_WAIT | wc -l |
1 |
ps -aux | grep [program] | grep -v grep |
或
1 |
top -p [pid] |
1 2 |
ps -e -o pid,comm,vsz,rss,pmem,%cpu | sort -nr -k 6 | head -n 4 ps -e -o pid,comm,vsz,rss,pmem,%cpu | sort -nr -k 5 | head -n 3 |
或通过命令
1 |
top |
再按P,M键来切换排序:
1 |
find test -mtime +30 -name "*.log" -exec rm -rf {} \; |
注:
本文所有例子在centos7上测试通过,其它系统可能略有差异。