头图来源:海行こ?-あるみっく-pixiv
Content
文件相关
查看文件属性
$ls [-alrtAFR] [name...]
相关参数:
-a
显示所有文件及目录(包括.开头的隐藏文件)-l
显示文件型态、权限、拥有者、文件大小等详细信息-r
将文件以相反次序显示(英文字母逆序)-t
将文件建立时间按从旧到新排序-A
同-a,但不列出"."(当前目录)以及".."(父目录)-F
在列出的文件名称后加一符号:可执行文件加"*",目录加"/"-R
递归地显示当前目录及子目录下的文件
查找文件
从磁盘或指定目录查找
$find path -option [-print] [-exec -ok command] {}
相关参数:
find根据下列规则判断path和expression,在命令列第一个-{},!之前的部分为path,之后为expression。如果path为空则默认使用目前路径,如果expression为空则使用-print为预设expression
expression:
-mount,-xdev
只检查和指定目录在同一文件系统下的文件,避免列出其他文件系统的文件-amin n
在过去n分钟内被读取过(超过n分钟前则在n前加"+",下同)-anewer file
比文件file更晚被读过的文件-atime n
在过去n天内被读取过的文件-cmin n
在过去n分钟内创建的文件-cnewer file
比文件file更晚被修改的文件-ctime n
在过去n天内创建的文件-mtime n
在过去n天内被修改过的文件-perm xxx
符合权限表达式的文件-empty
空的文件-gid n
gid是n的文件-group name
group是name的文件-(i)path p
路径文件符合p的文件,加i表示忽略大小写-(i)name n
文件名称符合n的文件,加i表示忽略大小写-size n
文件大小是n的文件。
n的单位:- b 512位元组区块
- c 表示字元数
- k 表示kb
-type c
文件类型是c的文件。
c的取值:- d 目录
- b 区块装置文件
- p 具名贮列
- f 一般文件
- l 符号链接
- s 套接字文件
-pid n
进程id是n的文件
可以使用()将运算式分隔,并使用下列运算
exp1 and exp2
同时符合两运算式!exp
不符合指定运算式exp1 or exp2
符合运算式1或运算式2
从环境变量PATH中查找
$which name
$whereis name
以上两种命令会输出指定name文件在环境变量PATH中配置的路径
查找包含指定内容的文件
$grep [-abcEFGHilLnqrsvVwxy][-A n][-B n][-C n][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
grep命令用于查找文件里符合条件的字符串,也可以用来查找包含查询字符串的文件。
相关参数:
-a
or--text
不忽略二进制数据-b
or--byte-offset
在显示符合范本样式的那一行之前,标出该行第一个字符的编号-A n
or--after-context=n
除了显示符合范本样式的那一行之外,并显示该行之后n行的内容-B n
or--before-context=n
除了显示符合范本样式的那一行之外,并显示该行之前n行的内容-c
or--count
计算符合范本样式的行数-C n
or--context=n
orn
除了显示符合样式的那一行之外,并显示该行之前之后各n行的内容-E
or--extended-regexp
使用正则表达式作为范本样式来匹配-f file
or--file=file
指定规则文件,文件中包含一个或多个范本样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式-F
or--fixed-regexp
将范本样式视为固定字符串的列表-G
or--basic-regexp
将范本样式视为普通的表示法来使用-h
or--no-filename
在显示范本样式的那一行之前不标出包含该行的文件名称-H
or--with-filename
在显示范本样式的那一行之前标出包含该行的文件名称-i
or--ignore-case
忽略字符大小写-l
or--file-with-matches
列出文件内容包含符合指定范本样式文本的文件名称-L
or--files-without-match
列出文件内容不包含符合指定范本样式文本的文件名称-n
or--line-number
在显示符合范本样式的那一行之前标出该行所在行号-o
or--only-matching
只显示匹配范本样式的部分-q
or--quiet
or--silent
不显示任何信息-r
or--recursive
递归地查询指定目录及其子目录中所有文件的内容-s
or--no-messages
不显示错误信息-v
or--invert-match
显示不包含匹配文本的所有行-V
or--version
显示版本信息-w
or--word-regexp
只显示全字符符合的行-x
or--line-regexp
只显示一整行均符合范本样式的行-y
此参数的效果和指定-i
参数相同
分割文件
$split [--help][--version][-n][-b n][-C n][-l n][要分割的文件][输出文件名]
split命令用于将一个文件分割成数个文件,默认情况下将按每1000行分割成一个小文件
相关参数:
-n
指定每n行分割成一个小文件-b n
指定每n个字节切成一个小文件-C n
与参数-b
相似,但是在切割时将尽量维持每行的完整性[输出文件名]
设置切割后文件的前置文件名,$split
会自动在前置文件名后再加上编号
排序文件文本内容
$sort [-bcdfimMnr][-o file][-t c][+<起始栏位>-<结束栏位>][--help][--version][file][-k field1[,field2]]
sort命令用于将文本文件内容以行为单位加以排序
相关参数:
-b
忽略每行前面开始的空格字符-c
检查文件是否已经按照顺序排好序-d
排序时仅处理英文字母、数字以及空格字符,忽略其他字符-f
排序时,将小写字母视为大写字母-i
忽略ASCII表中不可打印的字符(如结束符和控制字符等)-M
将前面3个字母按照月份的缩写进行排序(unknown < 'JAN' < ... < 'DEC')-n
按照数值的大小进行排序-u
将输出结果去重-o file
将排序的结果存入指定file-r
以相反的顺序来排序-t c
指定排序时所用的栏位c分割字符,常与-k
搭配使用+<起始栏位>-<结束栏位>
以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位-k field1[,field2]
按指定的列进行排序
关于-t
和-k
参数的例子:
现有个要排序的文件fruit.txt,内容如下:
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
文件有三列,列与列之间用冒号隔开,第一列表示水果类型,第二列为水果的数量,第三列为水果的价格。
如果想以水果的数量对文件进行排序,就需要先将文本的行按照指定分隔符(即冒号)分隔开,使用-t :
可将文本中的行分为三列,然后使用-k 2
指定sort按照第二列的内容进行排序
$ sort -n -k 2 -t : fruit.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
查看文件差异
$diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C n][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][--help][--left-column][--suppress-common-line][file or dir1][file or dir2]
diff命令用来比较文本之间的差异,逐行匹配比较文本的异同。
相关参数:
-<行数>
指定显示多少行文本,此参数必须与-c
或-u
参数一并使用-a
or--text
diff预设只会逐行比较文本文件-b
or--ignore-space-change
不检查空格字符的不同-B
or--ignore-blank-lines
不检查空白行-c
显示全部内文,并标出不同之处-C n
or--context n
与执行-c-<行数>
指令相同-d
or-minimal
使用不同的演算法,以较小的单位来做比较-D <巨集名称>
orifdef <巨集名称>
此参数的输出格式可用于前置处理器巨集-e
or--ed
此参数的输出格式可用于ed的script文件-f
or-forward-ed
输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处-H
or--speed-large-files
比较大文件时,可加快速度-l<字符或字符串>
or--ignore-matching-lines<字符或字符串>
若两个文件在某几行有所不同,而这几行同时包含了选项中指定的字符或字符串则不显示这两个文件的差异-i
or--ignore-case
忽略大小写-l
or--paginate
将结果交给pr程序来分页-n
or--rcs
将比较结果以RCS的格式来显示-N
or--new-file
在比较目录时,若文件A仅出现在某个目录中,预设会显示Only in <目录>
文件A若使用-N
参数,则$diff
会将文件A与一个空白的文件比较-p
若比较的文件为C语言程序码文件时,显示差异所在的函数名称-P
or--unidirectional-new-file
与-N
类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件比较-q
or--brief
仅显示有无差异而不显示详细信息-r
or--recursive
递归地比较目录及其子目录中的所有文件-s
or--report-identical-files
若没有发现任何差异,仍显示信息-S<文件>
or--starting-file<文件>
在比较目录时,从指定的文件开始比较-t
or--expand-tabs
在输出时,将tab字符展开-T
or--initial-tab
在每行前面加上tab字符以便对齐-u<列数>
or-unified=<列数>
以合并的方式来显示文件内容的不同-v
or--version
显示版本信息-w
or--ignore-all-space
忽略所有的空格字符-W<宽度>
or--width<宽度>
在使用-y参数时,指定栏宽-x<文件名或目录>
or--exclude<文件名或目录>
不比较选项中所指定的文件或目录-X<文件>
or--exclude-from<文件>
可将文件或目录类型存成文本文件,然后指定该文本文件-y
or--side-by-side
以并列的方式显示文本的异同--left-column
在使用-y
参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容--suppress-common-lines
在使用-y
参数时,仅显示不同之处
删除文件or文件夹
$rm [options] name...
相关参数:
-i
删除前逐一询问确认-v
展示删除的内容-f
即使原档案属性设为只读,亦直接删除,无需确认-r
递归地删除目录及其子目录内容
$rm
删除将无法恢复!谨慎使用
移动文件or文件夹
$mv [options] source dest
相关参数:
-b
当目标文件或目录存在时,在执行覆盖前会为其创建一个备份-i
如果指定移动的源文件或目录与目标目录或文件重名,则会先询问是否覆盖旧文件,输入y表示覆盖,输入n表示取消-f
不作任何询问,如果出现重名的情况则直接覆盖-n
不要覆盖任何已存在的文件或目录-u
当源文件比目标文件新或目标文件不存在时才执行移动操作
示例:
- 将文件a改名为文件b
$mv a b
- 将info目录放入logs目录中。(注:如果logs目录不存在,则
$mv
会将info改名为logs)
$mv info/ logs
- 将info目录下所有的文件和目录移动到当前目录
$mv info/* .
复制文件or文件夹
$cp [options] source dest
相关参数:
-a
此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。-d
复制时保留链接。-f
覆盖已经存在的目标文件而不给出提示-i
在覆盖目标文件之前请求用户确认,输入y同意覆盖,输入n取消执行该操作-p
除复制文件内容外,还把修改时间和访问权限也复制到新文件中-r
递归地复制目录及其子目录下所有内容-l
不复制文件,只生成链接文件
新建文件
$touch [-acfm][-d<日期时间>][-r<参考文件或目录>][-t<目录时间>][--help][--version][文件或目录...]
touch命令用来修改文件或目录的时间属性(存取时间或更改时间等)。若文件不存在,系统会建立一个新的文件
相关参数:
-a
改变读取时间记录-m
改变修改时间记录-c
若目标文件或目录不存在,不会建立新的文件或目录。-r
使用参考的时间记录-d
设定时间与日期(可使用多种不同的格式)-t
设定时间记录-h
or--no-dereference
影响符号链接而不是被链接的文件(仅可在支持修改符号链接时间戳的系统上使用)--no-create
不建立新的文件或目录
新建文件夹
$mkdir [-p] dirName
相关参数:
-p
确保目录存在,不存在则创建
复制文件的多行到另一文件
// 1.head(复制文件的头n行)
$head -n file1 >> file2 # '>>'表示追加,如果需要覆盖则用'>'
// 2.sed
$sed
磁盘管理
查看磁盘占用
检查文件系统磁盘空间的占用情况。可利用该命令获取硬盘被占用了多少空间,目前还剩下多少空间等信息。$df [-ahiKHTm] [目录或文件名]
相关参数:
-a
列出所有的文件系统,包括系统特有的/proc等文件系统-k
以KB的容量显示各文件系统-m
以MB的容量显示各文件系统-h
以容易阅读的GB、MB、KB等格式自行显示(如1024KB会自动转化为1MB)-H
以M=1000K取代M=1024K的进位方式-T
显示文件类型,连同该partition的文件系统名称(如ext3)也列出-i
不使用硬盘容量而是以inode的数量来显示
查看内存\CPU占用
$top
输出内容:
pid
进程的iduser
进程所有者PR
进程的优先级别(priority),越小优先度越高NI
进程的Nice值,Nice值的大小能够影响进程优先级。Nice值越大,抢占CPU能力就越小,优先级就越高VIRT
进程占用的虚拟内存RES
进程占用的物理内存SHR
进程占用的共享内存S
进程的状态
S的取值- S 休眠
- R 正在运行
- Z 僵死状态
%CPU
进程CPU使用率%MEM
进程使用的物理内存占总内存大小的百分比TIME+
该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值COMMAND
启动该进程的命令名称
top命令除了显示内存使用情况外还显示了CPU的占用情况(位于第三行),下面针对CPU使用情况的输出内容进行解读
us
表示用户程序(user)的CPU使用率(没有通过nice调度)sy
表示系统空间(system)的CPU使用率,主要是内核程序ni
表示用户空间中通过nice调度(用户程序可以通过调整nice值来影响程序优先级)的程序的CPU使用率id
空闲CPUwa
CPU运行时等待(wait)IO的时间hi
CPU处理硬中断(hardware interrupt)的数量si
CPU处理软终端(software interrupt)的数量st
被虚拟机偷走的CPU
$free
相关参数:
-m
以MB为单位展示数据-h
以易于阅读的单位展示数据
输出内容:
total
总计物理内存大小used
已使用的内存大小free
可用内存的大小shared
多个进程的共享内存总额buff/cache
磁盘缓存大小available
可用内存大小(available=free+buff/cache)
进程相关
显示进程快照
$ps [options] [--help]
相关参数:
-A
列出所有的进程-w
显示加宽以显示更多信息-au
显示较详细的信息-aux
显示所有包含其他使用者的进程-u name
显示用户为name的进程
输出内容:
USER
进程所有者PID
进程pid%CPU
进程CPU使用率%MEM
进程占用内存率VSZ
进程虚拟内存占用率RSS
占用内存大小TTY
终端的次要装置号码STAT
进程状态
STAT的取值- D 不可中断的进程(通常为处于IO的进程)
- R 运行中
- S 休眠状态
- T 暂停执行
- Z 僵死状态
- X 挂掉的进程
- W 没有足够的内存页分配而采用内存交换的进程(从内核2.6开始无效)
- < 高优先级的进程
- N 低优先级的进程
- L 有内存页被锁定的进程(通常为实时系统)
- 位于后台的进程组
- s 包含子进程的进程
START
进程开始的时间TIME
进程执行的时间COMMAND
执行的命令
kill命令
kill命令用来给进程传递信息(SIGNAL)
$kill [-s <信息名称或编号>][程序] or [-l <信息编号>]
常用信号:
-1
重新加载进程(HUP)-9
杀死一个进程(KILL)-15
正常停止一个进程
$kill -l
命令显示所有的信号
查看端口占用
$lsof -i:[port]
lsof(list open files)命令可用于查看指定端口的占用情况
使用示例:
$lsof -i:8000
查看8000端口的占用$lsof file
查看开启文件file的进程$lsof -c k
查看k进程当前打开的文件$lsof -c -p pid
列出指定进程(pid)所打开的文件$lsof -g gid
显示归属指定用户组(gid)的进程情况$lsof +d path
显示指定目录(path)下被进程开启的文件$lsof +D path
递归显示指定目录(path)下被开启的文件$lsof -d n
显示使用fd为n的进程$lsof -i -U
显示所有打开的端口和UNIX domain文件
$netstat [-tunlp] | grep port
netstat命令用于显示tcp、udp的端口和进程等相关信息
相关参数:
-t
仅显示tcp相关-u
仅显示udp相关-n
不显示别名,能显示数字的全转化为数字显示-l
仅显示在Listen(监听)的服务状态-p
显示建立相关连接的程序名
权限相关
更改文件or文件夹用户和组
$chown [-cfhvR] user[:group] file...
chown(change owner)命令用来设置文件所有者和组
相关参数:
user
新的文件所有者group
新的文件所有者的组-c
显示更改的部分的信息-f
忽略错误的信息-h
修复符号链接-v
显示详细的处理信息-R
递归地处理目录及其子目录下所有的文件
权限授予
$chmod [-cfvR] mode file...
chmod(change mod)命令用于设置用户对文件的权限
相关参数:
-c
若该文件权限确实已经更改才显示其更改动作-f
若该文件权限无法被更改也不显示错误信息-v
显示权限变更的详细信息-R
递归地设置目录及其子目录下所有的文件的权限
mode取值:
mode由9位二进制数字组成
上图中r位为1则表示具有读权限,w位为1则表示具有写权限,x位为1则表示具有执行权限,且前三位、中三位、后三位分别表示用户、组和其他用户的权限。
mode也可以采用3位八进制数字表示,将每三位二进制数字合并为一位八进制数字。如要同时赋予读写权限,其三位二进制数字表示为110
,八进制数字表示为6
同时mode还可以用符号(r、w和x等)表示,具体不作描述。
当前用户查询
$whoami
更改用户
$su [-fmp] [-c command] [-s shell] [-] [USER [ARG]]
相关参数:
-f
or--fast
不比读启动档,仅用于csh或tcsh-m -p
or--preserve-environment
执行su时不改变环境参数-c command
or--command=command
变更为指定账号同时执行指令(command)后变回原来的使用者-s shell
or--shell=shell
指定要执行的shell(bash csh tcsh等),默认为/etc/passwd内的该使用者shell-
or-l
or--login
加入这个参数后,大部分环境参数(HOME SHELL USER等)都以新使用者为主,并且工作目录也会改变,如果没指定USER,则默认是rootUSER
欲变更的使用者账号ARG
传入新的shell参数
网络相关指令
设置路由规则
$route [option]
终端输入route
可显示目前所有路由,输出结果自上而下优先度递减,最后一条规则为default,仅当前面规则都无法适用时使用。
添加规则
//添加一条路由(发往192.168.62这个网段的全部要经过网关192.168.1.1)
$route add -net 192.168.62.0 netmask 255.255.255.0 gw 192.168.1.1
删除规则
//删除规则时不用写网关
$route del -net 192.168.62.0 netmask 255.255.255.0
DNS解析
$dig URL
输出内容:
第一部分显示dig命令的版本和输入参数
第二部分显示服务返回的一些技术详情。其中主要就是status,如果status的值为NOERROR则说明本次查询成功。
第三部分QUESTION SECTION即为查询的域名
第四部分ANSWER SECTION为查询的结果
第五部分统计了查询的一些信息,如累计用时,查询了哪个DNS服务器,何时进行的查询等。
示例:
- 查询指定类型的记录
//查询CNAME记录
$dig abc.com CNAME
- 指定DNS服务器进行查询
$dig @8.8.8.8 abc.com