01 . Linux常用命令

线上查询帮助命令

命令 功能说明
man 查看命令帮助,命令的词典,更复杂的还有info,但不常用。
help 查看Linux内置命令的帮助,比如lsof

文件和目录操作命令

命令 功能说明
ls 全拼list,功能是列出目录的内容及其内容属性信息。
cd 全拼change directory,功能是从当前工作目录切换到指定的工作目录
cp 全拼copy,其功能为复制文件或目录。
Find 查找的意思,用于查找目录及目录下的文件。
Mkdir 全拼make directories,其功能是创建目录。
Mv 全拼move,其功能是移动或重命名文件。
Pwd 全拼print working directory,其功能是显示当前工作目录的绝对路径。
Rename 用于重命名文件
Rm 全拼remove,其功能是删除一个或多个文件或目录。
Rmdir 全拼remove empty directories,功能是删除空目录
Touch 创建新的空文件,改变已有文件的时间戳属性。
Tree 功能是以树形结构显示目录下的内容。
Basename 显示文件名或目录名。
Dirname 显示文件或目录路径。
Chattr 改变文件的扩展属性。
Laattr 查看文件扩展属性。
File 显示文件的类型。
md5sum 计算和校验文件的MD5值。

查看文件及内容处理命令

命令 功能说明
cat 全拼concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。
tac tac是cat的反向拼写,因此命令的功能为反向显示文件内容。
More 分页显示文件内容。
Less 分页显示文件内容,more命令的相反用法。
Head 显示文件内容的头部。
Tail 显示文件内容的尾部。
Cut 将文件的每一行按指定分隔符分割并输出
Split 分割文件为不同的小片段。
Paste 按行合并文件内容。
Sort 对文件的文本内容排序。
Uniq 去除重复行
wc 统计文件的行数、单词数或字节数。
Lconv 转换文件的编码格式。
Dos2unix 将DOS格式文件转换成UNIX格式。
diff 全拼difference,比较文件的差异,常用于文本文件。
Vimdiff 命令行可视化文件比较工具,常用于文本文件。
Rev 反向输出文件内容。
Grep/egrep 过滤字符串,三剑客老三。
Join 按两个文件的相同字段合并。
Tr 替换或删除字符。
vi/vim 命令行文本编辑器。

文件压缩及解压缩命令

命令 功能说明
Tar 打包压缩
Unzip 解压文件
Gzip gzip压缩工具
Zip 压缩工具

信息显示命令

命令 功能说明
Uname 显示操作系统相关信息的命令
Hostname 显示或者设置当前系统的主机名
dmesg 显示开机信息,用于诊断系统故障
uptime 显示系统运行时间及负载
Stat 显示文件或文件系统的状态
Du 计算磁盘空间使用情况
Df 报告文件系统磁盘空间的使用情况
Top 实时显示系统资源使用情况
Free 查看系统内存
Date 显示与设置系统时间
Cal 查看日历等时间信息
linux磁盘已满,查看那个文件最多

1. df -Th查看磁盘空间占用情况

[root@IntelRC-Nginx-N023 ~]# df -Th
Filesystem                  Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root     xfs        40G   35G  5.4G  87% /
devtmpfs                    devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs                       tmpfs     3.9G   56K  3.9G   1% /dev/shm
tmpfs                       tmpfs     3.9G  427M  3.4G  11% /run
tmpfs                       tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1                   xfs       509M  156M  354M  31% /boot
/dev/mapper/vm_data-lv_data xfs       300G   30G  271G  10% /opt/data
tmpfs                       tmpfs     779M     0  779M   0% /run/user/0

2. 使用du -sh /* |sort -nr查看那个目录占用空间大

[root@IntelRC-Nginx-N023 ~]# du -sh /* |sort -nr
du: cannot access ‘/proc/256532/task/256532/fd/4’: No such file or directory
du: cannot access ‘/proc/256532/task/256532/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/256532/fd/4’: No such file or directory
du: cannot access ‘/proc/256532/fdinfo/4’: No such file or directory
395M	/run
319M	/home
130M	/boot
120M	/etc
74M	/root
56K	/dev
33G	/var
30G	/opt
20M	/tmp
1.5G	/usr
0	/sys
0	/srv
0	/sbin
0	/proc
0	/mnt
0	/media
0	/lib64
0	/lib
0	/data
0	/bin

3. 然后那个目录占用多 再通过du -s /root/* | sort -nr 一层层排查,找到占用文件多的地方。

[root@IntelRC-Nginx-N023 ~]# du -sh /var/* |sort -nr
425M	/var/opt
245M	/var/cache
64M	/var/lib
29G	/var/adm
16K	/var/spool
16K	/var/data
8.0K	/var/db
3.8G	/var/log
0	/var/yp
0	/var/tmp
0	/var/run
0	/var/preserve
0	/var/nis
0	/var/mail
0	/var/lock
0	/var/local
0	/var/kerberos
0	/var/gopher
0	/var/games
0	/var/empty
0	/var/crash


[root@IntelRC-Nginx-N023 ~]# du -sh /var/adm/ |sort -nr
29G	/var/adm/

4. 快速删除大量文件

假如你要在linux下删除大量文件,比如100万、1000万,像/var/spool/clientmqueue/的mail邮件,/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf *可能就不好使了。 rsync 可以用来清空目录或文件,如下:

# 1. 先建立一个空目录
mkdir /data/blank

# 2. rsync删除目标目录
rsync --delete-before -d /data/blank/ /var/adm/
# --delete-before 接收者在传输之前进行删除操作

# 这样目标目录很快就被清空了

为什么rsync能快速删除大文件?

1rm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作的第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;第二阶段,lstat64确定所有文件的状态;第三阶段,通过unlink执行实际删除。这三个阶段都有比较多的系统调用和文件系统操作。

2rsync所做的系统调用很少没有针对单个文件做lstat和unlink操作。命令执行前期,rsync开启了一片共享内存,通过mmap方式加载目录信息。只做目录同步,不需要针对单个文件做unlink。另外,在其他人的评测里,rm的上下文切换比较多,会造成System CPU占用较多——对于文件系统的操作,简单增加并发数并不总能提升操作速度。 总结:频繁做减法不如直接从头来过把文件系统的目录与书籍的目录做类比,rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销。

如果以上方法没找到问题所在,那么可以使用以下命令, 看看是否删除掉的文件仍然被进程占用而没有进行实际删除

lsof |grep deleted
zabbix_ag    945            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    945            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    946            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    946            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    947            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    947            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    948            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    948            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    949            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    949            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    950            zabbix    1w      REG   
Free

从系统层面分析

/*
		Mem:     内存使用的情况总览表.
		Total:   机器总的物理内存,单位为: M
		Used:    用掉的内存
		Free:		 空闲的物理内存
		物理内存 = used + free + buff/cache
*/

从程序角度分析

/*
		shared多个进程共享的内存总和,当前废弃不用.
		buffers  缓存内存数
		cached   缓存内存数
		程序预留的内存 = buffers + cached
*/

小结

/*
		程序占用内存数:  -buffers/cached
		看系统用掉内存:  used - (buffers+cached)
*/

搜索文件命令

命令 功能说明
which 查找二进制命令,按环境变量PATH路径查找
find 从磁盘遍历查找文件或目录
whereis 查找二进制命令,按环境变量PATH路径查找
Locate 从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用updatedb更新库

用户管理命令

命令 功能说明
useradd 添加用户
usermod 修改系统已经存在的用户属性
userdel 删除用户
groupadd 添加用户组
passwd 修改用户密码
chage 修改用户密码有效期限
id 查看用户的uid,gid及归属的用户组
su 切换用户身份
visudo 编辑/etc/sudoers文件的专属命令。
Sudo 以另外一个用户身份(默认root用户)执行事先在sudoers文件允许的命令。

基础网络操作命令

命令 功能说明
telnet 使用TELNET协议远程登录
ssh 使用SSH加密协议远程登录
scp 全拼secure copy,用于不同主机之间复制文件
wget 命令行下载文件
ping 测试主机之间网络的连通性
route 显示和设置linux系统的路由表
ifconfig 查看、配置、启用或禁用网络接口的命令
ifup 启动网卡
ifdown 关闭网卡
netstat 查看网络状态
ss 查看网络状态
Curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具
Curl

常用参数

-A/--user-agent <string>         #     设置用户代理发送给服务器
-b/--cookie <name=string/file>  #  cookie字符串或文件读取位置
-c/--cookie-jar <file>            #        操作结束后把cookie写入到这个文件中
-C/--continue-at <offset>      #      断点续转
-D/--dump-header <file>        #      把header信息写入到该文件中
-e/--referer                    #              来源网址
-f/--fail                       #                   连接失败时不显示http错误
-o/--output                   #               把输出写到该文件中
-O/--remote-name             #         把输出写到该文件中,保留远程文件的文件名
-r/--range <range>          #            检索来自HTTP/1.1或FTP服务器字节范围
-s/--silent                   #                 静音模式。不输出任何东西
-T/--upload-file <file>        #          上传文件
-u/--user <user[:password]>  #    设置服务器的用户和密码
-w/--write-out [format]      #          什么输出完成后
-x/--proxy <host[:port]>     #         在给定的端口上使用HTTP代理
-#/--progress-bar                        进度条显示当前的传送状态

使用案例

下载访问的网页

curl http://www.linux.com >> baidu.html
curl -o baidu.html http://www.baidu.com
curl -O http://www.baidu.com/index.html  # 要具体到某个文件,不然不行

查看网站状态码返回值

curl -o /dev/null -s -w %{http_code} www.linux.com

保存http的response里面的cookie信息。内置option:-c(小写)

curl -c cookiec.txt  http://www.linux.com

保存http的response里面的header信息。内置option: -D

curl -D cookied.txt http://www.linux.com

网站通过监视你的cookie信息来判断你是否正常访问他们的网站的,因此我们需要使用保存的cookie信息。内置option: -b

curl -b cookiec.txt http://www.linux.com

模仿浏览器,这样服务器端就会认为是使用IE8.0去访问的

curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com

伪造referer(盗链)很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了curl中内置option:-e可以让我们设定referer

curl -e "www.linux.com" http://mail.linux.com

利用curl下载文件,有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样

# 有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样
curl -O http://www.linux.com/dodo[1-5].JPG

# 下载重命名
curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG

# 由于下载的hello与bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下载的会把第一次下载的覆盖,这样就需要对文件进行重命名。
curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG

分块下载,有时候下载的东西会比较大,这个时候我们可以分段下载。使用内置option:-r

curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG
curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG
curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG
cat dodo1_part* > dodo1.JPG

curl可以通过ftp下载文件,curl提供两种从ftp中下载的语法

curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG
curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG

下载进度条

# 显示下载进度条
curl -# -O http://www.linux.com/dodo1.JPG

# 不会显示下载进度信息
curl -s -O http://www.linux.com/dodo1.JPG

断点续传

在windows中,我们可以使用迅雷这样的软件进行断点续传。curl可以通过内置option:-C同样可以达到相同的效果

curl -C -O http://www.linux.com/dodo1.JPG

上传文件

curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/

显示抓取错误

curl -f http://www.linux.com/error

其他一些参数

-a/--append                        上传文件时,附加到目标文件
--anyauth                            可以使用“任何”身份验证方法
--basic                                使用HTTP基本验证
-B/--use-ascii                      使用ASCII文本传输
-d/--data <data>                  HTTP POST方式传送数据
--data-ascii <data>            以ascii的方式post数据
--data-binary <data>          以二进制的方式post数据
--negotiate                          使用HTTP身份验证
--digest                        使用数字身份验证
--disable-eprt                  禁止使用EPRT或LPRT
--disable-epsv                  禁止使用EPSV
--egd-file <file>              为随机数据(SSL)设置EGD socket路径
--tcp-nodelay                  使用TCP_NODELAY选项
-E/--cert <cert[:passwd]>      客户端证书文件和密码 (SSL)
--cert-type <type>              证书文件类型 (DER/PEM/ENG) (SSL)
--key <key>                    私钥文件名 (SSL)
--key-type <type>              私钥文件类型 (DER/PEM/ENG) (SSL)
--pass  <pass>                  私钥密码 (SSL)
--engine <eng>                  加密引擎使用 (SSL). "--engine list" for list
--cacert <file>                CA证书 (SSL)
--capath <directory>            CA目   (made using c_rehash) to verify peer against (SSL)
--ciphers <list>                SSL密码
--compressed                    要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout <seconds>    设置最大请求时间
--create-dirs                  建立本地目录的目录层次结构
--crlf                          上传是把LF转变成CRLF
--ftp-create-dirs              如果远程目录不存在,创建远程目录
--ftp-method [multicwd/nocwd/singlecwd]    控制CWD的使用
--ftp-pasv                      使用 PASV/EPSV 代替端口
--ftp-skip-pasv-ip              使用PASV的时候,忽略该IP地址
--ftp-ssl                      尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd                  要求用 SSL/TLS 来进行ftp数据传输
-F/--form <name=content>        模拟http表单提交数据
-form-string <name=string>      模拟http表单提交数据
-g/--globoff                    禁用网址序列和范围使用{}和[]
-G/--get                        以get的方式来发送数据
-h/--help                      帮助
-H/--header <line>              自定义头信息传递给服务器
--ignore-content-length        忽略的HTTP头信息的长度
-i/--include                    输出时包括protocol头信息
-I/--head                      只显示文档信息
-j/--junk-session-cookies      读取文件时忽略session cookie
--interface <interface>        使用指定网络接口/地址
--krb4 <level>                  使用指定安全级别的krb4
-k/--insecure                  允许不使用证书到SSL站点
-K/--config                    指定的配置文件读取
-l/--list-only                  列出ftp目录下的文件名称
--limit-rate <rate>            设置传输速度
--local-port<NUM>              强制使用本地端口号
-m/--max-time <seconds>        设置最大传输时间
--max-redirs <num>              设置最大读取的目录数
--max-filesize <bytes>          设置最大下载的文件总量
-M/--manual                    显示全手动
-n/--netrc                      从netrc文件中读取用户名和密码
--netrc-optional                使用 .netrc 或者 URL来覆盖-n
--ntlm                          使用 HTTP NTLM 身份验证
-N/--no-buffer                  禁用缓冲输出
-p/--proxytunnel                使用HTTP代理
--proxy-anyauth                选择任一代理身份验证方法
--proxy-basic                  在代理上使用基本身份验证
--proxy-digest                  在代理上使用数字身份验证
--proxy-ntlm                    在代理上使用ntlm身份验证
-P/--ftp-port <address>        使用端口地址,而不是使用PASV
-Q/--quote <cmd>                文件传输前,发送命令到服务器
--range-file                    读取(SSL)的随机文件
-R/--remote-time                在本地生成文件时,保留远程文件时间
--retry <num>                  传输出现问题时,重试的次数
--retry-delay <seconds>        传输出现问题时,设置重试间隔时间
--retry-max-time <seconds>      传输出现问题时,设置最大重试时间
-S/--show-error                显示错误
--socks4 <host[:port]>          用socks4代理给定主机和端口
--socks5 <host[:port]>          用socks5代理给定主机和端口
-t/--telnet-option <OPT=val>    Telnet选项设置
--trace <file>                  对指定文件进行debug
--trace-ascii <file>            Like --跟踪但没有hex输出
--trace-time                    跟踪/详细输出时,添加时间戳
--url <URL>                    Spet URL to work with
-U/--proxy-user <user[:password]>  设置代理用户名和密码
-V/--version                    显示版本信息
-X/--request <command>          指定什么命令
-y/--speed-time                放弃限速所要的时间。默认为30
-Y/--speed-limit                停止传输速度的限制,速度时间'秒
-z/--time-cond                  传送时间设置
-0/--http1.0                    使用HTTP 1.0
-1/--tlsv1                      使用TLSv1(SSL)
-2/--sslv2                      使用SSLv2的(SSL)
-3/--sslv3                      使用的SSLv3(SSL)
--3p-quote                      like -Q for the source URL for 3rd party transfer
--3p-url                        使用url,进行第三方传送
--3p-user                      使用用户名和密码,进行第三方传送
-4/--ipv4                      使用IP4
-6/--ipv6                      使用IP6

彩蛋

# 命令行执行:
# printf "http://me.jinchuang.org" | curl -F-=\<- qrenco.de
# 然后扫一扫

深入网络操作命令

命令 功能说明
nmap 网络扫描命令
lsof 全名list open files,也就是列举系统中已经被打开的文件
mail 发送和接收邮件
mutt 邮件管理命令
nslookup 交互式查询互联网DNS服务器的命令
dig 查找DNS解析过程
host 查询DNS的命令
traceroute 追踪数据传输路由状况
Tcpdump 命令行的抓包工具

有关磁盘与文件系统命令

命令 功能说明
mount 挂载文件系统
umount 卸载文件系统
fsck 检查并修复Linux文件系统
dd 转换或复制文件
dumpe2fs 导出ext2/ext3/ext4文件系统信息
dump ext2/3/4文件系统备份工具
fdisk 磁盘分区命令,适用于2TB以下磁盘分区
parted 磁盘分区命令,没有磁盘大小限制,常用于2TB以下磁盘分区
mkfs 格式化创建Linux文件系统
partprobe 更新内核的硬盘分区表信息
e2fack 检查ext2/ext3/ext4类型文件系统
mkswap 创建Linux交换分区
Swapon 启用交换分区
swapoff 关闭交换分区
sync 将内存缓冲区内的数据写入磁盘
Resize2fs 调整ext2/ext3/ext4文件系统大小

系统权限及用户授权相关命令

命令 功能说明
chmod 改变文件或目录权限
chown 改变文件或目录的属主和属组
chgrp 更改文件用户组
Umask 显示或设置权限掩码

查看系统用户登录信息命令

命令 功能说明
whoami 显示当前有效的用户名称,相当于执行id -un命令
who 显示目前登录系统的用户信息
w 显示已经登陆系统的用户列表,并显示用户正在执行的指令
last 显示登入系统的用户
lastlog 显示系统中所有用户最近一次登录信息
users 显示当前登录系统的所有用户的用户列表
Finger 查找并显示用户信息

内置命令及其他

命令 功能说明
echo 打印变量,或直接输出指定的字符串
printf 将结果格式化输出到标准输出
rpm 管理rpm包的命令
yum 自动化简单化地管理rpm包的命令
watch 周期性的执行给定的命令,并将命令的输出以全屏方式显示
alias 设置系统别名
Unalias 取消系统别名。
date 查看或设置系统时间
clear 清除屏幕,简称清屏
history 查看命令执行的历史纪录。
eject 弹出光驱
time 计算命令执行时间
nc 功能强大的网络工具。
xargs 将标准输入转换成命令行参数。
exec 调用并执行指令的命令
export 设置或者显示环境变量。
unset 删除变量或函数。
type 用于判断另外一个命令是否是内置命令。
Bc 命令行科学计算器

系统管理与性能见识命令

命令 功能说明
chkconfig 管理Linux系统开机启动项。
vmstat 虚拟内存统计。
mpstat 显示各个可用CPU的状态统计
iostat 统计系统IO
sar 全面地获取系统的CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU中断和网络等性能数据。
ipcs 用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。
ipcrm 用来删除一个或更多的消息队列、信号量集或者共享内存标识。
strace 用于诊断、调试Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
Ltrace 命令会跟踪进程的库函数调用,它会显现出哪个库函数被调用。
shutdown 关机
halt 关机
poweroff 关闭电源
logout 退出当前登录的Shell。
exit 退出当前登录的Shell
Ctrl+d 退出当前登录的Shell的快捷键。

进程管理相关命令

命令 功能说明
bg 将一个在后台暂停的命令,变成继续执行 (在后台执行)
fg 将后台中的命令调至前台继续运行
jobs 查看当前有多少在后台运行的命令
kill 终止进程
killall 通过进程名终止进程
pkill 通过进程名终止进程
crontab 定时任务命令
ps 显示进程的快照
pstree 树形显示进程
nice/renice 调整程序运行的优先级
nohup 忽略挂起信号运行指定的命令。
pgrep 查找匹配条件的进程
runlevel 查看系统当前运行级别
init 切换运行级别
Service 启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
posted @ 2020-06-13 01:22  常见-youmen  阅读(385)  评论(1编辑  收藏  举报