Skip to main content

linux常用命令

· 14 min read

类似man 查看命令用法

curl cht.sh/ls

用户权限

adduser www
passwd www # 修改密码
#修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(ALL) ALL
#修改完毕,现在可以用www帐号登录,然后用命令 sudo – ,即可获得root权限进行操作

some

ip 查看

netstat -nltp
iptables -L
lsof -i:80
lsof -n -P -i TCP -s TCP:LISTEN

netstat

yum install -y net-tools
netstat -nltp # 查看 ip

netstat -nap | grep 进程pid
netstat -nap | grep 端口号

chkconfig

chkconfig --list #列出所有的系统服务 chkconfig --list mysqld #列出mysqld服务设置情况 chkconfig --add httpd #增加httpd服务 chkconfig --del httpd #删除httpd服务 /etc/rc[0-6].d删除 chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态 chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭 chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

wget

#1:下载单个文件到当前目录下,也可以-P指定下载目录
wget http://nginx.org/download/nginx-1.8.0.tar.gz
#2:对于网络不稳定的用户可以使用-c和--tries参数,保证下载完成
wget --tries=20 -c http://nginx.org/download/nginx-1.8.0.tar.gz
#3:下载大的文件时,我们可以放到后台去下载,这时会生成wget-log文件来保存下载进度
wget -b http://nginx.org/download/nginx-1.8.0.tar.gz
#4:可以利用—spider参数判断网址是否有效
wget --spider http://nginx.org/download/nginx-1.8.0.tar.gz
#5:自动从多个链接下载文件
cat url_list.txt #先创建一个URL文件
http://nginx.org/download/nginx-1.8.0.tar.gz
http://nginx.org/download/nginx-1.6.3.tar.gz
wget -i url_list.txt
#6:限制下载速度
wget --limit-rate=1m http://nginx.org/download/nginx-1.8.0.tar.gz
#7:登陆ftp下载文件
wget --ftp-user=user --ftp-password=pass ftp://ip/filename

find xargs

find . -name ".py" | xargs -I name sh -c 'echo name ; cat name' find . -name ".py" | xargs -I name sh -c 'echo "\"\"\"@copyright {name}\"\"\"" ; cat name ; echo -e "\n\n\n\n"' > ~ /Desktop/a.txt find . -name "*.js" | xargs -I name sh -c 'echo "\"\"\"@copyright {name}\"\"\"" ; cat name ; echo -e "\n\n\n\n"' > ~ /Desktop/b.txt

iftop 图看io

https://www.vpser.net/manage/iftop.html
yum install -y iftop

iftop -m 5m

TX: 发送流量
RX: 接收流量
TOTAL: 总流量
Cumm: 运行iftop到目前时间的总流量
peak: 流量峰值
rates: 分别表示过去 2s 10s 40s 的平均流量

-P使host信息及端口信息默认就都显示;
-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:#
Host display: General:
n - toggle DNS host resolution P - pause display
s - toggle show source host h - toggle this help display
d - toggle show destination host b - toggle bar graph display
t - cycle line display mode B - cycle bar graph average
T - toggle cumulative line totals
Port display: j/k - scroll display
N - toggle service resolution f - edit filter code
S - toggle show source port l - set screen filter
D - toggle show destination port L - lin/log scales
p - toggle port display ! - shell command
q - quit
Sorting:
1/2/3 - sort by 1st/2nd/3rd column
< - sort by source name
> - sort by dest name
o - freeze current order

iotop http://man.linuxde.net/iotop

yum install -y iotop
iotop -d 5

常用快捷键:
左右箭头:改变排序方式,默认是按IO排序。
r:改变排序顺序。
o:只显示有IO输出的进程。
p:进程/线程的显示方式的切换。
a:显示累积使用量。

firewall

firewall-cmd --state
systemctl disable firewalld.service # 在开机时禁用一个服务

iostat

yum install -y sysstat

iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -m 1 10 #查看设备使用率(%util)

参数
-d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。
-x,该选项将用于显示和io相关的扩展数据。

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

sed

http://man.linuxde.net/sed

sed -i 's/book/books/g' file

# 删除#开头行
sed -i '/^#/'d filebeat.yml
# 删除空白行
sed -i /^[[:space:]]*$/d filebeat.yml

cat

cat <<EOF
cat > filename # 敲完内容,ctrl+d
cat > filename <<EOF
敲完内容
EOF

tee

读取标准输入的数据,并将其内容输出成文件

tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://cmf3ratl.mirror.aliyuncs.com"]
}
EOF

[root@localhost ~]# who | tee who.out
root pts/0 2009-02-17 07:47 (123.123.123.123)
[root@localhost ~]# cat who.out
root pts/0 2009-02-17 07:47 (123.123.123.123)
[root@localhost ~]# pwd | tee -a who.out
/root
[root@localhost ~]# cat who.out
root pts/0 2009-02-17 07:47 (123.123.123.123)
/root
[root@localhost ~]#

rename

rename 's/\.jpeg$/\.jpg/' *.jpeg
rename 's/_\w*/_/' *.mp3

split文件分割

split -l 2000 data.mt -d seofile_
curl -H 'Content-Type:text/plain' --data-binary @seofile_00 "http://data.zz.baidu.com/urls?site=www.app-echo.com&token=3iyzwDoYB6IQAMKL"

//每3行拆分成一个文件,拆分后的文件名以name开头,以数字作为后缀后缀长度为1
split -l 3 test -d -a 1 name

//每三个字节拆分成一个文件,默认不加单位就是字节,也可以带单位比如KB,MB等
split -b 3 test -d -a 1 new

redis key分布

# 1.sh
for i in `seq 1 100`;do
redis-cli -h 230f029eefb64e44.m.cnsha.kvstore.aliyuncs.com -a zc1BK5JM randomkey
done

./1.sh > r.keys

cat r.keys | awk -F ':' '{print $1}' | sort | uniq -c | sort -r -n

text len 排序

awk '{ print length, $0}' bj.conf | sort -n | sed 's/.* //'

grep

-i  忽略大小写
-n  显示行号
--color   高亮关键字,centos7默认已经高亮
-c  统计符合条件的行数
-o  只打印关键字,每个被匹配的关键字单独显示一行
-B   同时显示之前的行,后面必须有数字,如 -B2
-A   同时显示之后的行
-w  只匹配独立单词,也就是精确匹配
-v  反向查找
-e  同时匹配多个目标
-q  静默模式,只关心有没有匹配到,不关心内容
-E  可以使用扩展正则,,相当于egrep
-P  使用兼容perl的正则
fgrep: 不支持正则表达式,只能匹配写死的字符串,但是速度奇快,效率高,fastgrep

tail -f api::header-debug-`date +"%w"`.log | grep ' {.*}' -o --line-buffered | jq

进程

#查看端口情况
netstat -apn | grep 9000 # ss better
ps -aux | grep php

scp

#文件
scp goaccess.conf 139:196:14:10:/usr/local/etc/goaccess.conf
#文件夹
scp -qr -P 20248 name1 root@172.16.3.121:/data/name2/

文件大小

du -sh du -sh *

文件个数

ls -l | wc -l

解压

zip

zip -r a.zip dirname
zip a.zip tests/* -x tests/ln.log #排除一个文件
zip -m a.zip test.md #向压缩文件中a.zip中添加test.md文件

unzip

unzip -r a.zip *
unzip -n test.zip -d /tmp #在指定目录/tmp解压缩,如已存在,-n 不覆盖 ~ -o 覆盖

tar

tar -zcvf filename.tar.gz folderName #压缩
tar -zcvf FileName.tar.gz DirName --exclude DirName/DirExcName #排除
tar -zcvf FileName.tar.gz DirName --exclude DirName/Dir1Name --exclude DirName/Dir2Name #多个排除

tar -zxvf filename.tar.gz -C /pcmoto/club/ #解压
tar -zxvf filename.tar.gz -C .

seq

seq -f "%04g" 5 4 1000 | xargs -n 15

completion

yum -y install bash-completion iot-echo completion bash > /etc/bash_completion.d/iot-echo.bash source /etc/bash_completion.d/iot-echo.bash

cpu

查看各cpu状况,top 然后按1

查看物理CPU的个数
#cat /proc/cpuinfo |grep &quot;physical id&quot;|sort |uniq|wc -l

查看逻辑CPU的个数
#cat /proc/cpuinfo |grep &quot;processor&quot;|wc -l

查看CPU是几核
#cat /proc/cpuinfo |grep &quot;cores&quot;|uniq

查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq

### uname -a
Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看当前操作系统内核信息)

### cat /etc/issue | grep Linux
Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
(查看当前操作系统发行版信息)

### cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8个逻辑CPU, 也知道了CPU型号)

### cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(说明实际上是两颗4核的CPU)

### getconf LONG_BIT
32
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)

### cat /proc/cpuinfo | grep flags | grep &#39; lm &#39; | wc -l
8
(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)

如何获得CPU的详细信息:
linux命令:cat /proc/cpuinfo
用命令判断几个物理CPU,几个核等:
逻辑CPU个数:
### cat /proc/cpuinfo | grep &quot;processor&quot; | wc -l
物理CPU个数:
### cat /proc/cpuinfo | grep &quot;physical id&quot; | sort | uniq | wc -l
每个物理CPU中Core的个数:
### cat /proc/cpuinfo | grep &quot;cpu cores&quot; | wc -l
是否为超线程?
如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。
每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
### cat /proc/cpuinfo | grep &quot;siblings&quot;

column

cat  $(find . -name 310.html) | column -s',' -t

hostname

hostname m201
hostnamectl set-hostname m201
cat /proc/sys/kernel/hostname

tcpdump

# 端口
tcpdump -i eth0 port 61617 -w ~/tcpdump_61617.pcap

sudo tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -A -nn
所以常用的选项也就这几个:
tcpdump -D
tcpdump -c num -i int -nn -XX -vvv