原创

Linux运维必会的命令详解

Linux运维必会的命令详解


1. mkdir

简介

创建文件目录

语法

mkdir [-p] dirName

参数

-p 确认目录是否已经存在,若不存在则建立目录而不会报错

示例

创建test文件夹及在其中创建new文件夹

$ mkdir -p test/new

2. find

简介

文件搜索

语法

find path -option [ expression ] [ -exec   -ok   command ]   {} \;

参数

expression表达式默认是 -print
-mount -xdev 只查询和指定目录一个文件系统下的文件
-amin n 在过去n分钟内被读取过
-anewer file 读取时间迟于file的文件
-atime n 在过去n天内被读取得文件
-cmin n 在过去n分钟被修改过
-cnewer file 比文件file更新的文件
-ctime n 在过去n天内被修改过的文件
-empty 空的文件
-gid n or -group name gid 是 n 或是 group 名称是 name
-ipath p -path p 路径符合p的文件,ipath会忽略大小写
-name name -iname name 文件名符合name的文件,iname忽略大小写
-size n 文件大小是n单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组
-type
c 文件类型是c的文件
d 目录
c 字型装置工作
b 区块装置文件
p 具名贮列
f 一般文件
i 符号连接
s socket
-pid n process id是n的文件

示例

在当前目录及子目录以.sh结尾的文件列出来

$ find . -name "*.sh"

在当前目录及子目录列出20天内更新过的文件

$ find . -ctime -20

查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件

$ find . -type f -perm 644 -exec ls -l {} \;

3. awk

简介

文本处理

语法

awk 'condition { action }' filename

参数

-F 指定字段分隔符
action的相关函数:
toupper():字符转为大写
tolower():字符转为小写
length():返回字符串长度
substr():返回子字符串
substr($1,2):返回第一个字段,从第2个字符开始一直到结束
substr($1,2,3):返回第一个字段,从第2个字符开始开始后的3个字符
sin():正弦
cos():余弦
sqrt():平方根
rand():随机数

示例

$ echo "aa bb cc dd" | awk -F "bb" '{ print $1}'
aa
$ cat test.txt 
aa ss
dd ff
gg hh

$ cat test.txt | awk '{print NR")", $0}'
1) aa ss
2) dd ff
3) gg hh
$ cat exp.txt 
/stsvc/fms/conf/application.yml
/stsvc/sms/conf/application.yml
/stsvc/tms/conf/application.yml
/root/home/chenfan
/root/home/jhhuang

$ cat exp.txt | awk '/stsvc/ {print $0}'     #包含 stsvc 的行
/stsvc/fms/conf/application.yml
/stsvc/sms/conf/application.yml
/stsvc/tms/conf/application.yml

$ cat exp.txt | awk '/stsvc\/fms/ {print $0}' #包含 stsvc/fms 的行
/stsvc/fms/conf/application.yml
$ cat exp.txt | awk 'NR%2==1 {print $0}'  #奇数行
/stsvc/fms/conf/application.yml
/stsvc/tms/conf/application.yml
/root/home/jhhuang
$ echo "aa ss dds" | awk '{ if($3 == "dd") print $0; else print "nothing"}'
nothing

4. sed

简介

文本处理

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数

-e<script> 以选项中指定的script来处理输入的文本文件
-f<script> 以选项中指定的script来处理输入的文本文件
-h 显示帮助
-n 仅显示想script处理后的结果
动作说明:
a 新增,新增的内容出现在下一行
i 插入,插入的内容出现在上一行
c 取代,取代n1,n2之间的行
d 删除
p 打印,打印选择的数据,通常与sed -n一起运行
s 取代,就是替换功能

示例

在第二行下面添加Hello

$ sed '2a Hello'

搜索/etc/passwd包含root关键字的行

$ nl /etc/passwd| sed -n '/root/p'

删除/etc/passwd包含root关键字的行

$ nl /etc/passwd| sed '/root/d'

搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行

$ nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'

数据的搜索与替换

$ sed 's/要被取代的字串/新的字串/g'

5. uniq

简介

检查文件中的重复行列

语法

uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

参数

-c 在列旁边显示该行重复次数
-d 仅显示重复出现的行列
-u 仅显示出行一次的行列
-f<栏位> 忽略指定的栏位
-s 忽略比较指定的字符
-w<字符位置> 指定要比较的字符

示例

$ cat testfile 
test 30  
test 30  
test 30  
Hello 95  
Hello 95  
Hello 95  
Hello 95  
Linux 85  
Linux 85 

$ uniq -c testfile      #删除重复行后的内容 
3 test 30             #前面的数字的意义为该行共出现了3次 
4 Hello 95            #前面的数字的意义为该行共出现了4次 
2 Linux 85            #前面的数字的意义为该行共出现了2次 

6. sort

简介

行列排序

语法

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

参数

-b 忽略每行文本前面的空格
-c 检查文件是否按照顺序排序
-d 只处理英文字母。数字和空格,忽略其他字符
-f 排序时,将小写字母看成大写字母
-i 只处理040-176之间的ACSII码
-m 将排序好的文件合并
-M 将前面三个字母按照月份缩写排序
-n 依照数值的大小排序
-r 以相反的顺序排序
-u 唯一,输出的结果是去重过的
-t<分隔字符> 指定排序时所用的栏位分隔字符
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一个栏位

示例

$ cat testfile      #testfile文件原有排序 
test 30  
Hello 95  
Linux 85 

$ sort testfile     #重排结果 
Hello 95  
Linux 85  
test 30 

7. tail

简介

查看文件内容

语法

tail [参数] [文件] 

参数

-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

示例

循环显示notes.log的文件内容

$ tail -f notes.log

8. head

简介

查看文件开头部分内容

语法

head [参数] [文件]  

参数

-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数

示例

显示 notes.log 文件的开头 5 行

$ head -n 5 runoob_notes.log

9. mkfs

简介

在特定的分区建立文件系统

语法

mkfs [-V] [-t fstype] [fs-options] filesys [blocks]

参数

device : 预备检查的硬盘分区,例如:/dev/sda1
-V : 详细显示模式
-t : 给定档案系统的型式,Linux 的预设值为 ext2
-c : 在制做档案系统前,检查该partition 是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
block : 给定 block 的大小

示例

在 /dev/hda5 上建一个 msdos 的档案系统,同时检查是否有坏轨存在

$ mkfs -V -t msdos -c /dev/hda5

将sda6分区格式化为ext3格式

$ mfks -t ext3 /dev/sda6  

10. chmod

简介

控制文件调用权限

语法

chmod [-cfvR] [--help] [--version] mode file...

参数

mode参数:

[ugoa...][[+-=][rwxX]...][,...]

(1) u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是
(2) + 表示增加权限、- 表示取消权限、= 表示唯一设定权限
(3) r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行

-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)

示例

将文件 file1.txt 设为所有人皆可读取

$ chmod ugo+r file1.txt
#或者
$ chmod a+r file1.txt

将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入

$ chmod ug+w,o-w file1.txt file2.txt

11. crontab

简介

执行定时任务

语法

crontab [ -u user ] file
#或者
crontab [ -u user ] { -l | -r | -e }

参数

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表
时间格式:
(1) 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推
(2) 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
(3) 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
(4) 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推

f1  f2   f3   f4   f5   program
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

示例

每分钟执行一次/bin/ls

* * * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup

0 6-12/3 * 12 * /usr/bin/backup

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “haha”

20 0-23/2 * * * echo"haha"

每天22:50关闭ssh服务

50 22 * * * /sbin/service sshd stop

每月1号和15号检查/home 磁盘

0 0 1,15 * * fsck /home

12. lsof

简介

列出当前系统打开文件的工具

语法

 lsof [options] filename

参数

默认 : 没有选项,lsof列出活跃进程的所有打开文件
组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数
-a 结果进行“与”运算(而不是“或”)
-c<进程名> 列出指定进程锁打开的文件
-g 列出GID号进程详情
+d<文件号> 列出占用该文件号的进程
+D<目录> 递归列出目录下被打开的文件
-n<目录> 列出NFS的文件
-i<条件> 列出符合条件的进程
-p<进程号> 列出指定进程号打开的文件
-l 在输出显示用户ID而不是用户名
-h 获得帮助
-t 仅获取进程ID
-U 获取UNIX套接口地址
-F 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)

示例

#列出所有打开的文件:
$ lsof
#备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位

#递归查看某个目录的文件信息
$ lsof +D /filepath/filepath2/
#备注: 使用了+D,对应目录下的所有子目录和文件都会被列出

# 列出某个用户打开的文件信息
lsof  -u username

# 列出某个程序所打开的文件信息
lsof -c mysql

# 通过某个进程号显示该进行打开的文件
lsof -p 1

# 列出所有tcp 网络连接信息
lsof  -i tcp

# 列出谁在使用某个端口
lsof -i :3306

# 列出所有网络文件系统
lsof -N

# 根据文件描述列出对应的文件信息
lsof -d description(like 2)

13. netstat

简介

获取系统的网络状况

语法

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

参数

-a或–all 显示所有连线中的Socket
-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址
-c或–continuous 持续列出网络状态
-C或–cache 显示路由器配置的快取信息
-e或–extend 显示网络其他相关信息
-F或–fib 显示FIB
-g或–groups 显示多重广播功能群组组员名单
-h或–help 在线帮助
-i或–interfaces 显示网络界面信息表单
-l或–listening 显示监控中的服务器的Socket
-M或–masquerade 显示伪装的网络连线
-n或–numeric 直接使用IP地址,而不通过域名服务器
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称
-o或–timers 显示计时器
-p或–programs 显示正在使用Socket的程序识别码和程序名称
-r或–route 显示Routing Table
-s或–statistics 显示网络工作信息统计表
-t或–tcp 显示TCP传输协议的连线状况
-u或–udp 显示UDP传输协议的连线状况
-v或–verbose 显示指令执行过程
-V或–version 显示版本信息
-w或–raw 显示RAW传输协议的连线状况
-x或–unix 此参数的效果和指定"-A unix"参数相同
–ip或–inet 此参数的效果和指定"-A inet"参数相同

示例

显示详细的网络状况

$ netstat -a

显示所有的监听套接口

$ netstat -l

显示所有tcp和udp连接

$ netstat -tuln

14. route

简介

查看路由表

语法

route [-f] [-p] [Command] [Destination] [mask Netmask] [Gateway] [metric Metric] [if Interface]

参数

-c 显示更多信息
-n 不解析名字
-v 显示详细的处理信息
-F 显示发送信息
-C 显示路由缓存
-f 清除所有网关入口的路由表
-p 与 add 命令一起使用时使路由具有永久性
add:添加一条新路由。
del:删除一条路由。
-net:目标地址是一个网络
-host:目标地址是一个主机
netmask:当添加一个网络路由时,需要使用网络掩码
gw:路由数据包通过网关。注意,你指定的网关必须能够达到
metric:设置路由跳数

示例

添加网关/设置网关

$ route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

屏蔽一条路由

$ route add -net 224.0.0.0 netmask 240.0.0.0 reject

删除路由记录

$ route del -net 224.0.0.0 netmask 240.0.0.0
$ route del -net 224.0.0.0 netmask 240.0.0.0 reject

删除和添加设置默认网关

$ route del default gw 192.168.120.240
$ route add default gw 192.168.120.240

15. tcpdump

简介

用于抓包分析数据包

语法

tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]

参数

-a 尝试将网络和广播地址转换成名称
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出
-e 在每列倾倒资料上显示连接层级的文件头
-f 用数字显示网际网络地址
-F<表达文件> 指定内含表达方式的文件
-i<网络界面> 使用指定的网络截面送出数据包
-l 使用标准输出列的缓冲区
-n 不把主机的网络地址转换成名字
-N 不列出域名
-O 不将数据包编码最佳化
-p 不让网络界面进入混杂模式
-q 快速输出,仅列出少数的传输协议信息
-r <数据包文件> 从指定的文件读取数据包数据
-s <数据包大小> 设置每个数据包的大小
-S 用绝对而非相对数值列出TCP关联数
-t 在每列倾倒资料上不显示时间戳记
-tt 在每列倾倒资料上显示未经格式化的时间戳记
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型
-v 详细显示指令执行过程
-vv 更详细显示指令执行过程
-x 用十六进制字码列出数据包资料
-w<数据包文件> 把数据包数据写入指定的文件

示例

显示TCP包信息

$ tcpdump

显示指定数量包

$ tcpdump -c 20

精简显示

$ tcpdump -c 10 -q //精简模式显示 10个包

16. tar

简介

用于文件备份

语法

tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][--after-date=<日期时间>][--atime-preserve][--backuup=<备份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<范本样式>][--force-local][--group=<群组名称>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用户名称>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<区块数目>][--recursive-unlink][--remove-files][--rsh-command=<执行指令>][--same-owner][--suffix=<备份字尾字符串>][--totals][--use-compress-program=<执行指令>][--version][--volno-file=<编号文件>][文件或目录...]

参数

-A或–catenate 新增文件到已存在的备份文件
-b<区块数目>或–blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes
-B或–read-full-records 读取数据时重设区块大小
-c或–create 建立新的备份文件
-C<目的目录>或–directory=<目的目录> 切换到指定的目录
-d或–diff或–compare 对比备份文件内和文件系统上的文件的差异
-f<备份文件>或–file=<备份文件> 指定备份文件
-F<Script文件>或–info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件
-g或–listed-incremental 处理GNU格式的大量备份
-G或–incremental 处理旧的GNU格式的大量备份
-h或–dereference 不建立符号连接,直接复制该连接所指向的原始文件
-i或–ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF
-k或–keep-old-files 解开备份文件时,不覆盖已有的文件
-K<文件>或–starting-file=<文件> 从指定的文件开始还原
-l或–one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算
-m或–modification-time 还原文件时,不变更文件的更改时间
-M或–multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式
-N<日期格式>或–newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里
-o或–old-archive或–portability 将资料写入备份文件时使用V7格式
-O或–stdout 把从备份文件里还原的文件输出到标准输出设备
-p或–same-permissions 用原来的文件权限还原文件
-P或–absolute-names 文件名使用绝对名称,不移除文件名称前的"/“号
-r或–append 新增文件到已存在的备份文件的结尾部分
-R或–block-number 列出每个信息在备份文件中的区块编号
-s或–same-order 还原文件的顺序和备份文件内的存放顺序相同
-S或–sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或–list 列出备份文件的内容
-T<范本文件>或–files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件
-u或–update 仅置换较备份文件内的文件更新的文件
-U或–unlink-first 解开压缩文件还原文件之前,先解除文件的连接
-v或–verbose 显示指令执行过程
-V<卷册名称>或–label=<卷册名称> 建立使用指定的卷册名称的备份文件
-w或–interactive 遭遇问题时先询问用户
-W或–verify 写入备份文件后,确认文件正确无误
-x或–extract或–get 从备份文件中还原文件
-X<范本文件>或–exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件
-z或–gzip或–ungzip 通过gzip指令处理备份文件
-Z或–compress或–uncompress 通过compress指令处理备份文件
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度
–after-date=<日期时间> 此参数的效果和指定”-N"参数相同
–atime-preserve 不变更文件的存取时间
–backup=<备份方式>或–backup 移除文件前先进行备份
–checkpoint 读取备份文件时列出目录名称
–concatenate 此参数的效果和指定"-A"参数相同
–confirmation 此参数的效果和指定"-w"参数相同
–delete 从备份文件中删除指定的文件。
–exclude=<范本样式> 排除符合范本样式的文件
–group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组
–help 在线帮助
–ignore-failed-read 忽略数据读取错误,不中断程序的执行
–new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同
–newer-mtime 只保存更改过的文件
–no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理
–null 从null设备读取文件名称
–numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称
–owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户
–posix 将数据写入备份文件时使用POSIX格式
–preserve 此参数的效果和指定"-ps"参数相同
–preserve-order 此参数的效果和指定"-A"参数相同
–preserve-permissions 此参数的效果和指定"-p"参数相同
–record-size=<区块数目> 此参数的效果和指定"-b"参数相同
–recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接
–remove-files 文件加入备份文件后,就将其删除
–rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令
–same-owner 尝试以相同的文件拥有者还原文件
–suffix=<备份字尾字符串> 移除文件前先行备份
–totals 备份文件建立后,列出文件大小
–use-compress-program=<执行指令> 通过指定的指令处理备份文件
–version 显示版本信息
–volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号

示例

压缩当前目录下所有的文件,非打包

$ tar -czvf test.tar.gz *

列出压缩文件内容

$ tar -tzvf test.tar.gz 

解压文件

$ tar -zxvf test.tar.gz
正文到此结束