Linux常用命令大全

find命令

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。find参数选项很多,并且支持正则,功能强大。和管道结合使用可以实现复杂的功能,是系统管理者和普通用户必须掌握的命令。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。如果服务器负载比较高尽量不要在高峰期使用find命令,find命令模糊搜索还是比较消耗系统资源的。

命令语法

find【路径】 【选项】 【参数】

命令选项

-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:将find指令的回传值皆设为True;
-type<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

-o:并列条件查询
-i<选项>:忽略大小写
!:否定参数,取非值。

命令示例

列出当前目录及子目录下所有文件和文件夹

[root@localhost ~]# find .
#或
[root@localhost ~]# find . -prin

在 /tmp 目录下查找以 .txt 结尾的文件名

[root@localhost ~]# find /tmp/ -name "*.txt"

同上,但忽略大小写

[root@localhost ~]# find /tmp/ -iname "*.txt"

在 /tmp 目录及子目录下查找所有以 .txt 和 .bak 结尾的文件

[root@localhost ~]# find /tmp/ -name "*.txt" -o -name "*.bak"
#或者
[root@localhost ~]# find /tmp/ \( -name "*.txt" -o -name "*.bak" \)

匹配文件路径或者文件查找

[root@localhost ~]# find /tmp/ -path "*local*"          #查找路径中或者文件名中包含 local 的路径或文件

基于正则表达式匹配文件路径

[root@localhost ~]# find /tmp/ -regex ".*\(\.txt\|\.bak\)$"

同上,但忽略大小写

[root@localhost ~]# find /tmp/ -iregex ".*\(\.txt\|\.bak\)$"

否定参数 ! 

找出 /tmp 目录下不是以 .txt 结尾的文件:

[root@localhost ~]# find /tmp/ ! -name ".txt"

根据文件类型进行搜索

find /tmp/ -type 类型参数

类型参数列表:
    f:普通文件
    l:符号连接
    d:目录
    c:字符设备
    b:块设备
    s:套接字
    p:Fifo

基于目录层级深度搜索

搜索最大目录层级为3的文件

[root@localhost ~]# find /usr/ -maxdepth 3 -type f

搜索出深度距离当前目录至少2个子目录的所有文件

[root@localhost ~]# find /usr/ -mindepth 2 -type f

根据文件时间戳进行搜索

find /tmp -type f 时间戳

访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
状态时间(-ctime/天,-cmin/分钟):文件状态最后一次修改时间。

搜索最近七天内被访问过的所有文件、搜索恰好在七天前被访问过的所有文件、搜索超过七天被访问过的所有文件:

[root@localhost ~]# find /tmp/ -type f -atime -7      #7天内的
[root@localhost ~]# find /tmp/ -type f -atime 7       #第7天当天的
[root@localhost ~]# find /tmp/ -type f -atime +7      #超过7天的

搜索访问时间超过10分钟的所有文件:

[root@localhost ~]# find /tmp/ -type f -amin +10     #超过十分钟
[root@localhost ~]# find /tmp/ -type f -amin 10      #等于十分钟
[root@localhost ~]# find /tmp/ -type f -amin -10     #小于十分钟

在 /tmp 目录下找出比 a.txt 文件修改时间更长的所有文件:

[root@localhost ~]# find /usr/ -type f -newer /tmp/a.txt

根据文件大小进行匹配

find /tmp -type f size 文件大小单元

文件大小单元:
    b:块(512字节)
    c:字节
    w:字(2字节)
    k:千字节
    M:兆字节
    G:G字节

搜索大于10KB的文件、搜索小于10KB的文件、搜索等于10KB的文件:

[root@localhost ~]# find /tmp/ -type f -size +10k     #大于10k
[root@localhost ~]# find /tmp/ -type f -size -10k     #小于10k
[root@localhost ~]# find /tmp/ -type f -size 10k      #等于10k

删除匹配的文件

删除当前目录下所有 .txt 文件:

[root@localhost ~]# find /tmp/ -type f -name "*.txt" -delete

根据文件权限、所有权进行匹配

在 /tmp 目录下搜索出权限为777的文件、在 /tmp 目录下搜索出权限非644的文件:

[root@localhost ~]# find /tmp/ -type f -perm 777
[root@localhost ~]# find /tmp/ -type f ! -perm 644

找出 /tmp 目录用户 liuzgg 拥有的所有文件

[root@localhost ~]# find /tmp/ -type f -user liuzgg

找出 /tmp 目录用户组 job 拥有的所有文件:

[root@localhost ~]# find /tmp/ -type f -group job

借助-exec选项与其他命令结合使用

找出 /tmp 目录下所有root的文件,并把所有权更改为用户liuzgg:

[root@localhost ~]# find /tmp/ -type f -user root -exec chown liuzgg {} \;
#上例中,{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。

找出自己家目录下所有的 .txt 文件并删除:

[root@localhost ~]# find $HOME/. -name "*.txt" -ok rm {} \;
[root@localhost ~]# find $HOME/ -name "*.txt" -ok rm {} \;
[root@localhost ~]# find $HOME -name "*.txt" -ok rm {} \;
[root@localhost ~]# find ~ -name "*.txt" -ok rm {} \;

#以上4种方式都行,注意:带有 .txt 的隐藏文件也一并删除。上例中,-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。

查找 /tmp 目录下所有 .txt 文件并把他们拼接起来写入到 all.txt 文件中: 

[root@localhost ~]# find /tmp/ -type f -name "*.txt" -exec cat {} \;> /tmp/aall.txt

将30天前的.log文件复制到old目录中: 

[root@localhost ~]# find /tmp/ -type f -mtime +30 -name "*.txt" -exec cp {} /tmp \;

找出 /tmp 目录下所有 .txt 文件并以 “File:文件名” 的形式打印出来: 

[root@localhost ~]# find /tmp/ -type f -name "*.txt" -exec printf "File: %s\n" {} \;
File: /tmp/11111.txt
File: /tmp/aall.txt
File: /tmp/all.txt
[root@localhost ~]# 

因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令

-exec ./text.sh {} \;

搜索但跳出指定的目录,查找当前目录或者子目录下所有.txt文件,但是跳过子目录/tmp/work:

[root@localhost ~]# find /tmp/ -path "/tmp/work" -prune -o -name "*.txt"

ls命令

ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似。当执行ls命令时,默认显示的只有非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示。当不加参数时,默认列出当前目录的列表信息。

说明:在linux下,文件名以点.开头表示该文件为隐藏文件,如.bashrc。

命令语法

ls 【选项】 【目录名】 
#注:【】中的内容为非必选项

命令选项

-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来~ 
-A :全部的档案,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~ 
-d :仅列出目录本身,而不是列出目录内的档案数据 
-f :直接列出结果,而不进行排序 (ls 预设会以文档名排序!) 
-F :根据档案、目录等信息,给予附加数据结构,例如: 
*:代表可执行档; /:代表目录; =:代表 socket 档案; |:代表 FIFO 档案; 
-h :将档案容量以人类较易读的方式(例如 GB, KB 等等)列出来; 
-i :列出 inode 位置,而非列出档案属性; 
-l :长数据串行出,包含档案的属性等等数据; 
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在账号管理提到!) 
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小; 
-R :连同子目录内容一起列出来; 
-S :以档案容量大小排序! 
-t :依时间排序 
--color=never :不要依据档案特性给予颜色显示; 
--color=always :显示颜色 
--color=auto :让系统自行依据设定来判断是否给予颜色 
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出 
--time={atime,ctime} :输出 access 时间或 改变权限属性时间 (ctime) 
而非内容变更时间 (modification time)     例如:ls [-aAdfFhilRS] 目录名称 ls [--color={none,auto,always}] 目录名称 ls [--full-time] 目录名称

命令示例

显示目录下的文件(不包含隐藏文件)

[root@localhost ~]# ls
1.txt  2.txt  3.txt  a  anaconda-ks.cfg  b  c  d

-a:显示目录下的文件,包含隐藏文件

[root@localhost ~]# ls -a
.   1.txt  3.txt  anaconda-ks.cfg  .bash_history  .bash_profile  c       d
..  2.txt  a      b                .bash_logout   .bashrc        .cshrc  .tcshrc

-A:显示除隐藏文件“.”和“..”以外的所有文件列表

[root@localhost ~]# ls -A
1.txt  3.txt  anaconda-ks.cfg  .bash_history  .bash_profile  c       d
2.txt  a      b                .bash_logout   .bashrc        .cshrc  .tcshrc

-l:列出长数据串,显示出文件的属性与权限等数据信息

[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root    0 10月  9 09:08 1.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 2.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 3.txt
drwxr-xr-x. 2 root root   20 10月  9 09:19 a
-rw-------. 1 root root 1434 10月  8 10:05 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 10月  9 09:16 b
drwxr-xr-x. 2 root root    6 10月  9 09:16 c
drwxr-xr-x. 2 root root    6 10月  9 09:16 d

-F:在每个输出项后追加文件的类型标识符

[root@localhost ~]# ls -F
1.txt  2.txt  3.txt  a/  anaconda-ks.cfg  b/  c/  d/

-d:仅显示当前目录名,而不显示目录下的内容列表

[root@localhost ~]# ls -d /home/
/home/

-h:将文件内容大小以K、M、GB等易读的方式显示

[root@localhost ~]# ls -hl
total 4.0K
-rw-r--r--. 1 root root    0 10月  9 09:08 1.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 2.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 3.txt
drwxr-xr-x. 2 root root   20 10月  9 09:19 a
-rw-------. 1 root root 1.5K 10月  8 10:05 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 10月  9 09:16 b
drwxr-xr-x. 2 root root    6 10月  9 09:16 c
drwxr-xr-x. 2 root root    6 10月  9 09:16 d

-n:以用户识别码和群组识别码替代其名称(GID、UID)

[root@localhost ~]# ls -n
total 4
-rw-r--r--. 1 0 0    0 10月  9 09:08 1.txt
-rw-r--r--. 1 0 0    0 10月  9 09:08 2.txt
-rw-r--r--. 1 0 0    0 10月  9 09:08 3.txt
drwxr-xr-x. 2 0 0   20 10月  9 09:19 a
-rw-------. 1 0 0 1434 10月  8 10:05 anaconda-ks.cfg
drwxr-xr-x. 2 0 0    6 10月  9 09:16 b
drwxr-xr-x. 2 0 0    6 10月  9 09:16 c
drwxr-xr-x. 2 0 0    6 10月  9 09:16 d

-S:以文件大小排序

[root@localhost ~]# ls -Sl
total 4
-rw-------. 1 root root 1434 10月  8 10:05 anaconda-ks.cfg
drwxr-xr-x. 2 root root   20 10月  9 09:19 a
drwxr-xr-x. 2 root root    6 10月  9 09:16 b
drwxr-xr-x. 2 root root    6 10月  9 09:16 c
drwxr-xr-x. 2 root root    6 10月  9 09:16 d
-rw-r--r--. 1 root root    0 10月  9 09:08 1.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 2.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 3.txt

-t:用文件和目录的更改时间排序

[root@localhost ~]# ls -tl
total 4
drwxr-xr-x. 2 root root   20 10月  9 09:19 a
drwxr-xr-x. 2 root root    6 10月  9 09:16 b
drwxr-xr-x. 2 root root    6 10月  9 09:16 c
drwxr-xr-x. 2 root root    6 10月  9 09:16 d
-rw-r--r--. 1 root root    0 10月  9 09:08 1.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 2.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 3.txt
-rw-------. 1 root root 1434 10月  8 10:05 anaconda-ks.cfg

 -r:以文件名反序排列并输出目录内容列表

[root@localhost ~]# ls -rtl
total 4
-rw-------. 1 root root 1434 10月  8 10:05 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 10月  9 09:08 3.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 2.txt
-rw-r--r--. 1 root root    0 10月  9 09:08 1.txt
drwxr-xr-x. 2 root root    6 10月  9 09:16 d
drwxr-xr-x. 2 root root    6 10月  9 09:16 c
drwxr-xr-x. 2 root root    6 10月  9 09:16 b
drwxr-xr-x. 2 root root   20 10月  9 09:19 a

cd命令

cd命令是”change directory”中单词的首字母缩写,其英文释义是改变目录,所以该命令的功能是从当前目录切换到指定目录。

其中目录的路径可分为绝对路径和相对路径。若目录名称省略,则切换至使用者的用户目录(也就是刚登录时所在的目录、home目录)。

另外,“~”也表示为用户目录的意思,“.”则是表示目前所在的目录,“..”则表示当前目录位置的上一级目录。

命令语法

cd [选项] [目录名]

命令选项

~ 表示用户主目录,即HOME变量指定的目录,如root用户的主目录为/root。
- 表示返回上一次所在目录
.. 表示切换到上一级目录。
. 表示当前目录。

命令示例

cd /root/Docements # 切换到目录/root/Docements
cd ./path          # 切换到当前目录下的path目录中,“.”表示当前目录  
cd ../path         # 切换到上层目录中的path目录中,“..”表示上一层目录

tree命令

tree命令作用是以树状图形式列出目录的内容。 执行tree命令,它会以树状图的方式列出指定目录下的所有文件,包括目录里的文件,显示出指定目录的文件目录结构。

tree命令非原生命令,需要安装tree

在线安装:

yum -y install tree

命令语法

tree【选项】 【目录】 

命令选项

-a 显示所有文件和目录
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合
-C 在文件和目录清单加上色彩,便于区分这种类型
-d 显示目录名称而非内容(只列出目录,不列出文件)
-D 列出文件或目录的更改时间
-f 在每个文件或目录之前,显示完整的相对路径名称
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上“*”,“/”,“=”,“@”,“|”号
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码
-i 不以阶梯状列出文件或目录名称
-I 不现实符合范本样式的文件或目录名称
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录
-n 不在文件和目录清单上加上色彩
-N 直接列出文件和目录名称,包括控制字符
-p 列出权限标示
-P 只显示符合范本像是的文件或目录名称
-q 用“?”号取代控制字符,列出文件和目录名称
-s 列出文件或目录大小
-t 用文件和目录的更改时间排序
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外
-L 分层级显示(tree -L 1 /etc/)

命令示例

-L n 只显示n层目录(n为数字)

[root@localhost ~]# tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var

-d 只显示目录

[root@localhost ~]# tree -d /boot/
/boot/
├── efi
│   └── EFI
│       └── centos
├── grub
└── grub2
    ├── fonts
    ├── i386-pc
    └── locale

touch命令

创建文件和修改文件或者目录的时间戳。

touch命令会根据当前的系统时间更新指定文件的访问时间和修改时间。如果文件不存在,将会创建新的空文件,除非指定了”-c”或”-h”选项。

注意:在修改文件的时间属性的时候,用户必须是文件的属主,或拥有写文件的访问权限。

命令语法

touch  【选项】 【文件名或者目录名】

命令选项

-a  只修改文件的access(访问)时间.
-c  或--no-create  更改文件时间戳,若文件不存在,不会创建不存在的文件。
-d  使用指定的日期时间(任何格式),而非现在的时间
-t  将时间修改为参数指定的日期,如:201807081556代表2018年7月8号15点56分
-m 只修改Modify(修改)时间,而不修改access(访问)时间
-r  使用参考文件的时间戳(access,modify),更改目标文件的时间戳(access,modify)与参考文件的时间戳相同
    示例:touch -r 参考文件 目标文件
    注:access 表示最后一次访问(仅仅是访问,没有改动)文件的时间
    modify 表示最后一次修改文件的时间
    change 表示最后一次对文件属性改变的时间,包括权限,大小,属性等等
-h 在符号链接文件上更改访问和修改时间

命令示例

创建新的文件

[root@localhost ~]# ls
anaconda-ks.cfg
[root@localhost ~]# touch a.txt
[root@localhost ~]# ls
anaconda-ks.cfg  a.txt

创建多个文件

[root@localhost ~]# ls
anaconda-ks.cfg  a.txt
[root@localhost ~]# touch b.txt d.txt f.txt
[root@localhost ~]# ls
anaconda-ks.cfg  a.txt  b.txt  d.txt  f.txt

创建多个有序的文件

[root@localhost ~]# ls
anaconda-ks.cfg
[root@localhost ~]# touch a{1..3}.txt
[root@localhost ~]# ls
a1.txt  a2.txt  a3.txt  anaconda-ks.cfg
[root@localhost ~]# touch 9{a..c}.txt
[root@localhost ~]# ls
9a.txt  9b.txt  9c.txt  a1.txt  a2.txt  a3.txt  anaconda-ks.cfg

-a 修改文件的访问时间(access)

[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 45            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522683   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 09:47:18.731012023 +0800      (当前时间)
Modify: 2019-10-10 09:47:42.346074011 +0800
Change: 2019-10-10 09:47:42.346074011 +0800
 Birth: -
[root@localhost ~]# touch -a a.txt
[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 45            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522683   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 09:52:58.744913520 +0800       (修改后时间)
Modify: 2019-10-10 09:47:42.346074011 +0800
Change: 2019-10-10 09:52:58.744913520 +0800
 Birth: -

-c 如果文件存在,更改文件的时间戳,如果文件不存在,也不会创建它

[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 25            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522681   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 10:05:45.047948145 +0800
Modify: 2019-10-10 10:02:26.431420414 +0800
Change: 2019-10-10 10:02:26.432420417 +0800
 Birth: -
[root@localhost ~]# touch -c a.txt
[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 25            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522681   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 10:06:01.399991766 +0800
Modify: 2019-10-10 10:06:01.399991766 +0800
Change: 2019-10-10 10:06:01.399991766 +0800
 Birth: -

-d  使用指定的日期时间(任何格式),而非现在的时间

[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 25            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522681   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 10:13:13.226143681 +0800
Modify: 2019-10-10 10:13:13.226143681 +0800
Change: 2019-10-10 10:13:13.226143681 +0800
 Birth: -
[root@localhost ~]# touch -d '20180506 12:25:06' a.txt
[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 25            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522681   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-05-06 12:25:06.000000000 +0800
Modify: 2018-05-06 12:25:06.000000000 +0800
Change: 2019-10-10 10:13:56.304258604 +0800
 Birth: -

-m 只修改Modify(修改)时间,而不修改access(访问)时间

[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 25            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522681   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 10:16:47.054714080 +0800
Modify: 2019-10-10 10:16:40.294696044 +0800
Change: 2019-10-10 10:16:40.294696044 +0800
 Birth: -
[root@localhost ~]# touch -m a.txt
[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 25            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522681   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 10:16:47.054714080 +0800
Modify: 2019-10-10 10:17:48.701878531 +0800
Change: 2019-10-10 10:17:48.701878531 +0800
 Birth: -

-r  使用参考文件的时间戳(access,modify),更改目标文件的时间戳(access,modify)与参考文件的时间戳相同

[root@localhost ~]# stat b.txt
  File: ‘b.txt’
  Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d    Inode: 201522683   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 10:21:29.259466874 +0800
Modify: 2019-10-10 10:21:29.259466874 +0800
Change: 2019-10-10 10:21:29.259466874 +0800
 Birth: -
[root@localhost ~]# touch -r a.txt b.txt
[root@localhost ~]# stat b.txt
  File: ‘b.txt’
  Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d    Inode: 201522683   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 10:16:47.054714080 +0800
Modify: 2019-10-10 10:17:48.701878531 +0800
Change: 2019-10-10 10:26:26.223266379 +0800
 Birth: -

-t  将时间修改为参数指定的日期,如:201807081556代表2018年7月8号15点56分

[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 25            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522681   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-10 10:33:19.601381756 +0800
Modify: 2019-10-10 10:33:19.601381756 +0800
Change: 2019-10-10 10:33:19.601381756 +0800
 Birth: -
[root@localhost ~]# touch -t 201805231225 a.txt
[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 25            Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201522681   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-05-23 12:25:00.000000000 +0800
Modify: 2018-05-23 12:25:00.000000000 +0800
Change: 2019-10-10 10:33:46.865455315 +0800
 Birth: -

-h 在符号链接文件上更改访问和修改时间

默认情况下,每当我们尝试使用 touch 命令更改符号链接文件的时间戳时,它只会更改原始文件的时间戳。如果你想更改符号链接文件的时间戳,则可以使用 touch 命令中的 -h 选项来实现

[root@lzg ~]# ls
1.txt
[root@lzg ~]# touch log.`date "+%Y-%m-%d_%H:%M:%S"`.txt            #``反引号,调用命令
[root@lzg ~]# ls
1.txt  log.2019-11-05_13:18:51.txt
[root@lzg ~]# touch log1.$(date "+%Y-%m-%d_%H:%M:%S").txt          #或者$(),调用命令
[root@lzg ~]# ls
1.txt  log1.2019-11-05_13:19:30.txt  log.2019-11-05_13:18:51.txt

以上对文件更改时间戳的操作适用于目录

cp命令

cp命令可以理解为英文单词copy的缩写,其功能为复制文件或目录(可重命名)。

命令语法

cp【选项】 【源文件名或目录】【目标文件或目录】

命令选项

-f 强行复制文件或目录, 不论目的文件或目录是否已经存在,若目标文件已存在,则会直接覆盖原文件。
-i 若目标文件已存在,则会询问是否覆盖
-p 保留源文件或目录的属性,包括所有者、所属组、权限与时间
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-d 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-l 对源文件建立硬链接,而非复制文件
-s 对源文件建立符号链接,而非复制文件
-b 删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录
-v 显示执行过程
-a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合
-P 保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经存在
-R 递归处理,将指定目录下的文件及子目录一并处理
-u 使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件
-V <备份方式> 或 --version-control=<备份方式> 指定当备份文件时,备份文件名的命名方式,有以下3种:
    numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增
    simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定
    existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份
-x 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件

命令示例

复制文件a.txt到work目录

[root@localhost ~]# cp a.txt /work/

复制文件a.txt到work目录,并重命名为b.txt 

[root@localhost ~]# cp a.txt /work/b.txt

复制文件a.txt和b.txt到work目录

[root@localhost ~]# cp a.txt b.txt /work/

-i 若目标文件已存在,则会询问是否覆盖

[root@localhost ~]# cp -i a.txt /work/
cp: overwrite '/work/a.txt'? 

-r  递归处理,将指定目录下的文件与子目录一并处理。

[root@localhost ~]# cp -r job/ /work/

把/tmp目录里面的 a.txt 复制一个 a.txt.bak,以下三种方法皆可:

[root@localhost ~]# cp /tmp/a.txt /tmp/a.txt.bak     #复制的时候可随意直接修改文件名
[root@localhost ~]# cp /tmp/{a.txt,a.txt.bak}        #复制的时候可随意直接修改文件名
[root@localhost ~]# cp /tmp/a.txt{,.bak}             #复制的时候不能随意修改文件名,只能在原有的文件名后面加后缀

复制文件或者目录有以下注意事项:

  • 单源文件复制
    • 如果目标文件不存在,则事先创建此文件,并复制源文件的内容至目标文件中
    • 如果目标文件存在,并且是非目录文件,则覆盖目标文件
    • 如果目标文件存在,并且是目录文件,则先在目标目录下创建一个与源文件同名的文件,并复制源文件内容至目标文件
  • 多源文件复制
    • 如果目标不存在,报错
    • 如果目标文件存在,并且是非目录,报错
    • 如果目标文件存在,并且是目录,分别复制每个文件至目标目录中,并保持原名
  • 复制目录
    • 如果目标不存在,则先创建目录,并按照文件复制的方式,将目录内的文件复制到目标目录中
    • 如果目标存在,并且是文件,报错
    • 如果目录存在,并且是目录,将整个目录都复制到目标目录中

rm命令

rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。

命令语法

rm【选项】 【文件或目录】 

命令选项

-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录(没有提示);
-i:删除已有文件或目录之前先询问用户(默认设置);
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理(删除目录必须要加);
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。

命令示例

删除文件

[root@localhost ~]# rm a.txt 
rm: remove regular empty file ‘a.txt’? y     #输入y确认删除,其他字符不删除
[root@localhost ~]# 

删除目录

[root@localhost ~]# rm -rf /tmp/work        #删除整work个目录,包含里面的文件和目录
[root@localhost ~]# rm -rf /tmp/work/*      #删除work目录里面的文件和目录,不删除work目录

mv命令

mv命令是“move”单词的缩写,可以移动文件或对其改名,经常用来备份文件或者目录,mv命令会将源文件或者目录删除。

命令语法

mv 【选项】 【源文件或目录】 【目标文件或目录】

常用参数:

-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件已经存在,就会询问是否覆盖
-u :若目标文件已经存在,且比目标文件新,才会更新
-b 当文件存在时,覆盖前为其创建一个备份
-t 指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。

命令示例

(1)将文件a.txt重命名为b.txt

[root@localhost ~]# mv a.txt b.txt

(2)-i 将文件a.txt重命名为b.txt,若有同名,询问是否覆盖

[root@localhost ~]# mv -i a.txt b.txt

(3)-f 将文件a.txt重命名为b.txt,若有同名,则不会提示,强制覆盖

[root@localhost ~]# mv -f a.txt b.txt

(4)-b 将文件a.txt重命名为b.txt,若有同名,覆盖前为其创建一个备份

[root@localhost ~]# ls
a.txt  b.txt
[root@localhost ~]# mv -b a.txt b.txt
mv: overwrite 'b.txt'? y
[root@localhost ~]# ls
b.txt  b.txt~

(5)将a.txt文件移动到/work/目录中 

[root@localhost ~]# mv a.txt /work/

(6)将a.txt文件移动到/work/目录中,并重命名为b.txt

[root@localhost ~]# mv a.txt /work/b.txt

(7)将多个文件a.txt和b.txt移动到/work/目录中 

[root@localhost ~]# mv a.txt b.txt /work/
#或者
[root@localhost ~]# mv -t /work/ a.txt b.txt

(8)将目录job移动到/work/目录中(job目录和目录里面的文件全部移动) 

[root@localhost ~]# mv job /work/

(9)将目录doc中的文件移动到/work/目录中(doc目录未移动,doc目录里面的文件移动) 

[root@localhost ~]# mv doc/* /work/

(10)将目录doc和目录logg移动到/work/目中

[root@localhost ~]# mv doc/ logg/ /work/
#或者
[root@localhost ~]# mv -t /work/ doc/ job/

(11)把/tmp目录里面的 a.txt 修改一个 a.txt.bak,以下三种方法皆可:

[root@localhost ~]# mv /tmp/a.txt /tmp/a.txt.bak     #可直接修改为任意文件名
[root@localhost ~]# mv /tmp/{a.txt,a.txt.bak}        #可直接修改为任意文件名
[root@localhost ~]# mv /tmp/a.txt{,.bak}             #不可随意修改文件名,只能在原有的文件名后面追加

pwd命令

作用为查看”当前工作目录“的完整路径

pwd -P # 显示出实际路径,而非使用连接(link)路径;pwd显示的是连接路径

tar命令

用于压缩解压:

-c :新建打包文件
-t :查看打包文件的内容含有哪些文件名
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
-j :通过bzip2的支持进行压缩/解压缩
-z :通过gzip的支持进行压缩/解压缩
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename :filename为要处理的文件
-C dir :指定压缩/解压缩的目录dir
压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

mkdir命令 

mkdir命令是“make directories”的缩写,用来创建指定名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。

命令语法

mkdir 【选项】 【目录名】

命令选项

-p  递归创建多级目录
-m 创建目录的同时设置目录的权限
-v 显示目录的创建过程
-z 将创建目录的SELinux安全环境设置为CTX

命令示例

创建单个目录

[root@localhost ~]# mkdir work
[root@localhost ~]# ls
work

创建多个目录

[root@localhost ~]# mkdir work1 work5 workk
[root@localhost ~]# ls
work1  work5  workk

创建多个有序的目录

[root@localhost ~]# mkdir a{1..3}work b{1..3}work
[root@localhost ~]# ls
a1work  a2work  a3work  b1work  b2work  b3work

-p  递归创建多级目录

[root@localhost ~]# mkdir -p /root/a/b/c
[root@localhost ~]# tree /root/
/root/
└── a
    └── b
        └── c

3 directories, 0 files

 -m 创建目录的同时设置目录的权限

[root@localhost ~]# mkdir -m 700 work
[root@localhost ~]# ll
total 0
drwx------. 2 root root 6 10月 10 14:03 work

-v 显示目录的创建过程

[root@localhost ~]# mkdir -v work{1..3}
mkdir: created directory 'work1'
mkdir: created directory 'work2'
mkdir: created directory 'work3'

一条命令创建多个多级目录 

[root@localhost ~]# mkdir -p work/{doc/,job/{a/,b/},logs/{logs1/,logs2/}}
[root@localhost ~]# tree /root/
/root/
└── work
    ├── doc
    ├── job
    │   ├── a
    │   └── b
    └── logs
        ├── logs1
        └── logs2

8 directories, 0 files

rmdir命令

rmdir命令作用是删除空的目录,也只能删除空目录;rmdir命令的“-p”参数可以递归删除指定的多级目录,但是要求每个目录也必须是空目录。当要删除非空目录时,就要使用 rm -r 命令。

命令语法

rmdir【选项】 【空目录】 

命令选项

-p:用递归的方式删除指定的目录路径中的所有父级目录,非空则报错

命令示例

[root@localhost ~]# rmdir work         #work空目录
[root@localhost ~]# rmdir -p a/b/c     #递归删除空目录

gzip命令

压缩文件或文件夹为 .gz文件:

gzip[参数][文件或者目录]
-a or --ascii  使用ASCII文字模式。 
-c or --stdout or --to-stdout  把压缩后的文件输出到标准输出设备,不去更动原始文件。 
-d or --decompress or ----uncompress  解开压缩文件。 
-f or --force  强行压缩文件。不理会文件名称 or 硬连接是否存在以及该文件是否为符号连接。 
-h or --help  在线帮助。 
-l or --list  列出压缩文件的相关信息。 
-L or --license  显示版本与版权信息。 
-n or --no-name  压缩文件时,不保存原来的文件名称及时间戳记。 
-N or --name  压缩文件时,保存原来的文件名称及时间戳记。 
-q or --quiet  不显示警告信息。 
-r or --recursive  递归处理,将指定目录下的所有文件及子目录一并处理。 
-S<压缩字尾字符串> or ----suffix<压缩字尾字符串>  更改压缩字尾字符串。 
-t or --test  测试压缩文件是否正确无误。 
-v or --verbose  显示指令执行过程。 
-V or --version  显示版本信息。 
-num 用指定的数字num调整压缩的速度,-1 or --fast表示最快压缩方法(低压缩比),-9 or --best表示最慢压缩方法(高压缩比)。系统缺省值为6。

进程相关命令

ps命令

显示运行的进程,还会显示进程的一些信息如pid, cpu和内存使用情况等:

-A :所有的进程均显示出来
-a :不与terminal有关的所有进程
-u :有效用户的相关进程
-x :一般与a参数一起使用,可列出较完整的信息
-l :较长,较详细地将PID的信息列出

使用示例:

kill命令

用于终止进程,参数:

kill -signal PID

1:SIGHUP,启动被终止的进程
2:SIGINT,相当于输入ctrl+c,中断一个程序的进行
9:SIGKILL,强制中断一个进程的进行
15:SIGTERM,以正常的结束进程方式来终止进程
17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行

使用示例:

killall命令

killall [-iIe] [command name]

-i :交互式的意思,若需要删除时,会询问用户
-e :表示后面接的command name要一致,但command name不能超过15个字符
-I :命令名称忽略大小写
# 例如:
killall -SIGHUP syslogd # 重新启动syslogd

使用示例:

crontab命令

启动linux定时任务的服务

service cron start # 启动cronjob
service cron stop # 停止cronjob
service cron restart #  重启cronjob
crontab -e # 编辑cronjob任务

使用示例:打开crontab -e后通过vi方式编辑任务列表

free命令

用于显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer: 

free [参数]
-b  以Byte为单位显示内存使用情况。 
-k  以KB为单位显示内存使用情况。 
-m  以MB为单位显示内存使用情况。
-g   以GB为单位显示内存使用情况。 
-o  不显示缓冲区调节列。 
-s<间隔秒数>  持续观察内存使用状况。 
-t  显示内存总和列。 
-V  显示版本信息。

使用示例:

top命令

Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器:

top [参数]
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数

使用示例:

权限相关命令

chmod命令

chmod [-R] xyz 文件或目录
-R:进行递归的持续更改,即连同子目录下的所有文件都会更改
#同时,chmod还可以使用u(user)、g(group)、o(other)、a(all)和+(加入)、-(删除)、=(设置)跟rwx搭配来对文件的权限进行更改,编号是各种权限的数字代码,示例:
chmod 0755 file # 把file的文件权限改变为-rxwr-xr-x
chmod g+w file # 向file的文件权限中加入用户组可写权限

使用示例:

chown命令

改变文件所有者:

chown [para]... [owner][:[group]] file...
  -c 显示更改的部分的信息
 -f 忽略错误信息
 -h 修复符号链接
 -R 处理指定目录以及其子目录下的所有文件
 -v 显示详细的处理信息
 -deference 作用于符号链接的指向,而不是链接文件本身

使用示例:

chgrp命令

改变文件所属组:

-c 当发生改变时输出调试信息
-f 不显示错误信息
-R 处理指定目录以及其子目录下的所有文件
-v 运行时显示详细的处理信息
--dereference 作用于符号链接的指向,而不是符号链接本身
--no-dereference 作用于符号链接本身

使用示例:

useradd命令

useradd命令用来创建新的用户或更改用户的信息。帐号建好之后,再用passwd设定帐号的密码。使用useradd指令所建立的帐号,保存在/etc/passwd文本文件中。

命令语法

useradd 【选项】 【用户名】 

命令选项

-b:新账户的主目录的基目录
-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
-D:变更预设值。
-e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
-g:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
-G:指定用户所属的附加群组。
-k:使用此目录作为骨架目录
-K:不使用 /etc/login.defs 中的默认值
-l:不要将此用户添加到最近登录和登录失败数据库
-m:自动建立用户的登入目录。
-M:不要自动建立用户的家目录。
-N:取消建立以用户名称为名的群组。
-r:建立系统账号。
-R:chroot 到的目录
-s:指定用户登入后所使用的shell。默认值为/bin/bash。
-u:指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499。
-U:创建与用户同名的组

命令示例

-D 查看系统的默认值

[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

解释:

  • 新用户添加到GID为100的公共组
  • 新用户的HOME目录将会位于/homoe/username
  • 新用户账户密码在过期后不会被禁用
  • 新用户账户未被设置为某个日期后就过期
  • 新用户账户将bash shell作为默认shell
  • 系统会将/etc/skel目录下的内容复制到用户的HOME目录下
  • 系统为该用户账户在mail目录下创建一个用于接收邮件的文件

-M:不要自动建立用户的家目录。

[root@localhost ~]# useradd -M ceshi

添加新用户 ceshi ,指定UID为888,指定归属用户组为root,root成员,其shell类型为/bin/sh。

[root@localhost ~]# useradd -u 888 -s /bin/sh -G root,root ceshi

添加新用户ceshi,设置家目录为/tmp/ceshi,用户过期时间为2019/010/06.过期后两天停权。

[root@localhost ~]# useradd -e "2019/10/16" -f 2 -d /tmp/ceshi ceshi

新建用户gem,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。

[root@localhost ~]# useradd -s /bin/sh -g group –G adm,root gem

usermod命令

修改用户信息:

usermod -h
usermod [options] LOGIN
 -c #后面接账号的说明,即/etc/passwd第五栏的说明栏,可以加入一些账号的说明 
  -d #后面接账号的家目录,即修改/etc/passwd的第六栏 
  -e #后面接日期,格式是YYYY-MM-DD也就是在/etc/shadow内的第八栏 
  -f #后面接天数,修改shadow的第七栏 
  -g #后面接主群组,修改/etc/passwd的第四个字段,即是GID的字段 
  -G #后面接附加群组,修改这个使用者能够支持的群组,修改的是/etc/group 
  -a #与 -G 合用,可增加附加群组的支持而非设定 
  -l #后面接账号名称。修改账号名称,/etc/passwd的第一栏 
  -s #后面接Shell的文件,例如/bin/bash或/bin/csh等等 
  -u #后面接 UID 数字,修改用户的UID /etc/passwd第三栏 
  -L #暂时将用户的密码冻结,让他无法登入。其实就是在/etc/shadow的密码栏前面加上了“!” 
  -U #将/etc/shadow 密码栏的“!”去掉

使用示例: 

 

userdel命令

userdel命令用于删除指定的用户及与该用户相关的文件。其实userdel命令实际上是修改了系统的用户账号文件 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow以及家目录文件。这与Linux系统”一切操作皆文件”的思想正好吻合。如果有该要删除用户相关的进程正在运行,userdel命令通常不会删除一个用户账号。如果确实必须要删除,可以先终止用户进程,然后再执行userdel命令进行删除。但是userdel命令也提供了一个面对该种情况的参数,即”-f”选项。

用户的相关数据信息包含如下几项:

  • 用户基本信息:存储在 /etc/passwd 文件中;
  • 用户密码信息:存储在 /etc/shadow 文件中;
  • 用户群组基本信息:存储在 /etc/group 文件中;
  • 用户群组信息信息:存储在 /etc/gshadow 文件中;
  • 用户个人文件:主目录默认位于 /home/用户名
  • 邮箱位于:/var/spool/mail/用户名。

其实,userdel 命令的作用就是从以上文件中,删除与指定用户有关的数据信息。

命令语法

userdel【选项】 【用户名】 

命令选项

-f 强制删除用户账号
-r 删除用户主目录及其中的任何文件

命令示例

userdel 不加选项,则仅删除用户帐号,而不删除相关文件。

[root@localhost ~]# userdel liuzg       #只删除了liuzg用户,而没有删除liuzg用户的相关文件

-r 删除用户主目录及其中的任何文件

[root@localhost ~]# userdel -r liuzg

若彻底删除与用户相关的文件信息,可通过 find / -user liuzg(用户名) 查找出逐一删除  然后执行userdel -r liuzg 一切搞定

[root@localhost ~]# find / -user liuzg
/home/liuzg
/home/liuzg/.bash_logout
/home/liuzg/.bash_profile
/home/liuzg/.bashrc
/home/liuzg/a.txt
/home/liuzg/work
/home/liuzg/.bash_history
find: '/proc/9957/task/9957/fd/6': No such file or directory
find: '/proc/9957/task/9957/fdinfo/6': No such file or directory
find: '/proc/9957/fd/6': No such file or directory
find: '/proc/9957/fdinfo/6': No such file or directory
/var/spool/mail/liuzg

groupadd命令

用于将新组加入系统:

groupadd [-g gid] [-o]] [-r] [-f] groupname

-g gid:指定组ID号。
-o:允许组ID号,不必惟一。
-r:加入组ID号,低于499系统账号。
-f:加入已经有的组时,发展程序退出。

使用示例:

groupdel命令

删除组:

# 用于删除不再需要的组,如果指定的组中包含用户,则必须先删除组里面的用户>以后,才能删除组
groupdel [options] GROUP

使用示例:

sudo命令

用来以其他身份来执行命令,预设的身份为root:

sudo(选项)(参数)

-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。

使用示例:

passwd命令

设置用户的密码:

passwd [OPTION...] <accountName>
-k, --keep-tokens       keep non-expired authentication tokens
-d, --delete            delete the password for the named account (root only)
-l, --lock              lock the named account (root only)
-u, --unlock            unlock the named account (root only)
-f, --force             force operation
-x, --maximum=DAYS      maximum password lifetime (root only)
-n, --minimum=DAYS      minimum password lifetime (root only)
-w, --warning=DAYS      number of days warning users receives before password expiration (root only)
-i, --inactive=DAYS     number of days after password expiration when an account b

groups命令

显示用户所属组

groups # 默认显示当前用户的组
groups hadoop2 # 显示hadoop2用户的组

使用示例:

文本查看编辑等命令

vi/vim命令

vi/vim命令是文本编辑器。编辑多个文件,中间用空格隔开。

vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。

vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。

命令语法

vi【选项】 【文件】 

命令选项

vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和末行模式(Last line mode)

+<行号>:将光标定位到指定行号的行首
+:打开文件,光标定位到最后一行的行首
+/word:打开文件,定位只第一次被word匹配到的行的行首
-b:以二进制模式打开文件,用于编辑二进制文件和可执行文件;
-c<指令>:在完成对第一个文件编辑任务后,执行给出的指令;
-d:以diff模式打开文件,当多个文件编辑时,显示文件差异部分;
-l:使用lisp模式,打开“lisp”和“showmatch”;
-m:取消写文件功能,重设“write”选项;
-M:关闭修改功能;
-n:不实用缓存功能;
-o<文件数目>:指定同时打开指定数目的文件;
-R:以只读方式打开文件;
-s:安静模式,不显示指令的任何错误信息。

命令模式

翻页命令:

  • Ctrl+u:向上翻半页;
  • Ctrl+d:向下翻半夜;
  • Ctrl+f:向下翻一页(小键盘PuDn);
  • Ctrl+b:向上翻一页(小键盘PuUp);

逐字符移动光标:

  • h:光标向左移一个字符
  • l:光标向右移一个字符(小写L)
  • k:光标向上移一个字符
  • j:光标向下移一个字符
  • nh/l/j/k:光标向左、右、上、下移动n个字符

以单词为单位移动光标:

  • w:移至下一个单词的词首
  • e:跳至当前或下一个单词的词尾
  • b:跳至当前或前一个单词的词首
  • nw/e/b:移动n个单词

行内跳转:

  • 0(数字0):光标移动到当前行的行首(小键盘Home)
  • ^:行首的第一个非空白字符
  • $:光标移动到当前行的行尾(小键盘End)
  • n空格(n代表数字):光标向当前行右移动n个字符

行间跳转:

  • nG(n代表数字):光标移动到该文章第n行的第一个非空字符,如果为空行,则在行首
  • gg:光标移动到该文档的第一行的非空字符,如果为空行,则在行首
  • ngg:光标移动到该文档的第n行的行首
  • G:光标移动到该文章最后一行的第一个非空字符
  • n+回车:光标从当前行向下移动n行的第一个非空字符,如果为空行,则在行首

删除单个字符:

  • x或X:删除一个字符,x删除光标后的,而X删除光标前的;
  • nx(n代表数字):向后删除n个字符
  • nX(n代表数字):向前删除n个字符

删除命令:

  • dd:删除光标所在行整行内容;
  • D:删除从当前光标到光标所在行尾的全部字符;
  • ndd:删除当前行及其后n-1行;
  • dnG:删除光标所在行到第n行的所有数据
  • dG:删除光标所在行到最后一行的所有数据
  • dnj(n代表数字):删除光标所在行向下n+1行
  • dw:删除光标向后到下一个单词之间的字符
  • de:删除本单词光标后的字符(包含光标所在字符)
  • db:删除本单词光标前的字符(包含光标所在字符)

复制命令:

  • yy:复制光标所在整行,或者Y
  • nyy:包括光标所在行向下复制n-1行
  • y^或者y0:复制光标所在行到行首
  • y$:复制光标所在行到行尾
  • yw:复制一个单词
  • y2w:复制两个单词
  • ynG:复制光标所在行到第n行的所有数据
  • yG:复制光标所在行到最后一行的所有数据
  • y1G:复制至档首
  • ynj(n代表数字):复制光标所在行向下n+1行

粘贴命令:

  • p:粘贴至光标后(下)
  • P:粘贴至光标前(上)

替换命令:

  • nr字符:光标后的n个字符替换成想要替换的单个字符
  • R:替换模式,在光标处直接输入需要替换的字符

撤销操作:

  • u:撤消前一次的编辑操作
  • nu: 直接撤消最近n次编辑操作
  • 连续u命令可撤消此前的n次编辑操作
  • U:撤销所有编辑操作
  • Ctrl+r:撤消最近一次撤消操作

重复前一次编辑操作:

  • .:点 命令模式下重复前一次编辑模式下的操作

可视化模式:

  • Ctrl + v:按字符选取(可视化模式)
    • 插入:选中相应的字符后,按Shift+i进入编辑模式,输入需要插入的字符(选中字符的前面),结束按Esc键
    • 删除:选中内容后,按x或者d键删除
    • 替换:选中需要替换的内容,按r键,输入替换后的内容(把所有选中的内容替换成单个字符)
    • 复制:选中内容,按y键复制
  • Shift + v:按行选取(可视行模式)
    • 复制:选中行内容后按y键复制
    • 删除:选中行内容后按d键删除
  • Esc:按两次取消可视化

其他命令:

  • J:将光标所在行与下一行的数据结合成一行(中间空格隔开)
  • +:光标移动到下一行的第一个非空字符
  • -:光标移动到上一行的第一个非空字符
  • H:光标移动到当前屏幕最上方的那一行的第一个非空字符,如果为空行,则在行首
  • M:光标移动到当前屏幕最中间那一行的第一个非空字符,如果为空行,则在行首
  • L:光标移动到当前屏幕最下方的那一行的第一个非空字符,如果为空行,则在行首
  • ZZ:命令模式下保存当前文件所做的修改后退出vi;

输入模式

  • i,I:i为在当前光标所在处插入输入的文字,I为在光标所在行第一个非空字符插入输入的文字
  • a,A:a为在当前光标所在处下一个字符插入输入的文字,A为在光标所在行的行尾插入字符
  • o,O:o为在光标所在行的下一行新建一行行首输入内容,O为在光标所在行的上一行新建一行行首输入内容
  • r,R:r为替换光标所在的那一个字符(单个字符),R为替换光标所在字符向后的所有字符,直到退出
  • Esc:退出,回到命令模式

末行模式

查找:

  • /word:在光标之后查找word字符串
  • ?word:在光标之前查找word字符串
  • n:按搜索到的内容依次往下查找
  • N:按搜索到的内容依次往上查找
  • :f:显示当前的文件名、光标所在行的行号以及显示比例

替换:

  • :s/word1/word2:替换光标所在行的第一个满足条件的内容(word1替换成word2)
  • :s/word1/word2/g:替换光标所在行的所有满足条件的内容(word1替换成word2)
  • :m,ns/word1/word2:替换从m行到n行每行第一个满足条件的内容(word1替换成word2)
  • :m,ns/word1/word2/g:替换从m行到n行所有满足条件的内容(word1替换成word2)
  • :%s/word1/word2/g:替换整个文档满足条件的内容(word1替换成word2)
  • :s/word1/word2/gc:最后小写c作用替换内容时提示是否需要替换(y是,n否,a所有,q退出)

复制:

  • :ny:复制第n行,单行复制
  • :m,ny:复制从m行到n行
  • :$y:复制最后一行
  • :%y:复制所有行

删除:

  • :nd:删除第n行
  • :m,nd:删除第m到第n行
  • :$d:删除最后一行
  • :%d:删除文件所有内容

光标跳转:

  • :n:光标跳转到第n行的行首(n为数字)
  • :$:光标跳转到最后一行的行首

保存:

  • :w:将编辑的数据保存到硬盘文件中
  • :wq或:x:保存文件并退出编辑
  • :w [filename]:将编辑后的内容保存到另一个文件中(另存为,路径)
  • :m,nw [filename]:将m到n行的内容保存到名为filename的文件中(另存为,路径)

退出:

  • :q:退出,适用于未修改的文件
  • :q!:强制退出,适用于修改文件后不保存退出

插入文件内容:

  • :r [filename]:在编辑数据时,读入另一个文件中的数据,即将filename文件中的内容插入到光标所在行下面

编辑其他文件:

  • :e文件名:打开并编辑指定名称的文件
  • :n:如果同时打开多个文件,则继续编辑下一个文件(n为字符n)

编辑多个文件:

  • vim FILE1 FILE2 FILE3
  • next:切换至下一个文件
  • prev:切换至前一个文件
  • last:切换至最后一个文件
  • first:切换至第一个文件
  • q退出当前文件
  • qa 全部退出

显示行号:

  • :set nu:显示行号
  • :set nonu:取消行号

nu=number

字符大小写:

  • :set ic:忽略字符大小写
  • :set noic:区分字符大小写

ic = ignorecase

显示制表符:

  • :set list:显示制表符(空格、tab键)
  • :set nolist:取消制表符(空格、tab键)

设定自动缩进:

  • :set ai
  • :set noai

ai = autoindent

查找到的文本高亮显示或取消:

  • :set hlsearch
  • :set nohlsearch

语法高亮:

  • :syntax on
  • :syntax off

注:特性当前有效,如果想要永久有效需修改配置文件

配置文件:

  • /etc/vimrc 针对所有用户
  • ~/.vimrc 针对当前用户

cat命令

cat命令用于查看内容较少的文本文件,一次性显示整个文件,内容多的话建议用more。

可以创建一个文件,创建的时候可以输入文件内容,不可以编辑已有的文件。(cat > a.txt)

可以向已存在的文件中追加内容(cat >> a.txt)

可以将多个文件合并成一个文件,文件内容叠加,源文件不会消失。(cat a.txt b.txt > c.txt)

可以将多个文件的内容追加到已存在的文件当中(cat a.txt b.txt >> c.txt)

符号:>创建,>>是追加

命令语法

cat 【选项】 【文件】 

命令选项

-n 显示行数(空行也编号)
-s 显示行数(多个空行算一个编号)
-b 显示行数(空行不编号)
-E 每行结束处显示$符号
-T 将TAB字符显示为 ^I符号
-v 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
-e 等价于”-vE”组合
-t 等价于”-vT”组合
-A 等价于 -vET组合

命令示例

创建文件a.txt,并输入内容。如果文件a.txt不存在,直接创建;如果文件a.txt存在,会直接覆盖,不会提示。

[root@localhost ~]# cat > a.txt
abc
123
dfe
[root@localhost ~]# ls
a.txt
[root@localhost ~]# cat a.txt
abc
123
dfe

或者 cat > a.txt << EOF,创建a.txt文件,输入内容,以EOF退出输入。(EOF只是标识,不是固定的) 

[root@localhost ~]# cat > a.txt << EOF
> abc
> 123
> EOF     #注:以EOF退出输入
[root@localhost ~]# cat a.txt
abc
123

可以向已存在的文件中追加内容(cat >> a.txt) 

[root@localhost ~]# cat a.txt
abc
123
[root@localhost ~]# cat >> a.txt
ghj
rfg
[root@localhost ~]# cat a.txt
abc
123
ghj
rfg

或者cat >> a.txt << EOF

[root@localhost ~]# cat a.txt
abc
123
[root@localhost ~]# cat >> a.txt << EOF
> rfv
> tgb
> EOF     #注:以EOF退出输入
[root@localhost ~]# cat a.txt
abc
123
rfv
tgb

将多个文件里面的内容合并成一个文件,源文件不会消失。

[root@localhost ~]# ls
a.txt  b.txt  c.txt
[root@localhost ~]# cat a.txt
123
[root@localhost ~]# cat b.txt
abc
[root@localhost ~]# cat c.txt
789
[root@localhost ~]# cat a.txt b.txt c.txt > d.txt
[root@localhost ~]# cat d.txt
123
abc
789
[root@localhost ~]# ls
a.txt  b.txt  c.txt  d.txt

将多个文件的内容追加到已存在的文件当中

[root@localhost ~]# ls
a.txt  b.txt  c.txt
[root@localhost ~]# cat a.txt
1232
[root@localhost ~]# cat b.txt
abcd
[root@localhost ~]# cat c.txt
9654
[root@localhost ~]# cat a.txt b.txt >> c.txt
[root@localhost ~]# cat c.txt
9654
1232
abcd
[root@localhost ~]# ls
a.txt  b.txt  c.txt

将a.txt的内容覆盖到b.txt文件中(cat a.txt > b.txt)

[root@localhost ~]# cat a.txt
1232
[root@localhost ~]# cat b.txt
abcd
[root@localhost ~]# cat a.txt > b.txt
[root@localhost ~]# cat b.txt
1232

将a.txt内容加上行号后输入到b.txt文件中(cat -n a.txt > b.txt)

[root@localhost ~]# cat a.txt
abc
def
[root@localhost ~]# cat b.txt
yhn
[root@localhost ~]# cat -n a.txt > b.txt
[root@localhost ~]# cat b.txt
1    abc
2    def

-n 显示行数(空行也编号)

[root@localhost ~]# cat -n a.txt
1    123
2
3
4    789
5    abc
6
7    dfg

-s 显示行数(多个空行算一个编号),可配合-n使用 

[root@localhost ~]# cat a.txt
123


789
abc

dfg
[root@localhost ~]# cat -sn a.txt
1    123
2
3    789
4    abc
5
6    dfg

-b 显示行数(空行不编号)

[root@localhost ~]# cat -b a.txt
1    123


2    789
3    abc

4    dfg

创建 a.txt 文件,并输入内容的另一种写法:

[root@lzg ~]# > a.txt cat <<EOF
> abc
> def
> 123
> EOF
[root@lzg ~]# cat a.txt
abc
def
123
[root@lzg ~]#

向 a.txt 文件追加内容的另一种写法:

[root@lzg ~]# cat a.txt
abc
def
123
[root@lzg ~]# >> a.txt cat << EOF
> 111
> 222
> EOF
[root@lzg ~]# cat a.txt
abc
def
123
111
222
[root@lzg ~]#

more命令

more命令用于将内容较长的文本文件内容(不能在一屏显示完)进行分屏显示,并且支持在显示时定位关键字。而对于内容较少的文本文件内容则推荐使用cat命令查看。

命令语法

more 【选项】 【文件】 

命令选项

-num 指定每屏显示num行
+num 从第 num 行开始显示
+/pattern 在每个文档显示前搜寻该字(pattern),然后从该字串前两行之后开始显示
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算实际的行数,而非自动换行的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 先清除屏幕再显示文本文件的剩余内容
-c 与-p相似,不滚屏,先显示内容再清除旧内容
-s 多个空行压缩成一行显示
-u 不显示下划线
-d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
命令内部操作:
    Space键:显示文本的下一屏内容
    Enter键:向下n行,需要定义,默认为1行
    q键:退出more命令
    Ctrl+f:向下滚动一屏
    Ctrl+b:返回上一屏
    =: 输出当前的行号
    :f:输出文件名和当前的行号
    v:调用vi编辑器
    !:调用Shell,并执行命令
    h:显示帮助屏

命令示例

-num 指定每屏显示num行,more -10 /etc/ssh/sshd_config     每屏显示10行

[root@localhost ~]# more -10 /etc/ssh/sshd_config
#    $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
--More--(11%)

+num 从第 num 行开始显示,more + 10 /etc/ssh/sshd_config    从第10行开始显示

+/pattern 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示;more +/Port /etc/ssh/sshd_config   从包含Port字符的前两行开始显示

[root@localhost ~]# more +/Port /etc/ssh/sshd_config

...跳过
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 28256
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

从文件中查找第一个出现"abc"字符串的行,并从该行前两行开始到最后一行输出为新文件

[root@localhost ~]# more +/abc work.txt > work1.txt

less命令

less 工具对文件或其它输出进行分页显示的工具,是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。 在 more 的时候,只能向前浏览不能向后 ,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按 键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

命令语法

less【选项】 【文件】 

命令选项

-b:设置缓冲区的大小
-e:当文件显示结束后,自动离开
-f:强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g:只标志最后搜索的关键词
-i:忽略搜索时的大小写
-m:显示类似more命令的百分比
-N:显示每行的行号
-o <文件名>:将less 输出的内容在指定文件中保存起来
-Q:不使用警告音
-s:显示连续空行为一行
-S:在单行显示较长的内容,而不换行显示
-x <数字>:将TAB字符显示为指定个数的空格字符

命令内部操作:
  /字符串:向下搜索”字符串“的功能
  ?字符串:向上搜索”字符串“的功能
  n:重复前一个搜索(与 / 或 ? 有关)
  N:反向重复前一个搜索(与 / 或 ? 有关)
  u:向前滚动半页
  b:向前翻一页
  d:向后滚动半页
  f:向后翻一页
  y:向前滚动一行
  k:向前滚动一行
  j:向后移动一行
    G:移动到最后一行
    g:移动到第一行
  :e:切换另一个文件
  h:显示 less 的帮助文档
  [pageup]:向上翻动一页
  [pagedown]:向下翻动一页
  v:进入编辑模式,可编辑当前文件
  F:实时刷新当前文件内容,相当于:tail -f
  m:做标记导航。查看大文件时,可以在任何位置作标记,通过命令导航到标有特定标记的文本位置,输入 m 再输入 a ,使用a标记文本当前的位置,之后可以用 'a 导航到标记 a 处。
  空格键 滚动一页
  回车键 滚动一行

命令示例

默认查看文件内容

[root@localhost ~]# less /etc/ssh/sshd_config

ps查看进程信息并通过less分页显示,同时显示行号

[root@localhost ~]# ps -ef | less -N

浏览多个文件

[root@localhost ~]# less a.txt b.txt 
safafdsagfergfdgdfger
dsfgergdfgerwgyregfdg
a.txt (file 1 of 2) (END) - Next: b.txt

说明:

  • 输入 :n 后,切换到 b.txt
  • 输入 :p 后,切换到 a.txt

tail命令

tail用于显示文件尾部的内容,默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。

命令语法

tail【选项】 【文件】 

命令选项

-f 显示文件最新追加的内容,该参数用于监视File文件增长。
-n Number 显示最后Number行
-c Number 显示最后Number字符

命令示例

-n 显示文件的最后2行,tail -n 2 b.txt 或者 tail -2 b.txt

[root@localhost ~]# cat b.txt
a
b
c
d
e
[root@localhost ~]# tail -n 2 b.txt
d
e
[root@localhost ~]# tail -2 b.txt
d
e

-c 显示文件的最后6个字符,tail -c 6 a.txt

[root@localhost ~]# cat a.txt 
safafdsagfergfdgdfger
dsfgergdfgerwgyregfdg
[root@localhost ~]# tail -c 6 a.txt 
egfdg

显示文件file的内容,从第2行至文件末尾

[root@localhost ~]# cat b.txt
a
b
c
d
e
[root@localhost ~]# tail -n +2 b.txt
b
c
d
e

-f 获取文件新增的内容,最后10行

[root@localhost ~]# tail -f /var/log/messages
Oct 11 13:08:36 localhost systemd: Started Session 87 of user root.
Oct 11 14:01:01 localhost systemd: Started Session 88 of user root.
Oct 11 14:40:35 localhost systemd-logind: Removed session 83.
Oct 11 15:01:01 localhost systemd: Started Session 89 of user root.
Oct 11 15:54:41 localhost systemd: Started Session 90 of user root.
Oct 11 15:54:41 localhost systemd-logind: New session 90 of user root.
Oct 11 15:56:28 localhost systemd: Started Session 91 of user root.
Oct 11 15:56:28 localhost systemd-logind: New session 91 of user root.
Oct 11 15:57:24 localhost systemd: Started Session 92 of user root.
Oct 11 15:57:24 localhost systemd-logind: New session 92 of user root.

head命令

head命令以行为单位,取文件的内容,不接参数时默认打印前10行。

命令语法

head 【选项】 【文件】 

命令选项

-n 后面接数字,代表显示几行的意思
-c 指定显示头部内容的字符数
-v 总是显示文件名的头信息
-q 不显示文件名的头信息

命令示例

显示a.txt文件前3行内容,head -n 3 a.txt 

[root@localhost ~]# cat a.txt
1
2
3
4
5
6
[root@localhost ~]# head -n 3 a.txt
1
2
3

或者head -3 a.txt

[root@localhost ~]# head -3 a.txt 
1
2
3

显示b.txt文件除了最后3行外的所有内容,head -n -3 b.txt

[root@localhost ~]# cat b.txt
a
b
c
d
e
[root@localhost ~]# head -n -3 b.txt
a
b

-c 显示a.txt文件的前6个字符

[root@localhost ~]# cat b.txt
a
b
c
d
e
[root@localhost ~]# head -n -3 b.txt
a
b

-v 总是显示文件名的头信息

[root@localhost ~]# head -v -n 3 b.txt 
==> b.txt <==
a
b
c

diff命令

用于比较两个文件或目录的不同:

diff[参数][文件1或目录1][文件2或目录2]

# diff命令能比较单个文件或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的的时候,diff 命令会比较两个目录下名字相同的
# 文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。

-a or --text  #diff预设只会逐行比较文本文件。
-b or --ignore-space-change  #不检查空格字符的不同。
-B or --ignore-blank-lines  #不检查空白行。
-c  #显示全部内文,并标出不同之处。
-C or --context  #与执行"-c-"指令相同。
-d or --minimal  #使用不同的演算法,以较小的单位来做比较。
-D or ifdef  #此参数的输出格式可用于前置处理器巨集。
-e or --ed  #此参数的输出格式可用于ed的script文件。
-f or -forward-ed  #输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。
-H or --speed-large-files  #比较大文件时,可加快速度。
-l or --ignore-matching-lines  #若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符 or 字符串,则不显示这两个文件的差异。
-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,-U or --unified=  #以合并的方式来显示文件内容的不同。
-v or --version  #显示版本信息。
-w or --ignore-all-space  #忽略全部的空格字符。
-W or --width  #在使用-y参数时,指定栏宽。
-x or --exclude  #不比较选项中所指定的文件 or 目录。
-X or --exclude-from  #您可以将文件 or 目录类型存成文本文件,然后在=中指定此文本文件。
-y or --side-by-side  #以并列的方式显示文件的异同之处。

使用示例:

网络相关命令

ping命令

用于确定主机与外部连接状态:

ping [参数] [主机名或IP地址]
-d 使用Socket的SO_DEBUG功能。
-f  极限检测。大量且快速地送网络封包给一台机器,看它的回应。
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
<p>-c 数目:在发送指定数目的包后停止。
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-I 网络界面:使用指定的网络界面送出数据包。
-l 前置载入:设置在送出要求信息之前,先行发出的数据包。
-p 范本样式:设置填满数据包的范本样式。
-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
-t 存活数值:设置存活数值TTL的大小。

使用示例:

ssh命令

用于远程登录上Linux主机:

ssh [-l login_name] [-p port] [user@]hostname

使用示例:

scp命令

secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的:

scp [参数] [原路径] [目标路径]

-1 强制scp命令使用协议ssh1 
-2 强制scp命令使用协议ssh2 
-4 强制scp命令只使用IPv4寻址 
-6 强制scp命令只使用IPv6寻址 
-B 使用批处理模式(传输过程中不询问传输口令或短语) 
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能) 
-p 保留原文件的修改时间,访问时间和访问权限。 
-q 不显示传输进度条。 
-r 递归复制整个目录。 
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。 
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。 
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。 
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。 
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。 
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式, 
-P port 注意是大写的P, port是指定数据传输用到的端口号 
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

使用示例:

telnet命令

用来远程登录操作:

 telnet[参数][主机]

-8 允许使用8位字符资料,包括输入与输出。
-a 尝试自动登入远端系统。
-b<主机别名> 使用别名指定远端主机名称。
-c 不读取用户专属目录里的.telnetrc文件。
-d 启动排错模式。
-e<脱离字符> 设置脱离字符。
-E 滤除脱离字符。
-f 此参数的效果和指定"-F"参数相同。
-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
-k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
-K 不自动登入远端主机。
-l<用户名称> 指定要登入远端主机的用户名称。
-L 允许输出8位字符资料。
-n<记录文件> 指定文件记录相关信息。
-r 使用类似rlogin指令的用户界面。
-S<服务类型> 设置telnet连线所需的IP TOS信息。
-x 假设主机有支持数据加密的功能,就使用它。
-X<认证形态> 关闭指定的认证形态。

使用示例:

wget命令

wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

命令语法

wget【选项】 【url】 

命令选项

启动参数:
-V, –version 显示wget的版本后退出
-h, –help 打印语法帮助
-b, –background 启动后转入后台执行
-e, –execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc

记录和输入文件参数:
-o, –output-file=FILE 把记录写到FILE文件中
-a, –append-output=FILE 把记录追加到FILE文件中
-d, –debug 打印调试输出
-q, –quiet 安静模式(没有输出)
-v, –verbose 冗长模式(这是缺省设置)
-nv, –non-verbose 关掉冗长模式,但不是安静模式
-i, –input-file=FILE 下载在FILE文件中出现的URLs
-F, –force-html 把输入文件当作HTML格式文件对待
-B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–sslcertfile=FILE 可选客户端证书
–sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–egd-file=FILE 指定EGD socket的文件名

下载参数:
–bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O –output-document=FILE 把文档写到FILE文件中
-nc, –no-clobber 不要覆盖存在的文件或使用.#前缀
-c, –continue 接着下载没下载完的文件
–progress=TYPE 设定进程条标记
-N, –timestamping 不要重新下载文件除非比本地文件新
-S, –server-response 打印服务器的回应
–spider 不下载任何东西
-T, –timeout=SECONDS 设定响应超时的秒数
-w, –wait=SECONDS 两次尝试之间间隔SECONDS秒
–waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –proxy=on/off 打开或关闭代理
-Q, –quota=NUMBER 设置下载的容量限制
–limit-rate=RATE 限定下载输率

目录参数:
-nd –no-directories 不创建目录
-x, –force-directories 强制创建目录
-nH, –no-host-directories 不创建主机目录
-P, –directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER层远程目录

HTTP 选项参数:
–http-user=USER 设定HTTP用户名为 USER.
–http-passwd=PASS 设定http密码为 PASS
-C, –cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许)
-E, –html-extension 将所有text/html文档以.html扩展名保存
–ignore-length 忽略 `Content-Length’头域
–header=STRING 在headers中插入字符串 STRING
–proxy-user=USER 设定代理的用户名为 USER
–proxy-passwd=PASS 设定代理的密码为 PASS
–referer=URL 在HTTP请求中包含 `Referer: URL’头
-s, –save-headers 保存HTTP头到文件
-U, –user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION
–no-http-keep-alive 关闭 HTTP活动链接 (永远链接)
–cookies=off 不使用 cookies
–load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中

FTP 选项参数:
-nr, –dont-remove-listing 不移走 `.listing’文件
-g, –glob=on/off 打开或关闭文件名的 globbing机制
–passive-ftp 使用被动传输模式 (缺省值).
–active-ftp 使用主动传输模式
–retr-symlinks 在递归的时候,将链接指向文件(而不是目录)

递归下载参数:
-r, –recursive 递归下载--慎用!
-l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷)
–delete-after 在现在完毕后局部删除文件
-k, –convert-links 转换非相对链接为相对链接
-K, –backup-converted 在转换文件X之前,将之备份为 X.orig
-m, –mirror 等价于 -r -N -l inf -nr
-p, –page-requisites 下载显示HTML文件的所有图片

递归下载中的包含和不包含(accept/reject):
-A, –accept=LIST 分号分隔的被接受扩展名的列表
-R, –reject=LIST 分号分隔的不被接受的扩展名的列表
-D, –domains=LIST 分号分隔的被接受域的列表
–exclude-domains=LIST 分号分隔的不被接受的域的列表
–follow-ftp 跟踪HTML文档中的FTP链接
–follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, –ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, –span-hosts 当递归时转到外部主机
-L, –relative 仅仅跟踪相对链接
-I, –include-directories=LIST 允许目录的列表
-X, –exclude-directories=LIST 不被包含目录的列表
-np, –no-parent 不要追溯到父目录
wget -S –spider url 不下载只显示过程

命令示例

使用wget下载单个文件 test.txt 

wget http://www.liuzgg.com/test.txt
#下载的 test.txt 文件保存在当前目录下面,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。

下载单个文件 test.txt ,并且重命名为 test1.txt 

[root@lzg ~]# wget -O text1.txt http://www.liuzgg.com/test.txt

使用wget限速下载 

[root@lzg ~]# wget --limit-rate=500k http://www.liuzgg.com/test.txt

使用wget断点续传

[root@lzg ~]# wget -c http://www.liuzgg.com/test.txt
#使用wget -c重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。

使用wget后台下载

[root@lzg ~]# wget -b http://www.liuzgg.com/test.txt
对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载,可以使用以下命令来察看下载进度:
[root@lzg ~]# tail -f wget-log

ifconfig命令

用来查看和配置网络设备。当网络环境发生改变时可通过此命令对网络进行相应的配置:

ifconfig [网络设备] [参数]

up 启动指定网络设备/网卡。
down 关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除。
arp 设置指定网卡是否支持ARP协议。
-promisc 设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包
-allmulti 设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包
-a 显示全部接口信息
-s 显示摘要信息(类似于 netstat -i)
add 给指定网卡配置IPv6地址
del 删除指定网卡的IPv6地址
<硬件地址> 配置网卡最大的传输单元
mtu<字节数> 设置网卡的最大传输单元 (bytes)
netmask<子网掩码> 设置网卡的子网掩码。掩码可以是有前缀0x的32位十六进制数,也可以是用点分开的4个十进制数。如果不打算将网络分成子网,可以不管这一选项;如果要使用子网,那么请记住,网络中每一个系统必须有相同子网掩码。
tunel 建立隧道
dstaddr 设定一个远端地址,建立点对点通信
-broadcast<地址> 为指定网卡设置广播协议
-pointtopoint<地址> 为网卡设置点对点通讯协议
multicast 为网卡设置组播标志
address 为网卡设置IPv4地址
txqueuelen<长度> 为网卡设置传输列队的长度

使用示例:

route

route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]] 
-c  # 显示更多信息
-n  # 不解析名字
-v  # 显示详细的处理信息
-F  # 显示发送信息
-C # 显示路由缓存
-f  # 清除所有网关入口的路由表。 
-p # 与 add 命令一起使用时使路由具有永久性。

使用示例:

搜索文件

whereis命令

whereis命令用来定位命令的二进制程序、源代码文件和man手册页等相关文件的路径。

命令语法

whereis【选项】 【命令名】 

命令选项

-b:查找二进制程序或命令
-B:从指定目录下 查找二进制程序或命令
-m:查找man手册文件
-M:从指定目录下 查找man手册文件
-s:只查找源代码文件
-S:从指定目录下 查找源代码文件
-u:搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-l:输出有效查找路径

命令示例

查找 ifconfig 相关路径

[root@localhost ~]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

-b:查找二进制程序或命令

[root@localhost ~]# whereis mv
mv: /usr/bin/mv /usr/share/man/man1/mv.1.gz
[root@localhost ~]# whereis -b mv
mv: /usr/bin/mv
[root@localhost ~]# whereis -m mv
mv: /usr/share/man/man1/mv.1.gz

locate命令

locate 命令用来查找文件或目录。locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。值得注意的是:版本不同,会有所不同。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

整个locate工作其实是由四部分组成的:

  • /usr/bin/updatedb 主要用来更新数据库,通过crontab自动完成的
  • /usr/bin/locate 查询文件位置
  • /etc/updatedb.conf   updatedb的配置文件
  • /var/lib/mlocate/mlocate.db 存放文件信息的文件

命令语法

locate【选项】 【路径】【文件或目录】 

命令选项

-b, --basename         仅匹配路径名的基名称
-c, --count            只输出找到的数量
-d, --database DBPATH  使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-e, --existing         仅打印当前现有文件的条目  
-L, --follow           当文件存在时跟随蔓延的符号链接 (默认)  
-h, --help             显示帮助
-i, --ignore-case      忽略大小写
-l, --limit, -n LIMIT  LIMIT 限制为 LIMIT项目的输出 (或 计数)
-m, --mmap             忽略向后兼容性
-P, --nofollow, -H     当检查文件时不跟随蔓延的符号
-0, --null             null 输出时以 NUL 分隔项目
-S, --statistics       不搜索项目,显示有关每个已用数据库的统计信息
-q, --quiet            安静模式,不会显示任何错误讯息
-r, --regexp REGEXP    使用基本正则表达式
--regex            使用扩展正则表达式
-s, --stdio            忽略向后兼容性
-V, --version          显示版本信息
-w, --wholename        匹配整个路径名(默认)

安装locate命令

[root@lzg ~]# yum search locate
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
=================================================== N/S matched: locate ===================================================
mlocate.x86_64 : An utility for finding files by name
perl-File-ShareDir.noarch : Locate per-dist and per-module shared files
which.x86_64 : Displays where a particular program in your path is located

  Name and summary matches only, use "search all" for everything.
[root@lzg ~]# yum install -y mlocate14 
[root@lzg ~]# updatedb

命令示例

搜索/etc目录下所有以sh开头的文件:

[root@lzg ~]# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
[root@lzg ~]# 

搜索 /etc 目录下以k开头的文件:

[root@lzg ~]# locate /etc/k
/etc/kdump.conf
/etc/kernel
/etc/krb5.conf
/etc/krb5.conf.d
/etc/kernel/postinst.d
/etc/kernel/postinst.d/51-dracut-rescue-postinst.sh

查找和pwd相关的所有文件(包含pwd就会显示):

[root@lzg ~]# locate pwd
/etc/.pwd.lock
/usr/bin/pwd
/usr/bin/pwdx
/usr/lib/modules/3.10.0-1062.1.2.el7.x86_64/kernel/drivers/watchdog/hpwdt.ko.xz
/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/watchdog/hpwdt.ko.xz
/usr/lib64/cracklib_dict.pwd
/usr/lib64/python2.7/lib-dynload/spwdmodule.so
/usr/sbin/unix_chkpwd
/usr/share/cracklib/cracklib-small.pwd
/usr/share/cracklib/pw_dict.pwd
/usr/share/man/man1/pwd.1.gz
/usr/share/man/man1/pwdx.1.gz
/usr/share/man/man8/unix_chkpwd.8.gz

-c 只输出找到的数量:

[root@lzg ~]# locate -c /etc/sh          #查找/etc目录下sh开头的文件数量
3
[root@lzg ~]# locate -c /etc/k
6
[root@lzg ~]# 

查看updatedb的配置文件/etc/updatedb.conf:

[root@lzg ~]# cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph"
[root@lzg ~]#

说明:

  • 第一行PRUNE_BIND_MOUNTS="yes"的意思是:是否进行限制搜索。
  • 第二行是排除检索的文件系统类型,即列出的文件系统类型不进行检索。
  • 第三行表示对哪些后缀的文件排除检索,也就是列在这里面的后缀的文件跳过不进行检索。不同后缀之间用空格隔开。
  • 第四行是排除检索的路径,即列出的路径下的文件和子文件夹均跳过不进行检索。updatedb之后使用locate仍然找不到想要文件,可以检查挂载的目录是否被忽略了。

which命令

which 命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录, which 命令会在环境变量$PATH 设置的目录里查找符合条件的文件。也就是说,使用which命令就可以看到某个系统指令是否存在,以及执行的命令位置。

命令语法

which【选项】 【命令名】 

命令选项

-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
-p 与-n参数相同,但此处的<文件名长度>包括了文件的路径
-w 指定输出时栏位的宽度
-V 显示版本信息

命令示例

[root@localhost ~]# which grep
alias grep='grep --color=auto'
/usr/bin/grep
[root@localhost ~]# which touch
/usr/bin/touch
[root@localhost ~]#

其他

grep命令

grep是“global search regular expression and print out the line”的简称,意思是全面搜索正则表达式,并将其打印出来。这个命令可以结合正则表达式使用,它也是linux使用最为广泛的命令。

grep命令的选项用于对搜索过程的补充,而其命令的模式十分灵活,可以是变量、字符串、正则表达式。需要注意的是:一当模式中包含了空格,务必要用双引号将其引起来。

linux系统支持三种形式的grep命令,大儿子就是grep,标准,模仿的代表。二儿子兴趣爱好多-egrep,简称扩展grep命令,其实和grep -E等价,支持基本和扩展的正则表达式。小儿子跑的最快-fgrep,简称快速grep命令,其实和grep -F等价,不支持正则表达式,按照字符串表面意思进行匹配。

命令语法

grep【选项】 【参数】

命令选项

-a 不要忽略二进制数据。
-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-B<显示列数> 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-C<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前和之后的内容。
-c 只输出匹配行的数量
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e 使用多个选项的匹配,逻辑or关系
-E 使用扩展正则表达式,而不是基本正则表达式,在使用 -E 选项时,相当于使用egrep
-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F 将范本样式视为固定字符串的列表。
-G 将范本样式视为普通的表示法来使用。
-h 在显示符合范本样式的那一列之前,不显示该列所属的文件名称。
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i 忽略字符大小写的差别。
-l 列出文件内容符合指定的范本样式的文件名称。
-L 列出文件内容不符合指定的范本样式的文件名称。
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-q 不显示任何信息。
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-s 不显示错误信息。
-v 显示不包含匹配文本的所有行
-w 按单词搜索
-x 只显示全列符合的列。
-y 此参数效果跟“-i”相同。
-o 只输出文件中匹配到的部分。一般与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

grep的规则表达式(正则一定要转义)

^ #锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
. #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* #一起用代表任意字符。
[] #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] #匹配一个不在指定范围内的字符
\(..\) #标记匹配字符,如'\(love\)',love被标记为1。
\< #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
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],
\W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b #单词锁定符,如: '\bgrep\b'只匹配grep。

命令示例

支持多文件查询,并支持使用通配符

[root@lzg ~]# ls
file1.txt  file2.txt  file3.txt  file4.txt  file5.txt
[root@lzg ~]# grep "abc" file1.txt file2.txt       #在file1.txt和file2.txt文件中查找有abc字符的行
file1.txt:abc
file1.txt:abcter
file1.txt:dsfdsabc
file2.txt:abcdf
file2.txt:ergregabc
file2.txt:efabcde
[root@lzg ~]# grep "abc" file*      #使用通配符,所有file开头的文件中查找有abc字符的行
file1.txt:abc
file1.txt:abcter
file1.txt:dsfdsabc
file2.txt:abcdf
file2.txt:ergregabc
file2.txt:efabcde
file3.txt:dsfdabc
file3.txt:y6uytabcdf
file3.txt:abcrg
file4.txt:abc
file4.txt:sdfdabcd

-c 只输出匹配行的数量

[root@lzg ~]# grep -c "abc" file*
file1.txt:3
file2.txt:3
file3.txt:3
file4.txt:2
file5.txt:0

-n 在显示符合范本样式的那一列之前,标示出该列的行号

[root@lzg ~]# grep -n "abc" file*
file1.txt:3:abc
file1.txt:6:abcter
file1.txt:7:dsfdsabc
file2.txt:1:abcdf
file2.txt:2:ergregabc
file2.txt:3:efabcde
file3.txt:1:dsfdabc
file3.txt:2:y6uytabcdf
file3.txt:3:abcrg
file4.txt:3:abc
file4.txt:4:sdfdabcd

-v 显示不包含匹配文本的所有行

[root@lzg ~]# grep -v "abc" file*
file1.txt:dsfds
file1.txt:ewfew
file1.txt:dxfs
file1.txt:ger
file2.txt:fgfdgr
file4.txt:dsfds
file4.txt:fdger

-h 在显示符合范本样式的那一列之前,不显示该列所属的文件名称。多文件查找时,不显示文件名

[root@lzg ~]# grep -h "abc" file*
abc
abcter
dsfdsabc
abcdf
ergregabc
efabcde
dsfdabc
y6uytabcdf
abcrg
abc
sdfdabcd

-l 列出文件内容符合指定的范本样式的文件名称。只列出符合匹配的文件名,不显示内容

[root@lzg ~]# grep -l "abc" file*
file1.txt
file2.txt
file3.txt
file4.txt

-w 按单词搜索

[root@lzg ~]# grep -w "abc" file*
file1.txt:abc
file4.txt:abc

-x 只显示全列符合的列。匹配整行,文件中的整行与模式匹配时,才打印出来

[root@lzg ~]# grep -x "abc" file*
file1.txt:abc
file4.txt:abc

查找文件中的空行和非空行,并统计数量

[root@lzg ~]# grep -c "^$" file*         #查找空行
file1.txt:0
file2.txt:0
file3.txt:0
file4.txt:0
file5.txt:0
[root@lzg ~]# grep -c "^[^$]" file*     #查找非空行
file1.txt:7
file2.txt:4
file3.txt:3
file4.txt:4
file5.txt:0

-o 只输出文件中匹配到的部分。一般与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

[root@lzg ~]# grep -o "abc" file1.txt
abc
abc
abc
[root@lzg ~]# grep -bo "abc" file1.txt
12:abc
25:abc
37:abc

选项 -e 指定多个匹配样式

[root@lzg ~]# echo this is a text line | grep -e "is" -e "line" -o
is
is
line

-i 忽略字符大小写

[root@lzg ~]# echo Hello World | grep -i "WORLD"
Hello World

-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。

[root@lzg ~]# cat tt.txt 
fff
aaa
bbb
ddd
[root@lzg ~]# cat text.txt 
aaa
bbb
[root@lzg ~]# cat ff.txt 
aaa
nnn
ddd
[root@lzg ~]# grep -f tt.txt text.txt ff.txt -o
text.txt:aaa
text.txt:bbb
ff.txt:aaa
ff.txt:ddd
[root@lzg ~]# grep -ftt.txt text.txt ff.txt -o  text.txt:aaa  text.txt:bbb  ff.txt:aaa  ff.txt:ddd

打印出匹配文本之前或者之后的行

-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-B<显示列数> 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-C<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前和之后的内容。

[root@lzg ~]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@lzg ~]# seq 10 | grep "5" -A3   #之后的3行
5
6
7
8
[root@lzg ~]# seq 10 | grep "5" -B3   #之前的3行
2
3
4
5
[root@lzg ~]# seq 10 | grep "5" -C3   #之前和之后的3行
2
3
4
5
6
7
8
#如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符:[root@lzg ~]#echo -e "a\nb\nc\na\nb\nc" | grep a -A1ab--ab

-E 多条件匹配

[root@lzg ~]# cat tt.txt
fff
aaa
bbb
ddd
[root@lzg ~]# grep -E "aaa|ddd" tt.txt
aaa
ddd
[root@lzg ~]# grep -E "aaa|ddd|bbb" tt.txt
aaa
bbb
ddd

clear命令

用于清除终端屏幕上现有的文字内容,将之上滚。

date命令

date命令是显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记 。

若是不以加号作为开头,则表示要设定时间,而时间格式MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。

很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。

命令语法

date【选项】 【+输出格式】

命令选项

-d<字符串>  显示字符串所指的日期与时间。字符串前后必须加上双引号。 
-s<字符串>  根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u  显示GMT。

日期格式常用到的:

%H 小时(以00-23来表示)。 
%I 小时(以01-12来表示)。 
%K 小时(以0-23来表示)。 
%l 小时(以0-12来表示)。 
%M 分钟(以00-59来表示)。 
%P AM或PM。 
%r 时间(含时分秒,小时以12小时AM/PM来表示)。 
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。 
%S 秒(以本地的惯用法来表示)。 
%T 时间(含时分秒,小时以24小时制来表示)。 
%X 时间(以本地的惯用法来表示)。 
%Z 市区。 
%a 星期的缩写。 
%A 星期的完整名称。 

%b 月份英文名的缩写。 
%B 月份的完整英文名称。 
%c 日期与时间。只输入date指令也会显示同样的结果。 
%d 日期(以01-31来表示)。 
%D 日期(含年月日)。 
%j 该年中的第几天。 
%m 月份(以01-12来表示)。 
%U 该年中的周数。 
%w 该周的天数,0代表周日,1代表周一,异词类推。 
%x 日期(以本地的惯用法来表示)。 
%y 年份(以00-99来表示)。 
%Y 年份(以四位数来表示)。 
%n 在显示时,插入新的一行。 
%t 在显示时,插入tab。 
MM 月份(必要) 
DD 日期(必要) 
hh 小时(必要) 
mm 分钟(必要)
ss 秒(选择性) 

命令示例

-d 选项的使用

(1)输出明天日期

[root@lzg ~]# date
Tue Nov  5 10:37:37 CST 2019
[root@lzg ~]# date -d "1 day"
Wed Nov  6 10:37:44 CST 2019
[root@lzg ~]# date -d "1 day" "+%Y-%m-%d %H:%M:%S"
2019-11-06 10:37:55

 (2)输出5天后日期

[root@lzg ~]# date -d "5 day"
Sun Nov 10 10:38:34 CST 2019
[root@lzg ~]# date -d "5 day" "+%Y-%m-%d %H:%M:%S"
2019-11-10 10:38:38

(3)输出1000秒后的时间

[root@lzg ~]# date
Tue Nov  5 10:39:04 CST 2019
[root@lzg ~]# date -d "1000 second"
Tue Nov  5 10:55:54 CST 2019
[root@lzg ~]# date -d "1000 second" "+%Y-%m-%d %H:%M:%S"
2019-11-05 10:56:02

(4)输出2年后的日期

[root@lzg ~]# date
Tue Nov  5 10:40:49 CST 2019
[root@lzg ~]# date -d "2 year"
Fri Nov  5 10:40:51 CST 2021
[root@lzg ~]# date -d "2 year" "+%Y-%m-%d %H:%M:%S"
2021-11-05 10:41:00

(5)输出1天前的时间、5天前的时间、1000秒前的时间、2年前的时间

[root@lzg ~]# date -d "1 day ago" "+%Y-%m-%d %H:%M:%S"
2019-11-04 10:42:25
[root@lzg ~]# date -d "5 day ago" "+%Y-%m-%d %H:%M:%S"
2019-10-31 10:42:29
[root@lzg ~]# date -d "1000 second ago" "+%Y-%m-%d %H:%M:%S"
2019-11-05 10:26:02
[root@lzg ~]# date -d "2 year ago" "+%Y-%m-%d %H:%M:%S"
2017-11-05 10:42:57

(6)加减操作(sec、min、hour、day、weeks、month、year)

#date +%Y%m%d               #显示当前年月日 
#date -d "+1 day" +%Y%m%d   #显示前一天的日期 
#date -d "-1 day" +%Y%m%d   #显示后一天的日期 
#date -d "-1 month" +%Y%m%d #显示上一月的日期 
#date -d "+1 month" +%Y%m%d #显示下一月的日期 
#date -d "-1 year" +%Y%m%d  #显示前一年的日期 
#date -d "+1 year" +%Y%m%d  #显示下一年的日期
#date -d "+5 hour" +%Y%m%d %H:%M:%S  #显示5小时后时间
[root@lzg ~]# date -d "+5day +5hour +10min" "+%Y-%m-%d %H:%M:%S"      #5天5小时10分钟后的时间2019-11-10 16:49:34
[root@lzg ~]# date -d "-5day -5hour -10min" "+%Y-%m-%d %H:%M:%S"      #5天5小时10分钟前的时间2019-10-31 06:35:28

 (7)普通格式转换

[root@lzg ~]# date -d "20090225" "+%Y-%m-%d"
2009-02-25
[root@lzg ~]# date -d "20090225" "+%Y-%m-%d %H:%M:%S"
2009-02-25 00:00:00

(8) apache格式转换

[root@lzg ~]# date -d "Dec 9, 2010 10:00:37 AM" "+%Y-%m-%d %H:%M:%S"
2010-12-09 10:00:37

(9)格式转换加时间

[root@lzg ~]# date -d "Dec 9, 2010 10:00:37 AM 2 year" "+%Y-%m-%d %H:%M:%S"
2012-12-09 10:00:37

-s 选项的使用(设置日期和时间)

[root@lzg ~]# date
Tue Nov  5 10:44:29 CST 2019
[root@lzg ~]# date -s "2011-01-10 12:22:22"      #修改时间
Mon Jan 10 12:22:22 CST 2011
[root@lzg ~]# date
Mon Jan 10 12:22:26 CST 2011
date -s          #设置时间,只有root权限才能设置,其他只能查看
date -s 20120523 #设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 #设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" #这样可以设置全部时间
date -s "01:01:01 20120523"   #这样可以设置全部时间
date -s "2012-05-23 01:01:01" #这样可以设置全部时间
date -s "20120523 01:01:01"   #这样可以设置全部时间

日期加描述

[root@lzg ~]# date "+Today is %Y-%m-%d %H:%M:%S"
Today is 2019-11-05 11:13:05

date运用

[root@lzg ~]# ls
1.txt
[root@lzg ~]# touch log.`date "+%Y-%m-%d_%H:%M:%S"`.txt            #``反引号,调用命令
[root@lzg ~]# ls
1.txt  log.2019-11-05_13:18:51.txt
[root@lzg ~]# touch log1.$(date "+%Y-%m-%d_%H:%M:%S").txt          #或者$(),调用命令
[root@lzg ~]# ls
1.txt  log1.2019-11-05_13:19:30.txt  log.2019-11-05_13:18:51.txt

ln命令

是为某一个文件在另外一个位置建立一个同步的链接

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

软链接:
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接

硬链接:
1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建

ln [参数][源文件或目录][目标文件或目录]

必要参数:
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程

选择参数:
-S “-S<字尾备份字符串> ”或 “--suffix=<字尾备份字符串>”
-V “-V<备份方式>”或“--version-control=<备份方式>”

使用示例:

lsof命令

#查询某个端口是否被占用
lsof -i :9501

rpm命令

rpm命令是Red-Hat Package Manager(RPM软件包管理器)的缩写。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。

概括的说,rpm命令包含了五种基本功能:安装、卸载、升级、查询和验证。

命令语法

rpm【选项】 【参数】 

命令选项

-a:查询所有的软件包
-b或-t:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合”-l”参数使用
-d:只列出文本文件,本参数需配合”-l”参数使用
-e或--erase:卸载指定软件包
-f<文件>:查询文件或命令属于哪个软件包
-h或--hash:安装软件包时列出标记
-i:显示软件包的相关信息
-i<软件包>或--install<软件包>:安装指定的套件档;
--force:强制安装软件包
--nodeps:忽略依赖关系
--test:安装测试,并不实际安装
-l:显示软件包的文件列表
-p:查询指定的rpm软件包
-q:查询软件包
-R:显示软件包的依赖关系
-s:显示文件状态,本参数需配合”-l”参数使用
-U或--upgrade:升级指定软件包
-v:显示命令执行过程
-vv:详细显示指令执行过程

常用组合命令:

-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
-e:删除包
rpm -q samba //查询程序是否安装
rpm -ivh /media/cdrom/RedHat/RPMS/samba-..-.E.i.rpm //按路径安装并显示进度
rpm -ivh --relocate /=/opt/gaim gaim-..-.fc.i.rpm //指定安装目录
rpm -ivh --test gaim-..-.fc.i.rpm    //用来检查依赖关系;并不是真正的安装;
rpm -Uvh --oldpackage gaim-..-.fc.i.rpm //新版本降级为旧版本
rpm -qa | grep httpd      #[搜索指定rpm包是否安装]--all搜索*httpd*
rpm -ql httpd         #[搜索rpm包]--list所有文件安装目录
rpm -qpi Linux-.-.i.rpm #[查看rpm包]--query--package--install package信息
rpm -qpf Linux-.-.i.rpm #[查看rpm包]--file
rpm -qpR file.rpm       #[查看包]依赖关系
rpmcpio file.rpm |cpio -div #[抽出文件]
rpm -ivh file.rpm  #[安装新的rpm]--install--verbose--hash
rpm -ivh
rpm -Uvh file.rpm #[升级一个rpm]--upgrade
rpm -e file.rpm #[删除一个rpm包]--erase

命令示例

RPM有多种基本的模式:它们是安装、查询、验证、删除等。

安装模式:rpm –i

查询模式:rpm -q

验证模式:rpm –V或 -verify

删除模式:rpm –e

1)安装一个包

rpm -ivh

2)升级一个包

rpm -Uvh

3)移走一个包

rpm -e

4)安装参数

--force 强制安装
--nodeps 忽略依赖关系,强制安装

rpm -ivh *.rpm --nodeps --force

-ivh 安装软件包

[root@lzg ~]# rpm -ivh package.rpm
#其中package.rpm是你要安装的rpm包的文件名,一般置于当前目录下。
#安装过程中可能出现下面的警告或者提示:... conflict with ...可能是要安装的包里有一些文件可能会覆盖现有的文件,
#缺省时这样的情况下是无法正确安装的可以用rpm --force 强制安装即可... is needed by ...... is not installed ...此包需要的一些依赖软件你没有安装可以用rpm --nodeps 来忽略依赖关系,
#也就是说rpm --force --nodeps可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。
[root@lzg ~]# rpm --force -ivh package.rpm
[root@lzg ~]# rpm --force --nodeps -ivh package.rpm

安装.src.rpm软件包

以.src.rpm结尾的软件包,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这类软件包有两种安装方法:

方法一:

rpm -i your-package.src.rpm
cd /usr/src/redhat/SPECS
rpmbuild -bp your-package.specs             #一个和你的软件包同名的specs文件
cd /usr/src/redhat/BUILD/your-package/      #一个和你的软件包同名的目录
./configure                                 #这一步和编译普通的源码软件一样,可以加上参数
make
make install

方法二:

rpm -i you-package.src.rpm
cd /usr/src/redhat/SPECS
前两步和方法一相同
rpmbuild -bb your-package.specs       #一个和你的软件包同名的specs文件
这时在/usr/src/redhat/RPM/i386/(根据具体包的不同,也可能是i686,noarch等等)在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。
执行rpm -i new-package.rpm即可安装完成。

-e 卸载软件包

使用命令rpm -e包名,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包proftpd-1.2.8-1,可以使用下列格式:

rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
不可以是下列格式:
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1
有时会出现一些错误或者警告:
... is needed by ...
这说明这个软件被其他软件需要,不能随便卸载,可以用rpm -e --nodeps强制卸载

列出系统中所有安装的rpm软件包

[root@lzg ~]# rpm -qa

查询某个安装包是否安装

[root@lzg ~]# rpm -qa | grep net-tools
net-tools-2.0-0.25.20131004git.el7.x86_64

获得某个安装包的全名(安装包名要全拼)或者是否安装

[root@lzg ~]# rpm -q tree
tree-1.6.0-10.el7.x86_64
[root@lzg ~]# rpm -q tre
package tre is not installed

-ql 查看rpm软件包生成的所有文件

[root@lzg ~]# rpm -ql tree

-qf 查询一个已经安装的文件属于那个安装包

[root@lzg ~]# rpm -qf /var/cache/httpd
httpd-2.4.6-90.el7.centos.x86_64
#这个可以配合which使用,which查看命令的绝对路径,根据路径查看命令所属软件包:

[root@lzg ~]# which ifconfig
/usr/sbin/ifconfig
[root@lzg ~]# rpm -qf /usr/sbin/ifconfig 
net-tools-2.0-0.25.20131004git.el7.x86_64

-qc 查看一个已安装软件的配置文件

[root@lzg ~]# rpm -qc httpd

-qd 查看一个已经安装软件的相关文档

[root@lzg ~]# rpm -qd httpd

-qR 查看一下已安装软件所依赖的软件包及文件

[root@lzg ~]# rpm -qR httpd

-qi 查看包详细信息

[root@lzg ~]# rpm -qi httpd

--text 测试安装参数,用来检查依赖关系,并不是真正的安装

[root@lzg ~]# rpm -ivh --test file.rpm

由新版本降级为旧版本,要加 --oldpackage 参数

[root@lzg ~]# rpm -Uvh --oldpackage file.rpm

为软件包指定安装目录:要加 -relocate 参数;下面的举例是把file.rpm指定安装在 /opt/file 目录中

[root@lzg ~]# rpm -ivh --relocate /=/opt/file file.rpm

yum命令

yum是Yellowdog update Modified的简称。yum的宗旨是自动化的升级、安装/移除rpm安装包(也就是说yum这个命令它的操作对象是RPM包),收集rmp的相关信息,检查依赖性,并提示用户解决。yum的关键之处是要有可靠的repository,顾名思义这就是软件的仓库,它可以是http或者ftp站点,也可以是本地的软件池,但是必须包含rpm的header,rmp的header包括了rmp的各种信息,包括描述、功能、提供的文件、依赖性等,正是收集了这些信息,才能自动化的完成余下的任务。yum本身就是运行在linux上的自动管理安装包的系统。yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等等操作,减少了Linux 用户一直头痛的dependencies 的问题。这一点上,yum 和apt 相同。apt 原为debian 的deb 类型软件管理所使用,但是现在也能用到RedHat 门下的rpm 了。

注:linux下的RPM的全称是“RedHat Package Manager”,最早是Red Hat公司开发的,后来在CentOS、Fedora、SUSE都用它。而rpm包则是软件编译完成后按照RPM机制打包起来的一个文件,可以用rpm命令安装的一个软件安装包,它省去了Linux软件安装中编译的步骤,安装成功后软件就可以用了。RPM包的特点是:1.实现已经编译好;2.安装方便;3.安装过程中要求环境一致;4.反安装时要从最上层开始。RPM包的名称规则示例:ttpd-manual- 2.0.40-21.i386.rpm,ttp-manual是软件包的名称,2是主版本号;0是次版本号;40是次版本号;21是编译的次数;i386是适合的平台;.rpm说明这是一个RPM包。

命令语法

yum【选项】 【参数】 【软件包名】

命令选项

-h:显示帮助信息;
-y:对所有的提问都回答“yes”;
-c:指定配置文件;
-q:安静模式;
-v:详细模式;
-d:设置调试等级(0-10);
-e:设置错误等级(0-10);
-R:设置yum处理一个命令的最大等待时间;
-C:完全从缓存中运行,而不去下载或者更新任何头文件。

参数命令

install:安装rpm软件包;
update:更新rpm软件包;
check-update:检查是否有可用的更新rpm软件包;
remove:删除指定的rpm软件包;
list:显示软件包的信息;
search:检查软件包的信息;
info:显示指定的rpm软件包的描述信息和概要信息;
clean:清理yum过期的缓存;
shell:进入yum的shell提示符;
resolvedep:显示rpm软件包的依赖关系;
localinstall:安装本地的rpm软件包;
localupdate:显示本地rpm软件包进行更新;
deplist:显示rpm软件包的所有依赖关系。

命令示例

安装软件

yum install package1     #安装指定的软件包 package1
yum groupinsall group1      #安装程序组 group1,一般用双引号引起来“group1”

更新和升级

yum update         #更新软件、系统版本和内核
yum upgrade           #更新软件
yum update kernel            #升级内核
yum update package1      #更新指定软件包 package1
yum groupupdate group1      #升级指定程序组g roup1
yum upgrade package1   #升级指定软件包 package1

查找和查看

yum search ifconfg      #查找 ifconfig 软件包名称
yum provides ifconfig       #查找 ifconfig 来自于那个软件包
yum list           #查看所有已经安装和可以安装的软件包
yum list package1            #查看程序包 package1 的安装情况(是否安装),支持正则通配符的查询 ? *,yum list pack?
yum grouplist           #查看可安装的程序组
yum info package1          #查看安装包 package1 的详细信息
yum groupinfo group1       #查看程序组 group1 的详细信息
yum deplist package1       #查看程序 package1 的依赖关系
yum provides package1       #查看软件包 package1 提供哪些文件
yum check-update          #查看可更新的程序
yum list updates             #查看可更新的软件包
yum list installed       #查看已安装的软件包
yum list available           #查看可安装的软件包
yum list extras          #查看已安装,但是不在Yum Repository 仓库內的软件包
yum repolist             #查看yum仓库(可用)
yum repolist all              #查看yum所有仓库
yum repolist enabled         #查看yum可用仓库
yum repolist disabled        #查看yum不可用仓库
yum list recent        #查看仓库中新增加的软件包
yum history          #查看yum历史记录

删除软件程序

yum remove package1   #删除程序包package1
yum erase package1     #删除程序包package1
yum groupremove group1  #删除程序组group1

缓存相关

yum clean all        #清除所有缓存
yum makecache     #生成本地缓存
yum clean packages   #清除缓存目录下的 packages 软件包
yum clean headers     #清除缓存目录下的 headers
yum clean oldheaders     #清除缓存目录下旧的 headers
yum clean plugins           #清除插件缓存

uname命令

用于显示系统相关信息,比如主机名、内核版本号、硬件架构等

命令语法

uname 【选项】 

命令选项

-a 显示系统所有相关信息
-m 显示计算机硬件架构
-n 显示主机名称
-r 显示内核发行版本号
-s 显示内核名称
-v 显示内核版本
-p 显示主机处理器类型
-o 显示操作系统名称
-i 显示硬件平台

命令示例

-a 显示系统所有相关信息

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

-r 显示内核发行版本号

[root@localhost ~]# uname -r
3.10.0-693.el7.x86_64

这里补充介绍下各数字和字母代表的含义:

  • 3:表示主版本号,有结构性变化才更改
  • 10:表示次版本号,新增功能是才变化,一般奇数表示测试版,偶数表示开发版
  • 0:表示对此版本的修订次数或补丁包数
  • 693:表示编译的次数,每次编译可对少数程序优化或修改
  • el7:表示版本的特殊信息,有较大的随意性;el代表企业版Linux,pp代表测试版,fc代表fedora core,rc代表候选版本
  • x86_64:表示64位 

hwclock命令

hwclock命令是一个硬件时钟访问工具,它可以显示当前时间、设置硬件时钟的时间和设置硬件时钟为系统时间,也可设置系统时间为硬件时钟的时间。

命令语法

hwclock【选项】 

命令选项

-s:将硬件时钟同步到系统时钟
-w:将系统时钟同步到硬件时钟

命令示例

[root@localhost ~]# hwclock -w

who命令

who 命令显示当前在本地系统上的所有用户的信息。显示以下内容:登录名、tty、登录日期和时间。输入whoami 显示您的登录名、tty、您登录的日期和时间。如果用户是从一个远程机器登录的,那么该机器的主机名也会被显示出来。
who 命令也能显示自从线路活动发生以来经过的时间、命令解释器(shell)的进程标识、登录、注销、重新启动和系统时钟的变化,还能显示由初始化进程生成的其它进程。

命令语法

who【选项】 

命令选项

-a:列出所有信息,等于-b -d --login -p -r -t -T -u 选项的组合
-b:系统最近启动时间
-d:显示已死的进程
-H:输出头部的标题列
-l:显示当前系统登录进程
-m:仅显示当前终端的登陆信息。who -m 等同于 whoami。
-p:显示由 init 进程衍生的活动进程
-q:列出所有已登录用户的登录名与用户数量
-r:显示当前的运行级别
-s:只显示名称、线路和时间(默认)
-t:系统上次时钟更改
-T:用+,- 或 ? 标注用户消息状态
-u:列出已登录的用户

命令示例

-m:仅显示当前终端的登陆信息

[root@localhost ~]# who -m
root     pts/2        2019-10-15 12:43 (192.168.1.100)
[root@localhost ~]# who am i
root     pts/2        2019-10-15 12:43 (192.168.1.100)

-r:显示当前的运行级别

[root@localhost ~]# who -r
run-level 3  2019-10-08 10:52

查看当前登陆用户 whoami,等同于 id -un。 

[root@localhost ~]# whoami
root
[root@localhost ~]# id -un
root
[root@localhost ~]# 

echo命令

echo命令用于在终端设备上输出字符串或变量提取后的值,Linux系统中最常用的几个命令之一,操作简单。使用echo命令输出一段字符串到屏幕上,起到给用户提示的作用。

命令语法

echo【选项】 【字符串】 

命令选项

-n        不输出结尾的换行符
-e "\a" 发出警告音
-e "\b" 删除前面的一个字符
-e "\c" 结尾不加换行符,不换行输出,若 "\c" 后面不存在字符,作用相当于 echo -n;若 "\c" 后面存在字符,后面的字符不会输出
-e "\f" 换行,但是换行后的新行开头位置连接着上一行的行尾
-e "\n" 换行,光标移至行首
-e "\r" 表示 "\r" 后面的字符覆盖 "\r" 前面的同等长度的字符(从首字符开始覆盖)
-e "\t" 插入 tab
-e "\v" 与 "\f" 相同
-e "\\" 插入 \ 字符
-E      禁止反斜杠转移,与-e参数功能相反

命令示例

输出一段字符串

[root@localhost ~]# echo "hello world!"       #输出字符串
hello world!
[root@localhost ~]# echo '"hello world!"'     #输出字符串,带 "" 双引号
"hello world!"

输出变量提取后的值

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
[root@localhost ~]#

对内容进行转义,不让$符号的提取变量值功能生效

[root@localhost ~]# echo \$PATH1
$PATH1
[root@localhost ~]# echo \$PS1
$PS1
[root@localhost ~]# echo \$LANG
$LANG
[root@localhost ~]#

结合输出重定向符,将字符串信息导入文件中

[root@localhost ~]# echo "abcd" > a.txt     #若 a.txt 不存在,直接创建;若 a.txt 存在,直接覆盖原内容。
[root@localhost ~]# echo "abcd" >> b.txt    #若 b.txt 不存在,直接创建;若 b.txt 存在,追加到原内容最后。

使用 ` ` 反引号符(键盘左上角),可执行命令,并输出其结果到终端:

[root@localhost ~]# echo `date`
Wed Oct 16 11:29:35 CST 2019
[root@localhost ~]# echo `ifconfig`
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 183.232.197.8 netmask 255.255.255.224 broadcast 183.232.197.31 inet6 fe80::ed01:ae56:a39:82b8 prefixlen 64 scopeid 0x20<link> ether 00:50:56:82:b1:44 txqueuelen 1000 (Ethernet) RX packets 989075 bytes 379924582 (362.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 784756 bytes 82511244 (78.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 96 bytes 8320 (8.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 96 bytes 8320 (8.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]#

以上可见 ifconfig 命令执行输出结果文本格式改变,不便于读写,如果想要按照 ifconfig 命令原格式输出,可加 " " 双引号:

[root@localhost ~]# echo "`ifconfig`"
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.1
        inet6 fe80::ed01:ae56:a39:82b8  prefixlen 64  scopeid 0x20<link>
        ether 00:50:00:82:00:44  txqueuelen 1000  (Ethernet)
        RX packets 989254  bytes 379937326 (362.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 784902  bytes 82522758 (78.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 96  bytes 8320 (8.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 96  bytes 8320 (8.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost ~]#

-e “\n” 换行,光标移至行首,输出带有换行符的内容:

[root@localhost ~]# echo -e "a\nb\nc\nd"
a
b
c
d
[root@localhost ~]#

-e “\b” 删除前面的一个字符,输出信息中删除 \b 前面的字符(\b 后面还有字符才能执行):

[root@localhost ~]# echo -e "1234567\b"      #\b 后面没有字符,所以不执行
1234567
[root@localhost ~]# echo -e "123\b4567"      #\b 后面有字符,删除 \b 前面的字符3
124567
[root@localhost ~]# echo -e "123456\b7"      #\b 后面有字符,删除 \b 前面的字符6
123457
[root@localhost ~]#

如果要删除多个字符,可使用\b\b、\b\b\b,以此类推,注意 \b 的数量只能小于等于后面的字符数和前面的字符数:

[root@localhost ~]# echo -e "123456\b\b789"
1234789
[root@localhost ~]# echo -e "123456\b\b\b789"
123789
[root@localhost ~]# echo -e "123456\b\b\b\b789"     #\b 的数量大于后面的字符数,命令规则改变。
127896
[root@localhost ~]# echo -e "12\b3456\b\b789"
134789
[root@localhost ~]#

w命令

w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

命令语法

w【选项】 【用户名】 

命令选项

-h:不打印头信息
-u:当显示当前进程和cpu时间时忽略用户名
-s:使用短输出格式
-f:显示用户从哪登录
-o:老式输出
-i:显示IP地址而不是主机名(如果可能)

命令示例

[root@localhost ~]# w
 15:35:59 up 8 days,  4:43,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/2    192.168.1.100   12:50    7.00s  0.15s  0.00s w
[root@localhost ~]# 

输出说明:

  • USER:登陆用户名
  • TTY:登陆后系统分配的终端
  • FROM:远程主机名,即从哪里登陆的
  • LOGIN@:何时登陆的
  • IDLE:用户空闲时间。这是个计时器,一旦用户执行任何操作,该计时器便会被重置
  • JCPU:和该终端连接的所有进程占用时间。包括正在运行和后台作业占用时间
  • PCPU:当前进程锁占用时间
  • WHAT:当前正在运行进程的命令

备注:

  • 区别于who命令,w命令不仅可以看到登录服务器的用户信息,而且可以看到这些用户做了什么
  • who am i命令,显示出自己在系统中的用户名,登录终端,登录时间
  • whoami命令,显示自己在系统中的用户名
  • logname命令,可以显示自己初次登录到系统中的用户名,主要识别sudo前后情形
  • last命令,查看最近1个月用户登录服务器的情况
  • tty命令,来查看所连接的设备或终端

systemctl命令

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。

Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。

在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。Systemd通常是所有其它守护进程的父进程,但并非总是如此。

CentOS7之后从init完全换成了systemd的启动方式,systemd 启动服务的机制主要是通过 systemctl 的这个系统服务管理指令来处理。systemctl在用法上也囊括 service / chkconfig / setup / init 的大部分功能。

命令语法

systemctl【选项】 【服务】 

命令选项

status:查看服务状态
start:启动服务
stop:停止服务
restart:重启服务
enable:使某服务开机自启
disable:关闭某服务开机自启
list-units:列举所有运行中单元
list-unit-files:列出所有可用单元
list-unit-files --type=service:列出所有服务(包括启用和禁用)
list-unit-files --type=mount:列出所有系统挂载点
list-unit-files –type=socket:列出所有可用系统套接口
list-failed:列出所有启动失败的服务
is-enabled:查看某个服务是否开机自启
is-active:查看某个服务现在是否开启
kill:杀死某个服务
reload:重新加载某个服务配置文件
show:检查某个服务的所有配置细节
list-dependencies:获取某个服务的依赖性列表
get-default:列出当前系统的运行等级
mask:屏蔽(使其无法启动)某个服务
umask:取消屏蔽

命令示例

status 查看 firewalld 服务的状态

[root@localhost ~]# systemctl status firewalld.service

start 启动 firewalld服务

[root@localhost ~]# systemctl start firewalld.service

stop 停止 firewalld 服务

[root@localhost ~]# systemctl stop firewalld.service

restart 重启 firewalld 服务

[root@localhost ~]# systemctl restart firewalld.service

enable 开启 firewalld 服务开机自动启动

[root@localhost ~]# systemctl enable firewalld.service

disable 关闭 firewalld 服务开机自动启动

[root@localhost ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. 3 Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. 4 [root@localhost ~]#

list-units:列举所有运行中单元

[root@localhost ~]# systemctl list-units

is-enabled 查看 firewalld 服务是否开机启动

[root@localhost ~]# systemctl is-enabled firewalld.service
enabled 3 
[root@localhost ~]#

kill 杀死 firewalld 服务

systemctl kill firewalld.service

reload 重新加载 firewalld 服务

[root@localhost ~]# systemctl reload firewalld.service

is-active 查看 firewalld 服务现在是否开启

[root@localhost ~]# systemctl is-active firewalld.service
active
[root@localhost ~]# 

挂载、卸载、重新挂载、重载系统挂载点并检查系统中挂载点状态 

# systemctl start tmp.mount
# systemctl stop tmp.mount
# systemctl restart tmp.mount
# systemctl reload tmp.mount
# systemctl status tmp.mount
# systemctl is-active tmp.mount
# systemctl enable tmp.mount
# systemctl disable tmp.mount

stat命令

stat命令用于显示文件或文件系统的详细信息。stat命令的输出信息比ls命令的输出信息要更详细。

命令语法

stat 【选项】 【文件】

命令选项

-L:支持符号连接;
-f:显示文件系统状态而非文件状态;
-t:以简洁方式输出信息;

命令示例

查看文件a.txt详细信息

[root@localhost ~]# stat a.txt
  File: ‘a.txt’
  Size: 5             Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d    Inode: 201619952   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-10-16 11:24:54.530325027 +0800
Modify: 2019-10-16 11:24:51.721318638 +0800
Change: 2019-10-16 11:24:51.721318638 +0800
 Birth: -
[root@localhost ~]#

输出说明:

  • File:显示文件名
  • Size:显示文件大小
  • Blocks:文件使用的数据块总数
  • IO Block:IO块大小
  • special file:文件类型(常规文件)
  • Device:设备编号
  • Inode:Inode号
  • Links:链接数
  • Device type:设备类型
  • Access:文件的权限
  • Gid、Uid:文件所有权的Gid和Uid。
  • Context:环境

Linux下的三个时间:

  • Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
  • Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
  • Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

注:文件的三个时间最初是一样的。

curl命令 

curl命令是一个利用URL规则在shell终端命令行下工作的文件传输工具;它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。
作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征;做网页处理流程和数据检索自动化。

命令语法

curl【选项】 【url】 

命令选项

-a/--append 上传文件时,附加到目标文件
-A/--user-agent <string>  设置用户代理发送给服务器
- anyauth   可以使用“任何”身份验证方法
-b/--cookie <name=string/file> cookie字符串或文件读取位置
- basic 使用HTTP基本验证
-B/--use-ascii 使用ASCII /文本传输
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset>  断点续转
-d/--data <data>   HTTP POST方式传送数据
--data-ascii <data>  以ascii的方式post数据
--data-binary <data> 以二进制的方式post数据
--negotiate     使用HTTP身份验证
--digest        使用数字身份验证
--disable-eprt  禁止使用EPRT或LPRT
--disable-epsv  禁止使用EPSV
-D/--dump-header <file> 把header信息写入到该文件中
--egd-file <file> 为随机数据(SSL)设置EGD socket路径
--tcp-nodelay   使用TCP_NODELAY选项
-e/--referer 来源网址
-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
-f/--fail          连接失败时不显示http错误
--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 禁用缓冲输出
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-p/--proxytunnel   使用HTTP代理
--proxy-anyauth 选择任一代理身份验证方法
--proxy-basic   在代理上使用基本身份验证
--proxy-digest  在代理上使用数字身份验证
--proxy-ntlm    在代理上使用ntlm身份验证
-P/--ftp-port <address> 使用端口地址,而不是使用PASV
-q    作为第一个参数,关闭 .curlrc
-Q/--quote <cmd>文件传输前,发送命令到服务器
-r/--range <range>检索来自HTTP/1.1或FTP服务器字节范围
--range-file 读取(SSL)的随机文件
-R/--remote-time   在本地生成文件时,保留远程文件时间
--retry <num>   传输出现问题时,重试的次数
--retry-delay <seconds>  传输出现问题时,设置重试间隔时间
--retry-max-time <seconds> 传输出现问题时,设置最大重试时间
-s/--silent静音模式。不输出任何东西
-S/--show-error   显示错误
--socks4 <host[:port]> 用socks4代理给定主机和端口
--socks5 <host[:port]> 用socks5代理给定主机和端口
--stderr <file>
-t/--telnet-option <OPT=val> Telnet选项设置
--trace <file>  对指定文件进行debug
--trace-ascii <file> Like --跟踪但没有hex输出
--trace-time    跟踪/详细输出时,添加时间戳
-T/--upload-file <file> 上传文件
--url <URL>     Spet URL to work with
-u/--user <user[:password]>设置服务器的用户和密码
-U/--proxy-user <user[:password]>设置代理用户名和密码
-v/--verbose
-V/--version 显示版本信息
-w/--write-out [format]什么输出完成后
-x/--proxy <host[:port]>在给定的端口上使用HTTP代理
-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
-#/--progress-bar 用进度条显示当前的传送状态

命令示例

基础用法

[root@lzg ~]# curl http://www.baidu.com
#执行后,www.linux.com 的html就会显示在屏幕上了
#由于安装linux的时候很多时候是没有安装桌面的,也意味着没有浏览器,因此这个方法也经常用于测试一台服务器是否可以到达一个网站

保存访问的网页

使用重定向功能:

[root@lzg ~]# curl http://www.baidu.com > baidu.html

或者,-o 选项,保存网页:

[root@lzg ~]# curl -o baidu.html http://www.baidu.com

-O 选项,保存网页中的文件,后面的url要具体到某个文件,不然抓不下来:

[root@lzg ~]# curl -O https://down.360safe.com/se/360se_setup.exe

测试网页返回值:

[root@lzg ~]# curl -o /dev/null -s -w %{http_code} https://www.baidu.com
200
[root@lzg ~]# 
#在脚本中,这是很常见的测试网站是否正常的用法

cut命令

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。

命令语法

cut【选项】 【文件】 

命令选项

-b:仅显示行中指定字节范围的内容;
-c:仅显示行中指定字符范围的字符;
-f:仅显示行中指定字段的内容;
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-n:与“-b”选项连用,不分割多字节字符;

命令示例

-f:显示指定字段的内容,与-d合用:

[root@lzg ~]# cat a.txt
No Name Mark Percent
01 tom   69   91
02 jack  71   87
03 alex  68   98
[root@lzg ~]# cut -f2 -d" " a.txt
Name
tom
jack
alex

--complement 选项提取指定字段之外的列(打印除了第二列之外的列):

[root@lzg ~]# cut -f2 -d' ' --complement a.txt
No Mark Percent
01   69   91
02  71   87
03  68   98
[root@lzg ~]#

-c :仅显示行中指定范围的字符

[root@lzg ~]# cat b.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
[root@lzg ~]# cut -c2-5 b.txt            #打印第2个到第5个字符
bcde
bcde
bcde
bcde
bcde
[root@lzg ~]#

-b:仅显示行中指定字节范围的内容

[root@lzg ~]# cut -b3-6 b.txt
cdef
cdef
cdef
cdef
cdef
[root@lzg ~]#

注意:

  • -b:表示字节
  • -c:表示字符
  • -f:表示定义字段

1)N- :从第 N 个字节、字符、字段到结尾;

2)N-M :从第 N 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、段;

3)-M :从第 1 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段。

打印前5个字符

[root@lzg ~]# cat b.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
[root@lzg ~]# cut -b-5 b.txt
abcde
abcde
abcde
abcde
abcde
[root@lzg ~]#

打印从第五个字符到结尾

[root@lzg ~]# cut -b5- b.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
[root@lzg ~]#

df命令

df命令的英文全称即“Disk Free”,用于显示系统上可使用的磁盘空间。默认显示单位为KB,建议使用“df -h”的参数组合,根据磁盘容量自动变换合适的单位,更利于阅读,日常普遍用该命令可以查看磁盘被占用了多少空间、还剩多少空间等信息。

命令语法

df【选项】 【参数】 

命令选项

-a或--all:显示所有的文件系统,包括虚拟文件系统
-B:--block-size=<区块大小> 以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-l或--local:仅显示本地端的文件系统;
-k或--kilobytes:指定区块大小为1024字节,相当于--block-size=1k
-m或--megabytes:指定区块大小为1048576字节,相当于--block-size=1M
--sync:在取得磁盘使用信息前,先执行sync指令;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;

命令示例

查看包含指定文件磁盘空间使用情况

[root@lzg ~]# df /home/    #指定一个文件夹,查看该文件夹所在磁盘的使用情况
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sda2      414110148 33064 414077084   1% /home
[root@lzg ~]# df /root/test.txt    #指定一个文件
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda5      104806400 1692812 103113588   2% /
[root@lzg ~]# df /root/text.txt /home/    #指定多个文件或文件夹
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda5      104806400 1692812 103113588   2% /
/dev/sda2      414110148   33064 414077084   1% /home
[root@lzg ~]# df /root/ /home/ /etc/      #指定多个文件或文件夹
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda5      104806400 1692812 103113588   2% /
/dev/sda2      414110148   33064 414077084   1% /home
/dev/sda5      104806400 1692812 103113588   2% /
[root@lzg ~]# df                  #默认情况
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         2013532       0   2013532   0% /dev
tmpfs            2023336       0   2023336   0% /dev/shm
tmpfs            2023336   25180   1998156   2% /run
...

输出结果列说明:

  • Filesystem:代表该文件系统是哪个分区,所以列出的是设备名称。
  • 1K-blocks:说明下面的数字单位是1KB,可利用-h或-m来改变单位大小,也可以用-B来设置。
  • Used:已经使用的空间大小。
  • Available:剩余的空间大小。
  • Use%:磁盘使用率。如果使用率在90%以上时,就需要注意了,避免磁盘容量不足出现系统问题,尤其是对于文件内容增加较快的情况(如/home、/var/spool/mail等)。
  • Mounted on:磁盘挂载的目录,即该磁盘挂载到了哪个目录下面。

-a查看所有文件系统

[root@lzg ~]# df -a
Filesystem     1K-blocks    Used Available Use% Mounted on
sysfs                  0       0         0    - /sys
proc                   0       0         0    - /proc
devtmpfs         2013532       0   2013532   0% /dev
securityfs             0       0         0    - /sys/kernel/security
tmpfs            2023336       0   2023336   0% /dev/shm
devpts                 0       0         0    - /dev/pts
tmpfs            2023336   25180   1998156   2% /run
tmpfs            2023336       0   2023336   0% /sys/fs/cgroup
cgroup                 0       0         0    - /sys/fs/cgroup/systemd
pstore                 0       0         0    - /sys/fs/pstore
cgroup                 0       0         0    - /sys/fs/cgroup/blkio
cgroup                 0       0         0    - /sys/fs/cgroup/hugetlb
cgroup                 0       0         0    - /sys/fs/cgroup/devices
cgroup                 0       0         0    - /sys/fs/cgroup/cpuset
cgroup                 0       0         0    - /sys/fs/cgroup/cpu,cpuacct
cgroup                 0       0         0    - /sys/fs/cgroup/perf_event
cgroup                 0       0         0    - /sys/fs/cgroup/freezer
cgroup                 0       0         0    - /sys/fs/cgroup/net_cls,net_prio
cgroup                 0       0         0    - /sys/fs/cgroup/pids
cgroup                 0       0         0    - /sys/fs/cgroup/memory
configfs               0       0         0    - /sys/kernel/config
/dev/sda5      104806400 1692308 103114092   2% /
selinuxfs              0       0         0    - /sys/fs/selinux
debugfs                0       0         0    - /sys/kernel/debug
mqueue                 0       0         0    - /dev/mqueue
hugetlbfs              0       0         0    - /dev/hugepages
/dev/sda2      414110148   33064 414077084   1% /home
/dev/sda1        1038336  150724    887612  15% /boot
systemd-1              -       -         -    - /proc/sys/fs/binfmt_misc
binfmt_misc            0       0         0    - /proc/sys/fs/binfmt_misc
tmpfs            2023336       4   2023332   1% /tmp
tmpfs             404668       0    404668   0% /run/user/0

说明:系统里面存在很多特殊的文件系统,这些比较特殊的文件系统几乎都是在内存当中,(如/proc挂载点),所以,这些特殊文件系统都不会占据硬盘空间。

指定单位大小显示

[root@lzg ~]# df -B 1k            #1k为单位
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         2013532       0   2013532   0% /dev
tmpfs            2023336       0   2023336   0% /dev/shm
tmpfs            2023336   25180   1998156   2% /run
tmpfs            2023336       0   2023336   0% /sys/fs/cgroup
/dev/sda5      104806400 1692308 103114092   2% /
/dev/sda2      414110148   33064 414077084   1% /home
/dev/sda1        1038336  150724    887612  15% /boot
tmpfs            2023336       4   2023332   1% /tmp
tmpfs             404668       0    404668   0% /run/user/0
[root@lzg ~]# df --block-size 1m   #1M为单位
Filesystem     1M-blocks  Used Available Use% Mounted on
devtmpfs            1967     0      1967   0% /dev
tmpfs               1976     0      1976   0% /dev/shm
tmpfs               1976    25      1952   2% /run
tmpfs               1976     0      1976   0% /sys/fs/cgroup
/dev/sda5         102350  1653    100698   2% /
/dev/sda2         404405    33    404373   1% /home
/dev/sda1           1014   148       867  15% /boot
tmpfs               1976     1      1976   1% /tmp
tmpfs                396     0       396   0% /run/user/0

-h 以易读的方式显示

[root@lzg ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G   25M  2.0G   2% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sda5       100G  1.7G   99G   2% /
/dev/sda2       395G   33M  395G   1% /home
/dev/sda1      1014M  148M  867M  15% /boot
tmpfs           2.0G  4.0K  2.0G   1% /tmp
tmpfs           396M     0  396M   0% /run/user/0

以inode的数量显示

[root@lzg ~]# df -i
Filesystem        Inodes IUsed     IFree IUse% Mounted on
devtmpfs          503383   376    503007    1% /dev
tmpfs             505834     1    505833    1% /dev/shm
tmpfs             505834   475    505359    1% /run
tmpfs             505834    16    505818    1% /sys/fs/cgroup
/dev/sda5       52428800 36206  52392594    1% /
/dev/sda2      207156224    23 207156201    1% /home
/dev/sda1         524288   334    523954    1% /boot
tmpfs             505834     2    505832    1% /tmp
tmpfs             505834     1    505833    1% /run/user/0

-T 显示出每个文件系统的类型

[root@lzg ~]# df -T
Filesystem     Type     1K-blocks    Used Available Use% Mounted on
devtmpfs       devtmpfs   2013532       0   2013532   0% /dev
tmpfs          tmpfs      2023336       0   2023336   0% /dev/shm
tmpfs          tmpfs      2023336   25180   1998156   2% /run
tmpfs          tmpfs      2023336       0   2023336   0% /sys/fs/cgroup
/dev/sda5      xfs      104806400 1692308 103114092   2% /
/dev/sda2      xfs      414110148   33064 414077084   1% /home
/dev/sda1      xfs        1038336  150724    887612  15% /boot
tmpfs          tmpfs      2023336       4   2023332   1% /tmp
tmpfs          tmpfs       404668       0    404668   0% /run/user/0

seq命令

seq命令用于产生从某个数到另外一个数之间的所有整数(正数或者负数)。

命令语法

seq【选项】 【参数】 
seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数(seq 初始值 增量 终止值)

命令选项

-f:使用printf 样式的浮点格式(在不指定格式的情况下,默认格式为'%g')
-s:使用指定字符串分隔数字(默认使用:\n)
-w:在列前添加0 使得宽度相同(自动补位)

命令示例

默认输出

[root@lzg ~]# seq 5     #输出从1到5之间的整数
1
2
3
4
5
[root@lzg ~]# seq 4 8  #输出4到8之间的整数
4
5
6
7
8
[root@lzg ~]# seq 1 2 10  #从1开始增2输入,到10结束。增量可以是整数也可以是小数。
1
3
5
7
9
[root@lzg ~]# seq -3 1
-3
-2
-1
0
1
[root@lzg ~]# seq 1.1 5      #默认增量为1
1.1
2.1
3.1
4.1
[root@lzg ~]# seq 1.1 0.2 2   #指定增量为0.2
1.1
1.3
1.5
1.7
1.9

-s:使用指定字符串分隔数字(默认使用:\n)

[root@lzg ~]# seq -s "#" 5       #用#号间隔
1#2#3#4#5
[root@lzg ~]# seq -s "#" 2 5
2#3#4#5
[root@lzg ~]# seq -s "#" 1 2 10
1#3#5#7#9
[root@lzg ~]# seq -s " " 5      #用空格间隔
1 2 3 4 5
[root@lzg ~]# seq -s " " 2 5
2 3 4 5
[root@lzg ~]# seq -s " " 1 2 10
1 3 5 7 9
[root@lzg ~]# seq -s "dd" 5    #用字符串dd间隔
1dd2dd3dd4dd5
[root@lzg ~]# seq -s "dd" 2 5
2dd3dd4dd5
[root@lzg ~]# seq -s "dd" 1 2 10
1dd3dd5dd7dd9

[root@lzg ~]# seq -s "`echo -e "\t"`" 1 2 5    #使用制表符,调用命令
1    3    5

-w:在列前添加0 使得宽度相同(自动补位)

[root@lzg ~]# seq -w 8 11
08
09
10
11
[root@lzg ~]# seq -w 98 101
098
099
100
101

输出98~101之间的整数,并且要求输出数字宽度相同,不足的用空格补足

[root@lzg ~]# seq -f "%3g" 98 101      #("%3g" 这种格式表示指定“位宽”为三位,数字位数不足部分用空格补位)
 98
 99
100
101
[root@lzg ~]# seq -f "%5g" 98 101      #("%5g" 这种格式表示指定“位宽”为五位,数字位数不足部分用空格补位)可以看到前面都有空格
   98
   99
  100
  101
[root@lzg ~]# seq -f "%03g" 98 101    #("%03g" 这种格式表示指定“位宽”为三位,数字位数不足部分用0补位,通过%后添加0替代空格补足空位),等同于 -w 选项。
098
099
100
101
[root@lzg ~]# seq -f "%05g" 98 101    #("%05g" 这种格式表示指定“位宽”为五位,数字位数不足部分用0补位,通过%后添加0替代空格补足空位)
00098
00099
00100
00101

注意:其实 % 前面可以指定字符串,同样 g 的后面也可以指定字符串: 

[root@lzg ~]# seq -f "as%g" 98 101
as98
as99
as100
as101
[root@lzg ~]# seq -f "as%03g" 98 101
as098
as099
as100
as101
[root@lzg ~]# seq -f "as%02gaa" 4
as01aa
as02aa
as03aa
as04aa

利用此法可以创建文件或者目录:

[root@lzg ~]# touch $(seq -f "test%02g.txt" 4)
[root@lzg ~]# ls
test01.txt  test02.txt  test03.txt  test04.txt
[root@lzg ~]# mkdir $(seq -f "dir_%02g" 4)
[root@lzg ~]# ls
dir_01  dir_02  dir_03  dir_04  test01.txt  test02.txt  test03.txt  test04.txt

passwd命令

passwd命令用于设置用户的认证信息,包括用户密码、账户锁定、密码失效等。直接运行passwd命令修改当前的用户密码,对其他用户的密码操作需要管理员权限。

/etc/shadow 用户密码文件。

命令语法

passwd【选项】 【用户名】 

命令选项

-l:锁定用户密码
-u:解开已锁定用户密码
-e:密码立即过期,下次登陆强制修改密码
-k:保留即将过期的用户在期满后能仍能使用
-S:查询密码状态
-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-x:设置密码的有效期
-g:修改群组密码
-i:过期后停止用户账号

命令示例

[root@lzg ~]# passwd -l oldboy
锁定用户 oldboy 的密码 。
passwd: 操作成功
[root@lzg ~]# passwd -u oldboy
解锁用户 oldboy 的密码。
passwd: 操作成功
[root@lzg ~]# passwd -S oldboy
oldboy PS 2019-12-03 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@lzg ~]#

/etc/shadow各字段含义

[root@lzg ~]# cat /etc/shadow
ceshi1:!!:18183:0:99999:7:::

/etc/shadow 由':'分割成9个字段,每个字段的具体含义如下:

  • 用户登陆名   #用户的账户名称
  • 加密后的密码    #用户密码,这是加密过的口令(未设置密码为!!)
  • 最近一次密码更改时间    #从1970年到最近一次更改密码时间之间过了多少天
  • 密码最少使用几天   #密码最少使用几天才可以更改密码(0表示无限制)
  • 密码最长使用几天    #密码使用多少天需要修改密码(默认99999永不过期)
  • 密码到期前警告期限    #密码过期前多少天提醒用户更改密码(默认过期提前7天告警)
  • 密码到期后保持活动的天数   #在此期间内,用户依然可以登陆系统并更改密码,指定天数过后,账户被锁定
  • 账户到期时间    #从1970年起,账户在这个日期前可使用,到期后失效
  • 标志    #保留

使用chage更改用户密码使用情况

-d 设置最近一次更改密码时间,0下次登陆系统强制修改密码
-m 设置用户两次改变密码之间使用“最小天数”
-M 设置用户两次改变密码之前使用“最大天数”
-W 设置密码更改告警时间,将过期警告天数设为“警告天数”
-I 设置密码过期天数后,密码为失效状态
-E 设置用户过去时间,账户失效后无法登陆
-l 显示用户详细信息(各个时间段)

[root@lzg ~]# chage -m 2 oldboy
[root@lzg ~]# chage -M 10 oldboy
[root@lzg ~]# chage -W 5 oldboy

 

参考:

 

posted @   残城碎梦  阅读(168)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示