Linux常用命令详解—基于CentOS7

时间:2021-07-26 12:21:32

## Linux 目录
- /:根目录,一般只存放目录,不存放文件
- /bin -> /usr/bin:可执行二进制文件的目录,也是常用命令目录,如常用的命令 ls、cat、mv 等
- /boot:该目录中存放系统的内核文件,系统引导时使用的各种文件
- /dev:存放 linux 系统中所有设备的目录,访问其中的某个文件就相当于访问某个设备,常用于挂载光驱 mount /dev/cdrom /mnt
- /etc:系统配置文件存放的目录,存放系统管理和配置文件
- /home:普通用户主目录,新添用户默认在此目录添加用户的主目录,用于存放用户个人的数据
- /lib -> /usr/lib:系统的函数库的目录
- /lib64 -> /usr/lib64:系统的函数库的目录
- /media:媒体,顾名思义,该目录下放的是可移除的装置,包括软碟、光碟、DVD等
- /mnt:目录主要用来临时挂载文件系统,为某些设备提供默认挂载点,如通常光盘挂载于 /mnt/cdrom 下,也可以选择任意位置进行挂载
- /opt:给主机额外安装软件所摆放的目录
- /proc:虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息
- /root:系统管理员 root 的主目录
- /sbin -> usr/sbin:存放着只有系统管理员才能执行的命令,一般用户只能看不能用,如 fdisk、shutdown 等
- /tmp:用于存放各种临时文件,须定时清除,任何人都可访问
- /usr:用于存放系统应用程序,如安装的软件默认装在 /usr/local/

## Linux ls 命令详解
ls 即 list,用来列出给定目录下的文件,参数为空默认列出当前目录下的文件。
【用法】ls [选项] [目录]
【常用选项】
-a、–all:列出目录下的所有文件,包括以 . 开头的隐含文件
-A:列出除了 . 和 .. 以外的文件
-l:列出文件的详细信息,如创建者、创建时间、文件的读写权限列表等(详细说明可查看 Linux chmod 命令)
-h:以合适的单位换算大小,需配合 -l 使用
-t:按时间对文件进行排序
-S:按大小对文件进行排序
【注意】通常也使用 ll 直接查看当前目录,即:ll 等价于 ls -l

## Linux cd 命令
cd 即改变目录(Change Directory),用于进入到指定目录
【用法】cd [目录]
【注意】. 代表当前目录,.. 代表当前目录的父级目录,- 代表上一次使用的目录,~ 代表当前用户的主目录
【示例】
cd ..:进入父级目录
cd -:进入上一次所在的目录
cd ~:进入当前用户的主目录

## Linux pwd 命令
pwd:即打印当前工作目录(Print Working Directory)

## Linux touch 命令
touch 一般用于更改文件时间戳或创建一个空文件。该命令不常用
【用法】touch [选项] 文件
【常用选项】
-a、--time=atime、--time=access、--time=use:只更改访问时间
-c、--no-create:不创建任何文件
-d、--date=字符串:使用指定字符串表示时间而非当前时间
-f:此参数将忽略不予处理,仅负责解决 BSD 版本 touch 指令的兼容性问题
-m、--time=mtime、--time=modify:只更改修改时间
-r:把指定文件或目录的时间,统统设成和参考文件或目录的时间相同
-t:使用指定的时间,而非当前时间,时间格式为:[[CC]YY]MMDDhhmm[.ss]
【示例】
touch info.log error.log:创建不存在的文件
touch -c debug.log:如果 debug.log 不存在,则不创建文件
touch -r info.log error.log:更新 info.log 的时间和 error.log 时间戳相同
touch -t 202005122230.50 info.log:设定文件的时间戳。
【注意】-t time 使用 time 值作为指定文件的新时间戳,time 为 [[CC]YY]MMDDhhmm[.SS] 格式的十进制数,其中 CC 为年数中的前两位(即"世纪数");YY为年数的后两位(即"某世纪中的年数")。如果不给出 CC 的值,则 touch 将把年数 CCYY 限定在 1969—2068 之内;MM 为月数,DD 为天数,hh 为小时数,mm 为分钟数,SS 为秒数(范围是0—61,可以处理闰秒)。这些数字组成的时间是环境变量TZ指定的时区中的一个时间,由于系统的限制,早于1970年1月1日的时间是错误的。

## Linux mkdir 命令
mkdir 即创建目录(Make Directory)。用于创建具有指定名称的目录,要求该目录不存在且当前用户对工作目录具有写权限
【用法】mkdir [选项] [目录...]
【常用选项】
-m、--mode=模式:为目录指定访问权限,与 chmod 类似
-p、--parents:当目录的父级目录不存在时创建父级目录。常用于创建多级目录
-v、--verbose:每次创建新目录都显示信息
【示例】
mkdir test:创建一个名为 test 的目录
mkdir -p test/test1/test2:先创建 test 目录,再在 test 目录下创建 test1 目录,最后在 test1 目录下创建 test2 目录(即级联创建多个目录)
mkdir -m 777 test:创建一个名为 test 的目录,并赋予可读可写权限

## Linux rm 命令
rm 即 remove,用于删除目录或文件(可以递归删除指定目录下的所有文件及子目录)
【用法】rm [选项] [目录或文件]
【注意】rm 是一个极其危险的命令,使用的时候要特别当心,尤其对于初学者来说
【常用选项】
-f、--force:不提示,强制删除文件或目录
-i、--interactive:删除已有文件或目录之前先询问用户,即"交互式删除"
-r、-R、--recursive:递归删除,将指定目录下的所有文件与子目录都删除。若没有 -r 选项则不会删除目录
-v、--verbose:显示指令的详细执行过程

## Linux rmdir 命令
rmdir 命令(等价于:rm -r dir 命令)用于删除空目录(即一个目录被删除前必须是空的)。
【用法】rmdir [选项] 目录...
【常用选项】
-p:递归删除指定目录。子目录被删除后,若其父目录也为空,则一并删除。如果整个路径被删除或由于某种原因导致部分路径未被删除,则显示相应信息。
-v、--verbose:显示指令的执行过程

## Linux mv 命令
mv 即 move,常用来对目录或文件进行重命名、移动。这是个常用命令,常用于备份文件或目录。
【用法】
mv [选项] source dest
mv [选项] source... directory
【常用选项】
-b:当文件存在时,在覆盖前为其创建一个备份
-f、--force:覆盖前不询问
-i、--interactive:覆盖前询问
-n、--no-clobber:不覆盖已存在文件,如果指定了 -i、-f、-n 中的多个,仅最后一个生效
-u、--update:当目标文件存在,且源文件较新时才会更新
【示例】
mv 文件名 文件名:将源文件名改为目标文件名
mv 文件名 目录名:将文件移动到目标目录
mv 目录名 目录名:目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名
mv 目录名 文件名:出错
mv a.txt b.txt:将 a.txt 重命名为 b.txt
mv a.txt test/:将 a.txt 移动到 test 目录下
mv aaa bbb:将文件 aaa 更名为 bbb
mv info/ log:将 info 目录放入 log 目录中。若 log 目录不存在,则将 info 重命名为 log
mv /usr/test/* .:将 /usr/test 下的所有文件和目录移到当前目录下

## Linux cp 命令
cp 即 copy,用于将一个或多个源文件或目录复制到指定的目标文件或目录。它可以将单个源文件复制成一个指定文件名的具体文件或一个已经存在的目录下。但当一次复制多个文件时,目标文件参数必须是一个已存在的目录,否则将出错。
【用法】cp [选项] [源文件] [目标文件]
【常用选项】
-b:覆盖已存在的目标文件前将目标文件备份
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-f:强行复制文件或目录,不论目标文件或目录是否已存在,且覆盖前不询问
-i:覆盖既有文件前先询问用户
-l:对源文件建立硬连接,而非复制文件
-p:保留源文件或目录的属性
-r、-R:递归复制指定目录下的所有文件与子目录
-s:对源文件建立符号连接,而非复制文件
-u:若目标文件存在,且源文件比目标文件新,才会更新
-S:在备份文件时,用指定的后缀 SUFFIX 代替文件的默认后缀
-v、--verbose:显示详细的进行步骤
【示例】
cp dir1/a.doc dir2:将 dir1 目录下的 a.doc 文件复制到 dir2 目录下
cp -r dir1 dir2:将 dir1 及其所包含的所有文件复制到 dir2 目录下
cp -r dir1/. dir2:将 dir1 目录下的所有文件复制到 dir2 目录下,不包括 dir1 目录本身
cp dir1/a.doc .:将 dir1 目录下的 a.doc 文件复制到当前目录下
cp dir1/a.doc dir2/b.doc:将 dir1 目录下的 a.doc 文件复制到 dir2 目录下,并重命名为 b.doc
cp -r /usr/dir1 /usr/dir2:将 /usr/dir1 目录下的所有文件及目录复制到 /usr/dir2 目录中
cp -i /usr/dir1 i*.log /usr/dir2:交互式地将 /usr/dir1 目录下以 i 开头的所有 .log 文件都复制到 /usr/dir2 目录中
cp dir1/* /dir2:复制 dir1 目录下的所有文件到 /dir2 目录下,若 /dir2 目录下有和 dir1 目录下同名的文件,需要按 Y 来确认,并且会忽略 dir1 目录下的子目录
cp -r dir1/* /dir2:依然需要按 Y 来确认操作,但没有忽略子目录
cp -r -a dir1/* /dir2:需要按 Y 来确认操作,并且把 /dir1 目录以及子目录和文件属性也传递到了 /dir2
\cp -r -a dir1/* /dir2:成功,没有提示按Y、传递了目录属性、没有略过目录。

## Linux ln 命令
ln 命令用来为文件创建链接。链接类型分为硬链接和软链接(符号链接)两种。
1)、软连接:和Windows系统中的快捷方式有点类似
2)、硬链接:相当于多了一个文件名指向同一块内存空间,目录无法创建硬链接,不可以跨文件系统创建硬链接
【注意】删除文件名不影响硬链接与文件的使用,但软链接却无法继续使用。
【用法】ln [选项] [源文件或目录] [目标文件或目录]
【常用选项】
-b:删除,覆盖以前建立的链接
-d:创建指向目录的硬链接(只适用于超级用户)
-f:强制执行,操作前不询问
-i:交互模式,文件存在则提示用户是否覆盖
-n:把符号链接视为一般目录
-s:创建软链接(符号链接)
-v:显示详细的处理过程
【示例】
ln -s a.txt a_softlink.txt:对 a.txt 创建软链接 a_softlink.txt
ln a.txt a_hardlink.txt:对 a.txt 创建硬链接 a_hardlink.txt

## Linux cat 命令
cat 命令用于连接文件并打印到标准输出设备上,常用于查看小文本文件。
【用法】cat [选项] [文件名]
【常用选项】
-A、-show-all:与 -vET 等价
-b、--number-nonblank:对非空输出行编号。和 -n 相似,只不过对于空白行不编号
-e:与 -vE 等价
-E、--show-ends:在每行结束处显示 $
-n、--number:由 1 开始对所有输出的行数编号
-s、--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行
-t:与 -vT 等价
-T、--show-tabs:将 TAB 字符显示为 ^I
-v、--show-nonprinting:使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
【示例】
cat a.txt:查看 a.txt 文件的内容
cat a.txt b.txt:同时显示 a.txt 和 b.txt 文件内容。注意文件名之间以空格分隔,而不是逗号
cat -n a.txt > b.txt:把 a.txt 文档内容加上行号后输入到 b.txt 文档里,会覆盖原来的内容,文件不存在则创建它
cat -n a.txt >> b.txt:把 a.txt 文档内容加上行号后追加到 b.txt 中去,不会覆盖原来的内容,文件不存在则创建它
cat -b a.txt b.txt >> c.txt:把 a.txt、b.txt 文档内容加上行号(空白行除外)后再将内容追加到 c.txt 文档里
cat /dev/null > /etc/a.txt:清空 /etc/a.txt 文档内容

## Linux nl 命令
nl 命令在 linux 系统中用来计算文件中行号(类似于 cat -n 命令)。该命令还可以将输出的文件内容自动加上行号,其默认的结果与 cat -n 是有区别的。
【用法】nl [选项...] [文件...]
【常用选项】
-b:指定列出行号的方式,主要有两种
-b a:不论是否为空行,都列出行号(类似于 cat -n)
-b t:如果有空行,则空的那一行不列出行号(默认值)
-n:指定表示行号的方法,主要有三种
-n ln:行号在萤幕的最左方显示
-n rn:行号在自己栏位的最右方显示,且不加 0
-n rz:行号在自己栏位的最右方显示,且加 0
-w:行号栏位占用的位数。默认为 6 位
-p:在逻辑定界符处不重新开始计算

## Linux head 命令
head 命令用于查看文档的头部指定数量的字符块,默认显示指定文档的开头 10 行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。与 tail 命令用法相似。
【用法】head [选项] [文件...]
【常用选项】
-c、--bytes=[-]K:k 表示显示文档开始的前 k 个字节,-k 表示不显示文档结尾的最后 k 个字节
-n、--lines=[-]K:k 表示显示文档开始的前 k 行,-k 表示不显示文档结尾的最后 k 行
-q、--quiet、--silent:不显示包含给定文件名的文件头
-v、--verbose:总是显示包含给定文件名的文件头
【示例】
head -c 5 logs/info.log:显示文件的前 5 个字节
head -n 5 logs/info.log:显示文件的前 5 行
head -c -5 logs/info.log:显示文件中除了最后 5 个字节以外的内容
head -n -5 logs/info.log:显示文件中除了最后 5 行以外的内容

## Linux tail 命令
tail 命令用于查看文档的尾部指定数量的字符块,默认显示文档的最后 10 行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。与 head 命令用法相似。
【用法】tail [选项] [文件...]
【常用选项】
-c、--bytes=K:k 表示显示文档结尾的前 k 字节,+k 表示不显示文档开始的前 k-1 字节
-n、--lines=K:k 表示显示文档结尾的 k 行,+k 表示不显示文档开始的前 k-1 行
-q、--quiet、--silent:当有多个文件参数时,不输出各个文件名
-f、--follow[={name|descriptor}]:动态监视文档最新追加的内容
-s、--sleep-interval=N:与 -f 选项连用,指定监视文件变化时间隔的秒数
【示例】
tail logs/info.log:显示 info.log 文件的最后 10 行
tail +20 logs/info.log:显示 info.log 文件从第 20 行至文件末尾的内容
tail -4 logs/info.log:显示 info.log 文件最后 4 行内容
tail -c 10 logs/info.log:显示 info.log 文件的最后 10 个字符
tail -n +10 logs/info.log:显示 info.log 文件除了前 9 行以外的内容
tail -f logs/info.log:显示 info.log 文件的动态变化

## Linux which 命令
which 命令常用于查看指定命令的绝对路径,还可以看到某个系统命令是否存在、执行的到底是哪一个位置的命令。
【用法】which [命令]
【示例】
which ls:查看 ls 命令的绝对路径

## Linux whereis 命令
whereis 命令用于搜索,且只能搜索与指定名字匹配的二进制文件、源文件和帮助手册文件所在的路径。如果省略参数,则返回所有信息。和 find 相比,whereis 查找的速度非常快,因为 linux 系统会将系统内的所有文件都记录在一个数据库文件中,使用 whereis 和 locate 时会从数据库中查找数据,而 find 命令则是通过遍历硬盘来查找。但该数据库文件不是实时更新的,默认是每星期更新一次,所以在用 whereis 和 locate 查找文件时,可能会找到已被删除的数据或刚建立的文件无法被查找到,这就是因为数据库文件没有更新。
【用法】whereis [-bmsu] [BMS 目录名 -f] 文件名
【常用选项】
-b:定位可执行文件
-m:定位帮助文件
-s:定位源代码文件
-u:搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件
-B:指定搜索可执行文件的路径
-M:指定搜索帮助文件的路径
-S:指定搜索源代码文件的路径
【示例】
whereis svn:查找所有和 svn 有关的文件
whereis -b svn:查找和 svn 有关的二进制文件

## Linux locate 命令
locate 命令用于查找符合条件的文档。它会去保存文档和目录名称的数据库内查找合乎范本样式条件的文档或目录。一般情况下只需输入 locate fileName 即可。该命令的速度比 find 更快,但刚建立的文件通过该命令将搜索不到。
【附加说明】
locate 与 find 不同: find 是去硬盘找,而 locate 是在 /var/lib/slocate/slocate.db 数据库中找,所以 locate 的速度比 find 快。但 locate 查找并非实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工(命令为:updatedb)升级数据库。
【安装命令】yum install mlocate
【用法】locate [选项] [范本样式...]
【常用选项】
-d、--database=<文件名>:指定 locate 命令使用的资料库。系统默认为 /var/lib/slocate/slocate.db 文件
-c、--count:只输出找到的数量
-e:将排除在寻找的范围之外
-q、--quiet:安静模式,不会显示任何错误信息
-i、--ignore-case:忽略大小写
-f:将特定档案系统排除在外(如:没必要把 proc 档案系统中的档案放进资料库中)
-n:至多显示 n 个输出
-o:指定资料库中存的名称
【示例】
locate pwd:查找和 pwd 相关的所有文件
locate ./logs/info:搜索 ./logs 目录下所有以 info 开头的文件
locate ./logs/*.log:搜索 ./logs 目录下所有以 .log 结束的文件

## Linux grep 命令
grep 用于查找内容包含指定范本样式的文件,如果发现某文件的内容符合所指定的范本样式,则会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
【用法】grep [常用选项...] 范本样式 fileName
【常用选项】
-a、--text:不忽略二进制数据
-A<显示行数>、--after-context=<显示行数>:除了显示符合范本样式的列外,还显示该行之后的内容
-b、--byte-offset:在显示符合样式的行之前,标示出该行第一个字符的编号
-B<显示行数>、--before-context=<显示行数>:除了显示符合样式的行外,还显示该行之前的内容
-c、--count:计算符合样式的列数
-C<显示行数>、--context=<显示行数>、-<显示行数>:除了显示符合样式的行外,还显示该行之前后的内容
-d<动作>、--directories=<动作>:当指定要查找的是目录时,必须使用这项参数,否则 grep 指令将会报信息并停止动作
-e<范本样式>、--regexp=<范本样式>:指定字符串做为查找文件内容的样式
-E、--extended-regexp:将样式为延伸的普通表示法来使用
-f<规则文件>、--file=<规则文件>:指定规则文件,其内容含有一个或多个规则样式,让 grep 查找符合规则条件的文件内容,格式为每行一个规则样式
-F、--fixed-regexp:将样式视为固定字符串的列表
-G、--basic-regexp:将样式视为普通的表示法来使用
-h、--no-filename:在显示符合样式的行前,不标示该行所属的文件名称
-H、--with-filename:在显示符合样式的行之前,表示该行所属的文件名称
-i、--ignore-case:忽略字符大小写的差别
-l、--file-with-matches:列出文件内容符合指定的样式的文件名称
-L、--files-without-match:列出文件内容不符合指定的样式的文件名称
-n、--line-number:在显示符合样式的行之前,标示出该行的列数编号
-q、--quiet或--silent:不显示任何信息
-r、--recursive:此参数的效果和指定 -d recurse 参数相同
-s、--no-messages:不显示错误信息
-v、--revert-match:显示不包含匹配文本的所有行
-w、--word-regexp:只显示全字符合的列
-x、--line-regexp:只显示全列符合的列
-y:此参数的效果和指定 -i 参数相同。
【范本样式】
^:锚定行的开始(如:'^grep'匹配所有以 grep 开头的行)
$:锚定行的结束(如:'grep$'匹配所有以 grep 结尾的行)
.:匹配一个非换行符的字符(如:'gr.p'匹配 gr 后接一个任意字符,然后是 p)
*:匹配零个或多个先前字符(如:'*grep'匹配所有一个或多个空格后紧跟 grep 的行)
.*:代表任意字符
[]:匹配一个指定范围内的字符(如:'[Gg]rep'匹配 Grep 和 grep)
[^]:匹配一个不在指定范围内的字符(如:'[^A-FH-Z]rep'匹配不包含 A-R 和 T-Z 的一个字母开头,紧跟 rep 的行)
\(..\):标记匹配字符(如:'\(love\)',love 被标记为1)
\<:锚定单词的开始(如:'\<grep'匹配包含以grep开头的单词的行)
\>:锚定单词的结束(如:'grep\>'匹配包含以 grep 结尾的单词的行)
x\{m\}:重复字符x,m次(如:'0\{5\}'匹配包含5个0的行)
x\{m,\}:重复字符x,至少 m 次(如:'o\{5,\}'匹配至少有5个o的行)
x\{m,n\}:重复字符x,至少 m 次,不多于 n 次(如:'o\{5,10\}'匹配 5-10个o的行)
\w:匹配文字和数字字符,也就是[A-Za-z0-9](如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p)
\W:\w 的反置形式,匹配一个或多个非单词字符(如:点号、句号等)
\b:单词锁定符(如: '\bgrep\b'只匹配 grep)
【示例】
ps -ef|grep svn:查找指定进程
ps -ef|grep svn -c 或 ps -ef|grep -c svn:查找指定进程个数
cat test.txt | grep -f test2.txt:输出 test.txt 文件中含有从 test2.txt 文件中读取出的关键词的内容行
cat test.txt | grep -nf test2.txt:输出 test.txt 文件中含有从 test2.txt 文件中读取出的关键词的内容行,并显示每一行的行号
grep 'linux' test.txt 或 grep -n 'linux' test.txt:从文件中查找关键词,后者多显示行号
grep 'linux' test.txt test2.txt 或 grep -n 'linux' test.txt test2.txt:从多个文件中查找关键词,后者多显示行号。注意多文件输出信息内容行时,会把文件名在行最前面输出并加上":"作为标示符
cat test.txt |grep ^u:找出以 u 开头的行内容
cat test.txt |grep ^[^u]:输出非 u 开头的行内容
cat test.txt |grep hat$:输出以 hat 结尾的行内容
cat test.txt |grep -E "ed|at":显示包含 ed 或 at 字符的内容行
grep '[a-z]\{7\}' *.txt:显示当前目录下以 .txt 结尾的文件中所有包含每个字符串至少有7个连续小写字符的字符串的行

## Linux wget 命令
wget 命令用于从网络下载资源,若不指定保存目录,则默认存放在当前目录。
【用法】wget [选项] [URL地址]
【常用选项】
-b、–background:后台下载资源。下载大文件时可以使用该参数进行后台下载
-o、–output-file=fileName:把记录写到 fileName 文件中
-a、–append-output=fileName:把记录追加到 fileName 文件中
-O –output-document=fileName:把文档写到 fileName 文件中
-q、–quiet:安静模式,没有任何输出
-t、–tries=次数:设定最大尝试链接次数(0 表示无限制)
-c、–continue:接着下载未下载完的文件
-N、–timestamping:不要重新下载文件除非比本地文件新
-S、–server-response:打印服务器的响应
–spider:不下载任何东西
-T、–timeout=SECONDS:设定响应超时的秒数
-w、–wait=SECONDS:两次尝试之间间隔 SECONDS 秒
-Q、–quota=NUMBER:设置下载的容量限制
–limit-rate=RATE:限定下载输率
-nd、–no-directories:不创建目录
-x、–force-directories:强制创建目录
-nH、–no-host-directories:不创建主机目录
-P、–directory-prefix=dir:将文件保存到指定目录
【示例】
wget -O xiazai.zip http://www.no.com/download.zip:使用 wget -O 下载文件并重命名再保存
wget --limit-rate=300k http://www.no.com/download.zip:使用 wget –limit-rate 限速下载
wget -c http://www.no.com/download.zip:使用 wget -c 断点续传
wget -b http://www.no.com/download.zip:使用 wget -b 后台下载

## Linux wc 命令
wc 命令用来统计字节数、字符数、字数、行数等。
【用法】wc [选项] [文件]
【常用选项】
-c、--bytes:统计字节数
-m、--chars:统计字符数。不能与 -c 一起使用
-w、--words:统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串
-l、--lines:统计行数
-L:打印最长行的长度
【示例】
wc -c test.txt:统计 test.txt 的字节数
wc -l test.txt:统计 test.txt 的行数

## Linux tar 命令
tar 命令的功能:将多个文件打包为一个文件;将文件打包并压缩;将打包的文件解包;将打包压缩的文件解压。
打包和压缩:打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件或目录通过压缩算法变成一个小文件。
【用法】
通用:tar [选项] [文件..]
压缩:tar -jcv -f filename.tar.bz2 要压缩的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
【常用选项】
-A、--catenate:新增文件到已存在的压缩文件
-B:设置区块大小
-C、--directory=DIR:将文件解压到指定目录
-c、--create:创建新的压缩文件
-d:记录文件的差别
-f、--file:列出压缩文件中的内容,后面只能接文件名
-j、--bzip2:通过 bzip2 解压文件
-k、--keep-old-files:保留源文件不覆盖
-r、--append:追加文件至归档结尾
-t、--list:列出压缩文件的内容
-u、--update:仅追加比归档中副本更新的文件
-v、--verbose:显示指令执行过程
-x、--extract、--get:从压缩文件中还原文件
-z、--gzip、--gunzip、--ungzip:通过 gzip 指令处理压缩文件
-Z、--compress、--uncompress:通过 compress 指令处理压缩文件
【常见解压/压缩命令】
- tar(该目录是打包而非压缩)相关
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
- .gz 相关
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
- .tar.gz 和 .tgz 相关
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
- .zip 相关
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
- .rar 相关
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
【示例】
tar -cvf test.tar 1.txt 2.txt 3.txt 4.txt:将 1.txt、2.txt、3.txt、4.txt 文件打包为 test.tar
tar -zcvf test.tar.gz 1.txt 2.txt 3.txt 4.txt:将 1.txt、2.txt、3.txt、4.txt 文件打包并压缩为 test.tar.gz
tar -jcvf test.tar.bz2 *.txt:将 1.txt、2.txt、3.txt、4.txt 文件打包并压缩为 test.tar.bz2
tar -tf test.tar:列出 test.tar 里的文件
tar -xvf test.tar:将 test.tar 解包
tar -zxvf test.tar.gz:将 test.tar.gz 解压
tar -jxvf test.tar.bz2:将 test.tar.bz2 解压
tar -cvf log.tar log2012.log:仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log:打包后以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log:打包后以 bzip2 压缩

## Linux date 命令
date 命令常用于设置系统时间、按指定格式显示时间等。
【用法】date [选项..] [格式]
【常用选项】
-d、--date=STRING:显示指定日期的时间
-I:只显示日期
-r、--reference=文件:显示指定文件的最后修改时间
-R、--rfc-2822:以 RFC 2822 格式输出日期和时间
-s、--set=STRING:设定系统时间为指定时间STRING
-u、--utc、--universal:显示UTC时间(UTC)
【日期格式】
%%:一个 %
%a:当前 locale 的星期名缩写(如: 日,代表星期日)
%A:当前 locale 的星期名全称(如:星期日)
%b:当前 locale 的月名缩写(如:一,代表一月)
%B:当前 locale 的月名全称(如:一月)
%c:当前 locale 的日期和时间(如:2005年3月3日 星期四 23:05:25)
%C:世纪,通常为省略当前年份的后两位数字(如:20)
%d:按月计的日期(如:01)
%D:按月计的日期,等价于 %m/%d/%y
%e:按月计的日期,添加空格,等价于 %_d
%F:完整日期格式,等价于 %Y-%m-%d
%g:ISO-8601 格式年份的最后两位(参见%G)
%G:ISO-8601 格式年份(参见%V),一般只和 %V 结合使用
%h:等价于%b
%H:小时(00-23)
%I:小时(00-12)
%j:按年计的日期(001-366)
%k:时(0..23),等价于 %_H
%l:时(1..12),等价于 %_I
%m:月(01..12)
%M:分钟(00..59)
%n:换行
%N:纳秒(000000000-999999999)
%p:当前 locale 下的上午或下午,未知时输出为空
%P:与 %p 类似,但是输出小写字母
%r:当前 locale 下 12 小时制的时钟时间(如:11:11:04 下午)
%R:24 小时制的时和分,等价于 %H:%M
%s:自 UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
%S:秒(00-60)
%t:输出制表符 Tab
%T:时间,等于 %H:%M:%S
%u:星期,1 代表星期一
%U:一年中的第几周,以周日为每星期第一天(00-53)
%V:ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
%w:一星期中的第几日(0-6),0 代表周一
%W:一年中的第几周,以周一为每星期第一天(00-53)
%x:当前 locale 下的日期描述(如:12/31/99)
%X:当前 locale 下的时间描述(如:23:13:48)
%y:年份最后两位数位(00-99)
%Y:年份
%z:+hhmm 数字时区(如:-0400)
%:z:+hh:mm 数字时区(如:-04:00)
%::z:+hh:mm:ss 数字时区(如:-04:00:00)
%:::z:数字时区带有必要的精度(如:-04,+05:30)
%Z:按字母表排序的时区缩写(如:EDT)
【示例】
date:显示当前时间
date "+%Y年%m月%d日,%H时%M分%S秒":按"xxxx年xx月xx日,xx时xx分xx秒"的格式输出时间
date -s "20200515":设定日期(注意:会将时间设置为凌晨)
date -s "23:23:23":设定时间
date -s "20200515 23:23:23":设定日期和时间

## Linux cal 命令
cal 命令用于查看日历。
【用法】cal [选项] [[[日] 月] 年]
【常用选项】
-1、--one:显示当前月份的日历(默认)
-3、--three:显示上个月、当月和下个月的日历
-s、--sunday:显示当前月份的日历(以周日作为一周第一天)
-m、--monday:显示当前月份的日历(以周一用为一周第一天)
-j、--julian:显示在当年中的第几天(从1月1号算起,显示当前月日期在一年中的天数)
-y、--year:显示当前年份的日历(包括1-12月)
【示例】
cal 或 cal -1:显示当前月份日历
cal 5 2020:显示指定月份的日历
cal 2020 或 cal -y 2020:显示 2020 年日历
cal -j:显示当前年份从1月1日开始的天数
cal -m:星期一显示在第一列

## Linux more 命令
more 命令类似于 cat 命令,但比 cat 命令强大。cat 命令是将整个文件的内容从上到下显示在屏幕上,more 命令会一页一页的显示,方便使用者逐页阅读,而最基本的指令就是按空白键(space)往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能。more 命令从前向后读取文件,因此在启动时就加载整个文件。
【常用快捷键】
space、z:向下滚动一屏
b、Ctrl+b:返回上一屏
Enter:向下滚动 1 行
=:当前行的行号
v:用 vi 编辑器打开当前内容
:f:显示当前文档文件名与当前行号
d、Ctrl+D:向下翻 K 行,默认k=11
q、Q:退出more
Ctrl+L:类似于清屏
【用法】more [选项] 文件
【常用选项】
-c:从顶部清屏,然后显示
-d:提示“Press space to continue,’q’ to quiet”,禁用响铃功能
-f:统计逻辑行数而不是屏幕行数
-l:忽略 Ctrl+l(换页)字符
-p:通过清除窗口而不是滚屏来对文件进行换页,与 -c 选项相似
-u:把文件内容中的下画线去掉
-s:把连续的多个空行显示为一行
-n:定义屏幕大小为 n 行
+n:从笫 n 行开始显示
+/pattern:在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示

## Linux less 命令
less 命令与 more 命令类似,使用 less 可以随意浏览文件,而 more 只能向前移动而不能向后移动,而且 less 在查看之前不会加载整个文件。
less [选项] 文件
【常用选项】
-b <缓冲区大小>:设置缓冲区的大小
-e:当文件显示结束后自动离开
-f:强迫打开特殊文件(如:外围设备代号、目录、二进制文件等)
-g:只标志最后搜索的关键词
-i:忽略搜索时的大小写
-m:显示类似 more 命令的百分比
-N:显示每行的行号
-o <文件名>:将 less 输出的内容在指定文件中保存起来
-Q:不使用警告音
-s:显示连续空行为一行
-S:行过长时间将超出部分舍弃
-x <数字>:将 tab 键显示为规定的数字空格
/字符串:向下搜索字符串
?字符串:向上搜索字符串
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b:向后翻一页
d:向后翻半页
Q:退出less 命令
u:向前滚动半页
y:向前滚动一行
空格键:滚动一行
回车键:滚动一页
[pagedown]:向下翻动一页
[pageup]:向上翻动一页

## Linux free 命令
free 命令可以查看内存使用的相关情况。
【用法】free [选项]
【常用选项】
-b:以 Byte 为单位显示内存使用情况
-k:以 KB 为单位显示内存使用情况(默认就是以 KB 显示)
-m:以 MB 为单位显示内存使用情况
-g:以 GB 为单位显示内存使用情况
-h:以合适的单位显示内存使用情况
-o:不显示缓冲区调节列
-s:每 n 秒刷新,动态观察内存使用状况
-t:显示内存总和列
【示例】
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 143M 1.5G 8.6M 200M 1.5G
Swap: 2.0G 0B 2.0G
【说明】
Mem-内存;Swap-虚拟内存。
total-内存总数;used-已经使用的内存数;free-未分配的内存数;available-可用内存;bbuff/cache-缓存内存数。
tatal = used + free + buff/cache
available = free + buff/cache - 不可回收的部分

## Linux ps 命令
ps 命令是 Process Status 的缩写,用于查看当前系统的进程状态。运用该命令可以确定有哪些进程正在运行、查看进程运行的状态、 进程是否结束、进程有没有僵死、哪些进程占用了过多地资源等。可以搭配 kill 指令随时中断、杀死不必要的进程。
【用法】ps [选项]
【常用选项】
-a:显示现行终端机下的所有程序,包括其他用户的程序
-A:显示所有进程
-c:列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示
-e:列出程序时,显示每个程序所使用的环境变量
-f:显示 UID、PID、PPID、C、STIME、TTY、TIME、CMD 栏位
-H:显示树状结构,表示程序间的相互关系
-N:显示所有的程序,除了执行 ps 指令终端机下的程序之外
-u:以用户为主的格式来显示程序状况
-x:显示所有程序,不以终端机来区分

## Linux top 命令
top 命令用于实时监测系统资源使用状况,包含进程、cpu、内存等。
【用法】top [选项]
【常用选项】
-b:以批处理模式操作
-c:显示完整的治命令
-d:屏幕刷新间隔时间
-I:忽略失效过程
-s:保密模式
-S:累积模式
-i<时间>:设置刷新间隔时间
-u<用户名>:指定用户名
-p<进程号>:指定进程
-n<次数>:循环显示的次数

## Linux chmod 命令
chmod 命令用于管理文件或目录的权限,权限分为读取(r)、写入(w)、执行(x)3种。"可读可写可执行"用二进制 1 表示拥有该权限,0 表示没有该权限,则具有全部权限的二进制为 111(即十进制的 7),只有读权限的二进制为 100(即 十进制的 4),以此类推……
【用法】chmod [选项] [文件..]
【注意】
chmod 也可以用数字来表示权限,语法为:chmod abc file。其中 a、b、c 各为一个数字,分别表示 User、Group、Other 的权限。r=4,w=2,x=1 ===> 若要 rwx 属性则 4+2+1=7;若要 rw- 属性则 4+2=6;若要 r-x 属性则4+1=5。
chmod a=rwx file 等价于 chmod 777 file
chmod ug=rwx,o=x file 等价于 chmod 771 file
【权限范围】
u、User:即文件或目录的拥有者
g、Group:即文件或目录的所属群组
o、Other:除了文件或目录拥有者或所属群组外,其他用户皆属于这个范围
a,All:即全部的用户(包括拥有者、所属群组、其他用户)
r:读取权限,数字代号为4(即 100)
w:写入权限,数字代号为2(即 010)
x:执行或切换权限,数字代号为1(即 001)
-:不具任何权限,数字代号为0(即 000)
【常用选项】
-c、--changes:若文件权限确实被更改,才显示其更改动作。效果类似 -v 参数,但仅显示更改部分
-f、--quiet、--silent:即使文件权限无法更改也不显示错误信息
-R、--recursive:递归处理,将指定目录下的文件及子目录进行相同的权限变更
-v、--verbose:显示指令执行过程
--reference=<file>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同
<权限范围>+<权限>:增加指定权限 (chmod u+r file)
<权限范围>-<权限>:删除指定权限 (chmod g-rw file)
<权限范围>=<权限>:等于指定权限 (chmod o=rwx file)
【示例】
chmod g+w test.txt:给 test.txt 所属组增加写权限
chmod o-r,g+w test.txt:删除 test.txt 其他用户的读权限,同时增加所属组的写权限
chmod u=rwx,g=rw,o=- test.txt:修改 test.txt 的权限为 u=rwx,g=rw,o=-
chmod ugo+r test.txt 或 chmod a+r test.txt:将文件 test.txt 设为所有人皆可读
chmod ug+w,o-w test1.txt test2.txt:将文件 test1.txt 与 test2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod u+x test1.txt:将 test1.txt 设定为只有该文件拥有者可以执行
chmod -R a+r *:将当前目录下的所有文件与子目录设为任何人可读取

## Linux df 命令
df 命令用于查看文件系统的磁盘使用情况统计,如:磁盘的分区、已使用空间、剩余空间等。
【用法】df [选项] [文件..]
【常用选项】
-a、--all:全部文件系统
-h、--human-readable:以合适的单位来显示信息
-H、--si:与 -h 参数相同,但在计算时是以 1000 Bytes 为换算单位而非 1024 Bytes
-i、--inodes:显示 inode 的信息
-k、--kilobytes:指定区块大小为 1024 字节
-l、--local:只显示本地文件系统
-m、--megabytes:指定区块大小为 1048576 字节
-P、--portability:使用 POSIX 的输出格式
--sync:在取得磁盘使用信息前,先执行async指令
-t<TYPE>、--type=<TYPE>:仅显示指定文件系统类型的磁盘信息
-T、--print-type:显示文件系统的类型
-x<TYPE>、--exclude-type=<TYPE>:不要显示指定文件系统类型的磁盘信息

## Linux mount 命令
mount 命令用于将指定的文件系统或分区挂载到指定目录下,常用于挂载光盘,访问光盘的数据,光盘并不会自动挂载到目录中,所以需要手动挂载(必须要先确保系统已经成功连接光盘)。
【用法】
mount [-t vfstype] [-o options] device dir
【参数说明】
vfstype:指定挂载的文件系统类型(一般不用指定,因为 mount 命令能够自行判断)。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
options:指定挂载参数(如:ro 表示以只读方式挂载文件系统)。常用参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
device:指定要挂载的设备(如:磁盘、光驱等)
dir:指定文件系统要挂载到哪个目录
【常用选项】
-a、--all:挂载 /etc/fstab 中的所有文件系统
-f、--fake:不实际加载设备。可与 -v 等参数同时使用以查看 mount 的执行过程
-F、--fork:需与 -a 参数同时使用。所有在 /etc/fstab 中设置的设备会被同时加载,可加快执行速度
-L<标签> 加载文件系统标签为<标签>的设备
-n、--no-mtab:不将加载信息记录在 /etc/mtab 文件中

-o、--options <列表>:挂载选项列表。如下:
defaults:使用默认的选项。默认选项为 rw、suid、dev、exec、anto nouser 与 async
async:以非同步的方式执行文件系统的输入输出动作
sync:以同步方式执行文件系统的输入输出动作
user:可以让一般用户加载设备
nouser:使一位用户无法执行加载操作,默认设置
atime:每次存取都更新 inode 的存取时间,默认设置,取消选项为 noatime
noatime:每次存取时不更新 inode 的存取时间
auto:必须在 /etc/fstab 文件中指定此选项。执行 -a 参数时,会加载设置为 auto 的设备,取消选取为 noauto
noauto:无法使用 -a 参数来加载
dev:可读文件系统上的字符或块设备,取消选项为 nodev
nodev:不读文件系统上的字符或块设备
exec:可执行二进制文件,取消选项为 noexec
noexec:无法执行二进制文件
remount:重新加载设备。通常用于改变设备的设置状态
ro:以只读模式加载
rw:以可读写模式加载
suid:启动 set-user-identifier(设置用户ID) 与 set-group-identifer(设置组ID) 设置位,取消选项为 nosuid
nosuid:关闭 set-user-identifier(设置用户ID) 与 set-group-identifer(设置组ID) 设置位
-r、--read-only:以只读方式挂载文件系统(同 -o ro)
-c、--no-canonicalize:不对路径规范化
【示例】
mount /dev/cdrom /mnt/cdrom 或 mount /dev/sr0 /mnt/cdrom:将光盘挂载到 /mnt/cdrom/
umount /mnt/cdrom 或 umount /dev/sr0:解除挂载(不能在挂载点目录下解除挂载,必须先切换到其他目录)

## Linux vim 编辑器常用命令
【用法】
vim fileName:打开或新建文件,并将光标置于第一行首
vim +n fileName:打开文件,并将光标置于第 n 行首
vim + fileName:打开文件,并将光标置于最后一行首
vim +/pattern fileName:打开文件,并将光标置于第一个与 pattern 匹配的串处
vim -r fileName:在上次使用 vi 编辑文件发生系统崩溃时恢复 fileName
vim fileName1……fileNameX:打开多个文件,依次进行编辑
【移动光标类命令】
h、Backspace:光标左移一个字符
l、space:光标右移一个字符
k、Ctrl+p:光标上移一行
j、Ctrl+n、Enter:光标下移一行
w、W:光标右移一个字至字首
b、B:光标左移一个字至字首
e、E:光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第 n 行首
n$:光标移至第 n 行尾
n+:光标下移 n 行
n-:光标上移 n 行
H:光标移至屏幕顶行
M:光标移至屏幕中间行
L:光标移至屏幕最后行
0:光标移至当前行首
$:光标移至当前行尾
【屏幕翻滚类命令】
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第 n 行滚至屏幕顶部,不指定 n 时将当前行滚至屏幕顶部
【插入文本类命令】
Esc:退出插入模式
i:从当前光标处进入插入模式
a:追加模式,置光标于当前光标之后
I:进入插入模式,置光标于行首
A:追加模式,置光标于行末
o:在当前行之下新加一行,并进入插入模式
O:在当前行之上新加一行,并进入插入模式
r:替换当前字符
R:替换当前字符及其后的字符,直至按 ESC 键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw、nCW:修改指定数目的字
nCC:修改指定数目的行
【删除命令】
ndw、ndW:删除光标处开始及其后的 n-1 个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后 n-1 行
x:删除光标后的一个字符
X:删除光标前的一个字符
Ctrl+u:删除输入方式下所输入的文本
【搜索及替换命令】
ra:将当前字符(即光标所在字符)替换为a(a 是示例,实际是要替换的目标数据)
/pattern:从光标开始处向文件尾搜索 pattern
?pattern:从光标开始处向文件首搜索 pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/:将当前行中第一个 p1 用 p2 替代
:s/p1/p2/g:将当前行中所有 p1 用 p2 替代
:%s/p1/p2/:将所有行中第一个 p1 用 p2 替代
:%s/p1/p2/g:将文档中所有 p1 用 p2 替代
:g/p1/s//p2/g:将文档中所有 p1 用 p2 替换
:n1,n2s/p1/p2/g:将第 n1 至 n2 行中所有 p1 用 p2 替代
【最后行方式命令】
:e fileName:打开文件 fileName 进行编辑
:n1,n2 co n3:将 n1 行到 n2 行之间的内容拷贝到第 n3 行下
:n1,n2 m n3:将 n1 行到 n2 行之间的内容移至到第 n3 行下
:n1,n2 d:将 n1 行到 n2 行之间的内容删除
:w:将缓冲区写入文件,即保存修改
:wq:保存修改并退出
:x:保存当前文件并退出
:q:退出 vi,如果对缓冲区进行过修改,则会提示
:q!:强制退出(不保存文件)