头图来源:海行こ?-あるみっく-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 ngid是n的文件-group namegroup是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命令用于查找文件里符合条件的字符串,也可以用来查找包含查询字符串的文件。
相关参数:
-aor--text不忽略二进制数据-bor--byte-offset在显示符合范本样式的那一行之前,标出该行第一个字符的编号-A nor--after-context=n除了显示符合范本样式的那一行之外,并显示该行之后n行的内容-B nor--before-context=n除了显示符合范本样式的那一行之外,并显示该行之前n行的内容-cor--count计算符合范本样式的行数-C nor--context=norn除了显示符合样式的那一行之外,并显示该行之前之后各n行的内容-Eor--extended-regexp使用正则表达式作为范本样式来匹配-f fileor--file=file指定规则文件,文件中包含一个或多个范本样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式-For--fixed-regexp将范本样式视为固定字符串的列表-Gor--basic-regexp将范本样式视为普通的表示法来使用-hor--no-filename在显示范本样式的那一行之前不标出包含该行的文件名称-Hor--with-filename在显示范本样式的那一行之前标出包含该行的文件名称-ior--ignore-case忽略字符大小写-lor--file-with-matches列出文件内容包含符合指定范本样式文本的文件名称-Lor--files-without-match列出文件内容不包含符合指定范本样式文本的文件名称-nor--line-number在显示符合范本样式的那一行之前标出该行所在行号-oor--only-matching只显示匹配范本样式的部分-qor--quietor--silent不显示任何信息-ror--recursive递归地查询指定目录及其子目录中所有文件的内容-sor--no-messages不显示错误信息-vor--invert-match显示不包含匹配文本的所有行-Vor--version显示版本信息-wor--word-regexp只显示全字符符合的行-xor--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参数一并使用-aor--textdiff预设只会逐行比较文本文件-bor--ignore-space-change不检查空格字符的不同-Bor--ignore-blank-lines不检查空白行-c显示全部内文,并标出不同之处-C nor--context n与执行-c-<行数>指令相同-dor-minimal使用不同的演算法,以较小的单位来做比较-D <巨集名称>orifdef <巨集名称>此参数的输出格式可用于前置处理器巨集-eor--ed此参数的输出格式可用于ed的script文件-for-forward-ed输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处-Hor--speed-large-files比较大文件时,可加快速度-l<字符或字符串>or--ignore-matching-lines<字符或字符串>若两个文件在某几行有所不同,而这几行同时包含了选项中指定的字符或字符串则不显示这两个文件的差异-ior--ignore-case忽略大小写-lor--paginate将结果交给pr程序来分页-nor--rcs将比较结果以RCS的格式来显示-Nor--new-file在比较目录时,若文件A仅出现在某个目录中,预设会显示Only in <目录>文件A若使用-N参数,则$diff会将文件A与一个空白的文件比较-p若比较的文件为C语言程序码文件时,显示差异所在的函数名称-Por--unidirectional-new-file与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件比较-qor--brief仅显示有无差异而不显示详细信息-ror--recursive递归地比较目录及其子目录中的所有文件-sor--report-identical-files若没有发现任何差异,仍显示信息-S<文件>or--starting-file<文件>在比较目录时,从指定的文件开始比较-tor--expand-tabs在输出时,将tab字符展开-Tor--initial-tab在每行前面加上tab字符以便对齐-u<列数>or-unified=<列数>以合并的方式来显示文件内容的不同-vor--version显示版本信息-wor--ignore-all-space忽略所有的空格字符-W<宽度>or--width<宽度>在使用-y参数时,指定栏宽-x<文件名或目录>or--exclude<文件名或目录>不比较选项中所指定的文件或目录-X<文件>or--exclude-from<文件>可将文件或目录类型存成文本文件,然后指定该文本文件-yor--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设定时间记录-hor--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空闲CPUwaCPU运行时等待(wait)IO的时间hiCPU处理硬中断(hardware interrupt)的数量siCPU处理软终端(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 portnetstat命令用于显示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]]相关参数:
-for--fast不比读启动档,仅用于csh或tcsh-m -por--preserve-environment执行su时不改变环境参数-c commandor--command=command变更为指定账号同时执行指令(command)后变回原来的使用者-s shellor--shell=shell指定要执行的shell(bash csh tcsh等),默认为/etc/passwd内的该使用者shell-or-lor--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.0DNS解析
$dig URL输出内容:
第一部分显示dig命令的版本和输入参数
第二部分显示服务返回的一些技术详情。其中主要就是status,如果status的值为NOERROR则说明本次查询成功。
第三部分QUESTION SECTION即为查询的域名
第四部分ANSWER SECTION为查询的结果
第五部分统计了查询的一些信息,如累计用时,查询了哪个DNS服务器,何时进行的查询等。
示例:
- 查询指定类型的记录
//查询CNAME记录
$dig abc.com CNAME- 指定DNS服务器进行查询
$dig @8.8.8.8 abc.com