Linux-实操篇
Shell可以看作是一个命令解释器,为我们提供了交互式的文本控制的界面。我们可以通过终端控制台来输入命令,由 shell进行解释并最终交给内核执行。
1. 帮助命令
1.1 man命令
功能: 是用于查看命令、配置文件及服务的帮助信息。
一份完整的帮助信息包含以下信息:
名称 | 说明 |
---|---|
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
参数 | 说明 |
---|---|
-a | 在所有的man帮助手册中搜索 |
-d | 检查新加入的文件是否有错误 |
-f | 显示给定关键字的简短描述信息 |
-p | 指定内容时使用分页程序 |
-M | 指定man手册搜索的路径 |
-w | 显示文件所在位置 |
快捷键 | 说明 |
---|---|
q | 退出 |
Enter | 按行下翻 |
Space | 按页下翻 |
b | 上翻一页 |
/字符串 | 在手册页中查找字符串 |
参考示例
# 查看指定命令的帮助信息:
man ls
//查看指定配置文件的帮助信息
//如果即有passwd命令,又有/etc/passwd文件,则需要手动指定帮助信息的编号。编号规则:普通命令为1,函数为2,库文件为3,设备为4,配置文件为5,游戏为6,宏文件为7,系统命令为8,内核程序为9,TK指令为10。
man 5 passwd
# 找到某个命令的帮助信息的存储位置
man -w ls
# 找到某个配置文件的帮助信息的存储位置
man -w 5 passwd
1.2 help命令
一部分基础功能的系统命令是直接内嵌在shell 中的,系统加载启动之后会随着shell一起加载,常驻系统内存中。这部分命令被称为”内置(built-in)命令”﹔相应的其它命令被称为“外部命令”。
功能: 用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。
参数 | 说明 |
---|---|
lias | 别名 |
keyword | 关键字,Shell保留字 |
function | 函数,Shell函数 |
builtin | 内建命令,Shell内建命令 |
file | 文件,磁盘文件,外部命令 |
unfound | 没有找到 |
参数 | 说明 |
---|---|
-t | 判断给定参数的命令类型。如果输出 file、alias、builtin 则分别表示 外部命令、命令别名、内置命令。 |
-p | 如果给出的参数是外部命令,则显示其绝对路径。 |
-a | 显示所有可能的类型,包括别名、内置命令、函数等。 |
-f | 只返回shell函数的信息。 |
参考示例:
# 显示指定命令的所有信息
type -a ls
# 显示外部命令的绝对路径
type -p ls
# 查看命令类型
type -t ls
2. 文件目录类
2.1 pwd命令
功能: 用于显示当前工作目录的路径,即显示所在位置的绝对路径。
2.2 cd命令
功能: 用于更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前使用者的家目录。~
也表示为 home 目录 的意思, .
则是表示目前所在的目录,..
则表示目前目录位置的上一层目录。
参数 | 功能 |
---|---|
cd 绝对路径 | 切换路径 |
cd 相对路径 | 切换路径 |
cd ~或者cd | 回到自己的家目录 |
cd - | 回到上一次所在目录 |
cd … | 回到当前目录的上一级目录 |
cd -P | 跳转到实际物理路径,而非快捷方式路径 |
2.3 ls命令
功能: 列举出指定目录下的文件名称及其属性。默认不加参数的情况下,ls命令会列出当前工作目录中的文件信息。
参数 | 功能 |
---|---|
-a | 全部的文件,连同隐藏档( 开头为. 的文件) 一起列出来(常用) |
-l | 长数据串列出,包含文件的属性与权限等等数据;(常用)等价于ll |
显示说明
每行列出的信息依次是: 文件类型与权限
、链接数
、文件属主
、文件属组
、文件大小用byte来表示
、建立或最近修改的时间
、名字
2.4 mkdir命令
功能: 用来创建目录文件。
参数 | 功能 |
---|---|
-p | 递归创建多级目录 |
-m | 建立目录的同时设置目录的权限 |
-z | 设置安全上下文 |
-v | 显示目录的创建过程 |
2.5 rmdir命令
功能: 用于删除空目录文件。
参数 | 功能 |
---|---|
-p | 用递归的方式删除指定的目录路径中的所有父级目录,非空则报错 |
-v | 显示命令的详细执行过程 |
2.6 rm命令
功能: 用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。
参数 | 功能 |
---|---|
-f | 强制删除(不二次询问) |
-i | 删除前会询问用户是否操作 |
-r/R | 递归删除 |
-v | 显示指令的详细执行过程 |
2.7 cp命令
功能: 用于将一个或多个文件或目录复制到指定位置。
参数 | 功能 |
---|---|
-f | 若目标文件已存在,则会直接覆盖原文件 |
-i | 若目标文件已存在,则会询问是否覆盖 |
-p | 保留源文件或目录的所有属性 |
-r | 递归复制文件和目录 |
2.8 mv命令
功能: 用于对文件进行剪切和重命名。
参数 | 功能 |
---|---|
-i | 若存在同名文件,则向用户询问是否覆盖 |
-f | 覆盖已有文件时,不进行任何提示 |
-b | 当文件存在时,覆盖前为其创建一个备份 |
-n | 不要覆盖任何已存在的文件或目录 |
-u | 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
2.9 cat命令
功能: 用于查看文件内容。cat命令适合查看内容较少的、纯文本的文件。
参数 | 功能 |
---|---|
-n | 显示行数(空行也编号) |
-s | 显示行数(多个空行算一个编号) |
-b | 显示行数(空行不编号) |
-E | 每行结束处显示$符号 |
2.10 more命令
功能: 用于分页显示文本文件内容。
如果文本文件中的内容较多较长,使用cat命令读取后则很难看清,这时使用more命令进行分页查看就更加合适,可以把文本内容一页一页的显示在终端界面上,用户每按一次回车即向下一行,每按一次空格即向下一页,直至看完为止。
参数 | 功能 |
---|---|
-num | 指定每屏显示的行数 |
空白键(space) | 代表向下翻一页 |
Enter | 代表向下翻『一行』 |
q | 代表立刻离开more ,不再显示该文件内容。 |
Ctrl+F | 向下滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
2.11 less命令
功能: 用来分屏查看文件内容。
它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
参数 | 功能 |
---|---|
空白键 | 向下翻动一页; |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页 |
/字串 | 向下搜寻『字串』的功能;n:向下查找;N:向上查找 |
?字串 | 向上搜寻『字串』的功能;n:向上查找;N:向下查找 |
q | 离开less 这个程序 |
-N | 显示每行的行号 |
2.12 echo命令
功能: 输出字符串或提取后的变量值
echo是用于在终端设备上输出指定字符串或变量提取后值的命令。能够给用户一些简单的提醒信息,也可以将输出的指定字符串内容同管道符一起传递给后续命令作为标准输入信息再来进行二次处理,又或者同输出重定向符一起操作,将信息直接写入到文件中。
如需提取变量值,需在变量名称前加入$
符号做提取,变量名称一般均为大写形式。
控制字符 | 功能 |
---|---|
\ | 输出\本身 |
\n | 换行符 |
\t | 制表符,也就是Tab 键 |
2.13 head命令
功能: 显示文件开头的内容,默认为前10行。
参数 | 功能 |
---|---|
-n <数字> | 定义显示行数 |
-c <数字> | 指定显示头部内容的字符数 |
-v | 总是显示文件名的头信息 |
-q | 不显示文件名的头信息 |
2.14 tail命令
功能: 用于查看文件尾部内容,默认为后10行。如果指定了多个文件,则会在显示的每个文件内容前面加上文件名来加以区分。
参数 | 功能 |
---|---|
-c <数字> | 输出文件尾部的N(N为整数)个字节内容 |
-n <数字> | 输出文件的尾部N(N位数字)行内容 |
-f | 持续显示文件最新追加的内容 |
–retry | 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。 |
–pid=<进程号> | 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令 |
2.15 ln命令
功能: 用于为某个文件在另外一个位置建立同步的链接。
Linux系统中的链接文件有两种形式,一种是硬链接(hard link),另一种是软链接(symbolic link)。
软连接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后,软连接文件也将无法使用,而硬链接则是通过将文件的 inode 属性块进行了复制 ,因此把原始文件移动或删除后,硬链接文件依然可以使用。
基本语法: ln -s [原文件或目录] [软链接名
查询:通过 ll
就可以查看,列表属性第 1 位是 l
,尾部会有位置指向。
注意!!!
删除软链接使用 rm -rf 软链接名,而不是 rm -rf 软链接名/
如果使用 rm -rf 软链接名/ 删除,会把软链接对应的真实目录下内容删掉
2.16 > 输出重定向和 >> 追加
基本语法:
ls -l > 文件(功能描述:列表的内容写入文件a.txt 中(覆盖写))
ls -al >> 文件(功能描述:列表的内容追加到文件aa.txt 的末尾)
cat 文件1 > 文件2 (功能描述:将文件1 的内容覆盖到文件2)
echo “内容” >> 文件
2.17 history命令
功能: 显示与管理历史命令记录。
Linux系统默认会记录用户所执行过的所有命令,可以使用history命令查阅它们,也可以对其记录进行修改和删除操作。
参数 | 功能 |
---|---|
-a | 写入命令记录 |
-c | 清空命令记录 |
-d | 删除指定序号的命令记录 |
-n | 读取命令记录 |
3. 时间日期类
3.1 date命令
功能: 用来显示或设定系统的日期与时间。
基本语法:
date (功能描述:显示当前时间)
date +%Y (功能描述:显示当前年份)
date +%m (功能描述:显示当前月份)
date +%d (功能描述:显示当前是哪一天)
date "+%Y-%m-%d %H:%M:%S" (功能描述:显示年月日时分秒)
参数 | 功能 |
---|---|
-d | 通过字符串显示时间格式,字符串不能是’now’ |
-s | 根据字符串设置系统时间 |
-u | 显示目前的格林威治时间 |
-r | 显示文件的上次修改时间 |
-
若是不以加号作为开头,则表示要设定时间,而时间格式为
MMDDhhmm[[CC]YY][ss]
,其中MM
为月份,DD
为日,hh
为小时,mm
为分钟,CC
为年份前两位数字,YY
为年份后两位数字,ss
为秒数。 -
当您不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入
-
符号,比如说date '+%-H:%-M:%-S'
会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。 -
当您以 root 身份更改了系统时间之后,请记得以
clock -w
来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续保持最新的正确值。
时间加减操作
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 -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" # 这样可以设置全部时间
3.2 cal命令
功能: 显示日历
基本语法: cal [参数]
参数 | 功能 |
---|---|
-l | 单月分输出日历 |
-3 | 显示最近三个月的日历 |
-s | 将星期天作为月的第一天 |
-m | 将星期一作为月的第一天 |
-j | 显示在当年中的第几天(儒略日) |
-y | 显示当年的日历 |
4. 用户管理命令
4.1 useradd命令
功能: 创建并设置用户信息。
-
使用useradd命令可以自动的完成创建用户的信息、基本组、家目录等工作,并在创建的过程中对用户初始信息进行定制。
-
已创建的用户则需使用chmod命令修改账户信息,passwd命令修改密码信息。
基本语法
useradd 用户名 #功能描述:添加新用户
useradd -g 组名用户名 #功能描述:添加新用户到某个组
4.2 passwd命令
功能: 修改用户的密码值。
passwd命令来自于英文单词password的缩写。同时也可以对用户进行锁定等操作,但需要管理员身份才可以执行。
基本语法: passwd 用户名(功能描述:设置用户密码)
4.3 su命令
功能: 切换用户身份。
管理员切换至任意用户身份而无需密码验证,而普通用户切换至任意用户身份均需密码验证。另外添加单个减号(-)参数为完全的身份变更,不保留任何之前用户的环境变量信息。
基本语法
su 用户名称(功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称(功能描述:切换到用户并获得该用户的环境变量及执行权限)
4.4 id命令
功能: 显示用户与用户组信息。
UID是指用户身份的唯一识别号码,相当于人类社会的身份证号码,而GID则指用户组的唯一识别号码,用户仅有一个基本组,但可以有多个扩展组。
基本语法: id 用户名
4.5 who命令
功能: 用于显示当前登录用户信息,包含登录的用户名、终端、日期时间、进程等信息,帮助运维人员了解当前系统的登入用户情况。
基本语法
whoami (功能描述:显示自身用户名称)
who am i (功能描述:显示登录用户的用户名以及登陆时间)
参数 | 功能 |
---|---|
-a | 全面信息 |
-b | 系统最近启动时间 |
-d | 死掉的进程 |
-l | 系统登录进程 |
-H | 带有列标题打印用户名,终端和时间 |
-t | 系统上次锁定时间 |
-u | 已登录用户列表 |
4.6 userdel命令
功能: 删除用户账户。
Linux系统中一切都是文件,用户信息被保存到了
/etc/passwd
、/etc/shadow
以及/etc/group
文件中,因此使用userdel
命令实际就是帮助我们删除了指定用户在上述三个文件中的对应信息。
基本语法
userdel 用户名(功能描述:删除用户但保存用户主目录)
userdel -r 用户名(功能描述:用户和用户主目录,都删除)
参数 | 功能 |
---|---|
-f | 强制删除用户账号 |
-r | 删除用户主目录及其中的任何文件 |
4.7 sudo命令
功能: 授权普通用户执行管理员命令。
使用sudo服务可以授权某个指定的用户去执行某些指定的命令,在满足工作需求的前提下尽可能少的放权,保证服务器的安全。
配置sudo服务可以直接编辑配置文件
/etc/sudoers
,亦可以执行visudo
命令进行设置,一切妥当后普通用户便能够使用sudo
命令进行操作了。
参数 | 功能 |
---|---|
-v | 本次需要验证当前用户的密码 |
-k | 下次强制验证当前用户的密码 |
-b | 将要执行的指令放在后台执行 |
-p | 更改需要密码验证时的提示语 |
-s | 指定默认调用的SHELL解释器 |
4.8 usermod命令
功能: 修改用户账号信息。
基本语法: usermod -g 用户组用户名
参数 | 功能 |
---|---|
-c<备注> | 修改用户账号的备注文字 |
-d<登入目录> | 修改用户登入时的家目录 |
-e<有效期限> | 修改账号的有效期限 |
-f<缓冲天数> | 修改在密码过期后多少天即关闭该账号 |
-g<群组> | 修改用户所属的群组 |
-G<群组> | 修改用户所属的附加群组 |
-l<账号名称> | 修改用户账号名称 |
-L | 锁定用户密码,使密码无效 |
-s | 修改用户登入后所使用的shell |
-u | 修改用户ID |
-U | 解除密码锁定 |
4.9 cat /etc/passwd
功能: 查看创建了哪些用户
5. 用户组管理命令
5.1 groupadd命令
功能: 创建新的用户组。
每个用户在创建时都有一个与其同名的基本组,后期可以使用groupadd命令创建出新的用户组信息,让多个用户加入到指定的扩展组中。
基本语法: groupadd 组名
参数 | 功能 |
---|---|
-g | 指定新建工作组的id |
-r | 创建系统工作组 |
5.2 groupdel命令
功能: 删除用户组。
-
groupdel
命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group
和/ect/gshadow
。 -
userdel
修改系统账户文件,删除与GROUP
相关的所有项目。给出的组名必须存在。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
基本语法: groupdel 组名
5.3 groupmod命令
功能: 更改群组识别码或名称。
用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议先删除旧的,再建立新的。
基本语法: groupmod -n 新组名 老组名
5.4 cat /etc/group
功能: 查看创建了哪些组
6. 文件权限类
6.1 文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用ll
或者ls -l
命令来显示一个文件的属性以及文件所属的用户和组。
-
从左到右的10 个字符表示
接下来的字符中,以三个为一组,且均为
rwx
的三个参数的组合。其中,r
代表可读(read)、w
代表可写(write)、x
代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号-
而已。-
第 0 位确定文件类型
d
:目录
-
:文件
l
:链接文档(link file)
b
:装置文件里面的可供储存的接口设备(可随机存取装置)
c
:则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置) -
第1 - 3位确定属主(该文件的所有者)拥有该文件的权限
-
第4 - 6位确定属组(所有者的同组用户)拥有该文件的权限
-
第7 - 9位确定其他用户拥有该文件的权限
-
第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限
-
第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限
-
第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限
-
-
rwx 作用于文件
[r]
代表可读(read):可以读取,查看[w]
代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件[x]
代表可执行(execute):可以被系统执行 -
rwx 作用于目录
[r]
代表可读(read):可以读取,ls查看目录内容[w]
代表可写(write):可以修改,目录内创建+删除+重命名目录[x]
代表可执行(execute):可以进入该目录
如果查看到是文件:链接数指的是硬链接个数。
如果查看的是文件夹:链接数指的是子文件夹个数。
6.2 chmod命令
功能: 改变文件或目录权限。
默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己文件的权限属性。
设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件建议加入
-R
参数进行递归操作,意味着不仅对于目录本身,也对目录内的子文件/目录都进行新权限的设定。
-
Linux/Unix 的文件调用权限分为三级:
文件所有者(Owner)
、用户组(Group)
、其它用户(Other Users)
。
-
只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。
基本语法: chmod [ {ugoa} {+-=} {rwx} ] 文件或目录
基本语法: chmod [ mode=421 ] 文件或目录
u
表示该文件的拥有者,g
表示与该文件的拥有者属于同一个群体(group)者,o
表示其他以外的人,a
表示这三者皆是。
+
表示增加权限、-
表示取消权限、=
表示唯一设定权限。
r
表示可读取,w
表示可写入,x
表示可执行,X
表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
参数 | 功能 |
---|---|
-c | 若该文件权限确实已经更改,才显示其更改动作 |
-f | 若该文件权限无法被更改也不显示错误讯息 |
-v | 显示权限变更的详细资料 |
-R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) |
-
chmod命令可以使用八进制数来指定权限。
-
文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。
-
文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。
# | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | r w x | 111 |
6 | 读 + 写 | r w - | 110 |
5 | 读 + 执行 | r - x | 101 |
4 | 只读 | r - - | 100 |
3 | 写 + 执行 | - w x | 011 |
2 | 只写 | - w - | 010 |
1 | 只执行 | - - x | 001 |
0 | 无 | - - - | 000 |
765 解释:
- 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
- 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
- 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。
参考示例:
# 设定某个文件的权限为775
chmod 775 anaconda-ks.cfg
# 设定某个文件让任何人都可以读取
chmod a+r anaconda-ks.cfg
# 设定某个目录及其内子文件任何人都可以读取和读取
chmod -R a+r Documents
# 设定某个二进制命令文件上新增SUID特殊权限位
chmod u+s /sbin/reboot
# 将文件 file1.txt 设为所有人皆可读取
chmod ugo+r file1.txt
# 将文件 file1.txt 设为所有人皆可读取
chmod a+r file1.txt
# 将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w file1.txt file2.txt
# 为 ex1.py 文件拥有者增加可执行权限
chmod u+x ex1.py
# 将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *
# 此外chmod也可以用数字来表示权限如
chmod 777 file
6.3 chown命令
功能: 改变文件或目录的用户和用户组信息。
管理员可以改变一切文件的所属信息,而普通用户只能改变自己文件的所属信息。
基本语法: chown [参数] 所属主:所属组 文件
参数 | 功能 |
---|---|
-R | 对目前目录下的所有文件与目录进行相同的变更 |
-c | 显示所属信息变更信息 |
-f | 若该文件拥有者无法被更改也不要显示错误 |
-h | 只对于链接文件进行变更,而非真正指向的文件 |
-v | 显示拥有者变更的详细资料 |
参考示例:
# 改变指定文件的所属主与所属组
chown root:root /etc/fstab
# 改变指定文件的所属主与所属组,并显示过程
chown -c linuxprobe:linuxprobe /etc/fstab
# 改变指定目录及其内所有子文件的所属主与所属组
chown -R root:root /etc
# 把 /var/run/httpd.pid 的所有者设置 root
chown root /var/run/httpd.pid
# 将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup
chown runoob:runoobgroup file1.txt
# 将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup
chown -R runoob:runoobgroup *
# 把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者
chown :512 /home/runoob
6.4 chgrp命令
功能: 变更文件或目录的所属群组。
基本语法: chgrp [最终用户组] [文件或目录]
参数 | 功能 |
---|---|
-c | 效果类似”-v”参数,但仅回报更改的部分 |
-f | 不显示错误信息 |
-h | 对符号连接的文件作修改,而不更动其他任何相关文件 |
-R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-v | 显示指令执行过程 |
–reference | 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同 |
参考示例:
# 改变文件的群组属性
chgrp -v linuxcool file
# 根据指定文件改变文件的群组属性
chgrp --reference=file_1 file_2
# 将/usr/linuxcool及其子目录下的所有文件的用户组改为cool
chgrp -R cool /usr/linuxcool
7. 搜索查找类
7.1 find命令
功能: 根据路径和条件搜索指定文件。
find命令可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能。
find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate……等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。
基本语法: find [搜索范围] [参数]
参数 | 功能 |
---|---|
-name<查询方式> | 按照指定的文件名查找模式查找文件 |
-user<用户名> | 查找属于指定用户名所有文件 |
-size<文件大小> | 按照指定的文件大小查找文件(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
7.2 updatedb命令
功能: 创建或更新 slocate/locate
命令所必需的数据库文件。
updatedb
命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入slocate/locate
数据库文件中。
slocate
本身具有一个数据库,里面存放了系统中文件与目录的相关信息。
使用
updatedb
命令可以创建或更新locate所使用的数据库。如果数据库已经存在,它的数据是重复使用,以避免重读并没有改变的目录。updatedb
通常每天由cron
运行来更新默认的数据库。
基本语法: updatedb
参数 | 功能 |
---|---|
-o | 忽略默认的数据库文件,使用指定的slocate数据库文件 |
-U | 更新指定目录的slocate数据库 |
-v | 显示执行的详细过程 |
参考示例:
# 使用 -U 参数可以指定要更新 slocate 数据库的目录
updatedb -U /root/file/
# 创建或更新mlocate数据库
updatedb
# 创建mlocate数据库,只扫描/etc目录,写入数据库到db_file文件
updatedb -o db_file -U /etc
7.3 locate命令
功能: 快速查找文件或目录。
locate
命令与find
命令进行全局搜索不同,locate
命令是基于了数据文件(/var/lib/locatedb)
进行的定点查找,由于缩小了搜索范围,因此快速快很多。
Linux系统需定期执行下
updatedb
命令对数据库文件进行更新,然后再使用locate
命令进行查找,这样才会更加准确。
参数 | 功能 |
---|---|
-c | 只输出找到的数量 |
-d | 指定数据库所在的目录 |
-i | 忽略大小写 |
参考示例:
updatedb
# 搜索带有指定关键词的文件
locate network
# 在指定的目录下,搜索带有指定关键词的文件
locate /etc/network
# 查找 passwd 文件
locate passwd
# 搜索 etc 目录下所有以 sh 开头的文件
locate /etc/sh
# 忽略大小写搜索当前用户目录下所有以 r 开头的文件
locate -i ~/r
7.4 grep命令
功能: 用于查找文件里符合条件的字符串。
常会将
grep
命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。
与之容易混淆的是
egrep
命令和fgrep
命令。
如果把grep
命令当作是标准搜索命令,那么egrep
则是扩展搜索命令,等价于“grep -E”
命令,支持扩展的正则表达式。
而fgrep
则是快速搜索命令,等价于“grep -F”
命令,不支持正则表达式,直接按照字符串内容进行匹配。
管道符,
“|”
,表示将前一个命令的处理结果输出传递给后面的命令处理。
参数 | 功能 |
---|---|
-i | 忽略大小写 |
-c | 只输出匹配行的数量 |
-l | 只列出符合匹配的文件名,不列出具体的匹配行 |
-n | 列出所有的匹配行,显示行号 |
-w | 匹配整词 |
-x | 匹配整行 |
参考示例:
# 搜索某个文件中,包含某个关键词的内容
grep root /etc/passwd
# 搜索某个文件中,以某个关键词开头的内容
grep ^root /etc/passwd
# 搜索多个文件中,包含某个关键词的内容
grep linuxprobe /etc/passwd /etc/shadow
# 搜索多个文件中,包含某个关键词的内容,不显示文件名称
grep -h linuxprobe /etc/passwd /etc/shadow
# 输出在某个文件中,包含某个关键词行的数量
grep -c root /etc/passwd /etc/shadow
# 搜索某个文件中,包含某个关键词位置的行号及内容
grep -n network anaconda-ks.cfg
# 搜索某个文件中,不包含某个关键词的内容
grep -v nologin /etc/passwd
# 搜索当前工作目录中,包含某个关键词内容的文件,未找到则提示
grep -l root *
8. 压缩和解压类
8.1 gzip/gunzip 压缩
功能: 压缩和解压文件。
- 只能压缩文件不能压缩目录
- 不保留原来的文件
- 同时多个文件会产生多个压缩包
基本语法:
gzip 文件(功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
8.2 zip/unzip 压缩
功能: 压缩和解压文件。
zip
压缩命令在windows/linux
都通用,可以压缩目录且保留源文件。
基本语法:
zip [参数] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [参数] XXX.zip (功能描述:解压缩文件)
zip选项
参数 | 功能 |
---|---|
-r | 压缩目录 |
unzip选项
参数 | 功能 |
---|---|
-d<目录> | 指定解压后文件的存放目录 |
8.3 tar命令
功能: 压缩和解压文件。
tar
命令能够制作出Linux系统中常见的.tar
、.tar.gz
、.tar.bz2
等格式的压缩包文件。对于RHEL7
、CentOS7
版本以后的系统,解压时可以不加压缩格式参数(如z或j
),系统能自动进行分析并解压。
基本语法: tar [参数] XXX.tar.gz 将要打包进去的内容(功能描述:打包目录,压缩后的文件格式.tar.gz)
参数 | 功能 |
---|---|
-c | 产生.tar 打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar 文件 |
-C | 解压到指定目录 |
#压缩多个文件
tar -zcvf houma.tar.gz houge.txt bailongma.txt houge.txt bailongma.txt
#压缩目录
tar -zcvf xiyou.tar.gz xiyou/
#解压到当前目录
tar -zxvf houma.tar.gz
#解压到指定目录
tar -zxvf xiyou.tar.gz -C /opt
9. 磁盘查看和分区类
9.1 du命令
功能: 查看文件或目录的大小。
不要将
df
和du
命令混淆,df
是用于查看磁盘或分区使用情况的命令,而du
命令则是用于按照指定容量单位来查看文件或目录在磁盘中的占用情况。
基本语法: du 目录/文件(功能描述:显示目录下每个子目录的磁盘使用情况)
参数 | 功能 |
---|---|
-h | 以人们较易阅读的GBytes, MBytes, KBytes 等格式自行显示; |
-a | 不仅查看子目录大小,还要包括文件 |
-c | 显示所有的文件和子目录大小后,显示总和 |
-s | 只显示总和 |
–max-depth=n | 指定统计子目录的深度为第 n 层 |
参考示例
# 以易读的容量格式显示指定目录内各个文件的大小信息
du -h /etc
# 以易读的容量格式显示指定目录内总文件的大小信息
du -sh /etc
# 显示指定文件的大小信息(默认单位为K)
du anaconda-ks.cfg
9.2 df命令
功能: 查看文件或目录的大小。
df
命令显示的磁盘使用量情况含可用、已有及使用率等信息,默认单位为Kb
,建议使用-h
参数进行单位换算。
基本语法: df 参数(功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)
参数 | 功能 |
---|---|
-h | 以人们较易阅读的GBytes , MBytes , KBytes 等格式自行显示 |
-t <文件系统类型> | 只显示指定类型的文件系统 |
9.3 free命令
功能: 显示系统内存使用量情况,包含物理和交换内存的总量、使用量和空闲量情况。
基本语法: free
参数 | 功能 |
---|---|
-h | 以易读的单位显示内存使用情况 |
-s | 持续显示内存 |
参考示例
# 以默认的容量单位显示内存使用量信息
free
# 以易读的单位显示内存使用量信息
free -h
# 以易读的单位显示内存使用量信息,每个10秒刷新一次
free -hs 10
9.4 lsblk命令
功能: 查看系统的磁盘使用情况。
基本语法: lsblk
参数 | 功能 |
---|---|
-f | 查看详细的设备挂载情况,显示文件系统信息 |
-l | 使用列表格式显示 |
-n | 不显示标题 |
9.5 mount命令
功能: 把文件系统挂载到目录。
文件系统指的是被格式化过的硬盘或分区设备,进行挂载操作后,用户便可以在挂载目录中使用硬盘资源。
默认情况下Linux
系统并不会像Windows
系统那样自动的挂载光盘和U盘设备,需要自行完成。
基本语法: mount [-t vfstype] [-o options] device dir (功能描述:挂载设备)
参数 | 功能 |
---|---|
-t | 指定挂载类型 |
-l | 显示已加载的文件系统列表 |
-a | 加载文件“/etc/fstab”中描述的所有文件系统 |
参考示例
# 查看当前系统中已有的文件系统信息(可结合管道符与grep命令进行过滤)
mount
# 挂载/etc/fstab文件中所有已定义的设备文件
mount -a
# 将光盘设备挂载到指定目录
mount /dev/cdrom /media/cdrom
# 强制以xfs文件系统挂载硬盘设备到指定目录
mount -t xfs /dev/sdb /disk
9.6 umount命令
功能: 卸载指定的文件系统。
umount
卸载命令只需要提供设备名或挂载目录之一即可。
参数 | 功能 |
---|---|
-a | 卸载/etc/mtab中记录的所有文件系统 |
-h | 显示帮助 |
-v | 执行时显示详细的信息 |
参考示例
# 卸载指定的文件系统
umount /dev/sdb
# 卸载指定的文件系统并显示过程
umount -v /dev/cdrom
9.7 fdisk命令
功能: 管理磁盘的分区信息。
fdisk
命令必须在root
用户下才能使用。可以用于对磁盘进行分区操作,根据实际情况进行合理划分。
基本语法
fdisk -l (功能描述:查看磁盘分区详情)
fdisk 硬盘设备名(功能描述:对新增硬盘进行分区操作)
功能说明
- Linux 分区
- Device:分区序列
- Boot:引导
- Start:从X磁柱开始
- End:到Y磁柱结束
- Blocks:容量
- Id:分区类型ID
- System:分区类型
- 分区操作按键说明
- m:显示命令列表
- p:显示当前磁盘分区
- n:新增分区
- w:写入分区信息并退出
- q:不保存分区信息直接退出
参考示例
# 查看当前系统的分区情况
fdisk -l
# 管理指定硬盘的分区
fdisk /dev/sda
10. 进程管理类
10.1 ps命令
功能: 显示进程状态。
经常会与
kill
命令搭配使用来中断和删除不必要的服务进程,避免服务器的资源浪费。
如果想查看进程的
CPU 占用率和内存占用率
,可以使用aux
如果想查看进程的父进程ID
可以使用ef
基础语法
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)
参数 | 功能 |
---|---|
a | 列出带有终端的所有用户的进程 |
x | 列出当前用户的所有进程,包括没有终端的进程 |
u | 面向用户友好的显示风格 |
-e | 列出所有进程 |
-u | 列出某个用户关联的所有进程 |
-f | 显示完整格式的进程列表 |
功能说明
-
ps aux
显示信息说明- USER:该进程是由哪个用户产生的
- PID:进程的 ID号
- %CPU:该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源
- %MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源
- VSZ:该进程占用虚拟内存的大小,单位KB
- RSS:该进程占用实际物理内存的大小,单位KB
- TTY:该进程是在哪个终端中运行的
- (CentOS)tty1 是图形化终端
- tty2-tty6 是本地的字符界面终端
- pts/0-255 代表虚拟终端
- STAT:进程状态
- R:运行状态
- S:睡眠状态
- T:暂停状态
- Z:僵尸状态
- s:包含子进程
- l:多线程
- +:前台显示
- START:该进程的启动时间
- TIME:该进程占用CPU 的运算时间,注意不是系统时间
- COMMAND:产生此进程的命令名
-
ps -ef
显示信息说明- UID:用户ID
- PID:进程ID
- PPID:父进程ID
- C:CPU 用于计算执行优先级的因子。
- 数值越大,表明进程是CPU 密集型运算,执行优先级会降低
- 数值越小,表明进程是I/O 密集型运算,执行优先级会提高
- STIME:进程启动的时间
- TTY:完整的终端名称
- TIME:CPU 时间
- CMD:启动进程所用的命令和参数
10.2 kill命令
功能: 杀死进程。
Linux系统中如需结束某个进程,既可以使用如
service
或systemctl
的管理命令来结束服务,也可以使用kill
命令直接结束进程信息。
如使用kill
命令后进程并没有被结束,则可以使用信号9
进行强制杀死动作。
基本语法
kill [参数] 进程号(功能描述:通过进程号杀死进程)
killall 进程名称(功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
参数 | 功能 |
---|---|
-9 | 表示强迫进程立即停止 |
10.3 pstree命令
功能: 以树状图显示进程。
树状图将会以
pid (如果有指定)
或是以init
这个基本行程为根 (root)
,如果有指定使用者 id
,则树状图会只显示该使用者所拥有的行程。
基本语法: pstree [参数]
参数 | 功能 |
---|---|
-p | 显示进程的PID |
-u | 显示进程的所属用户 |
10.4 top命令
功能: 实时显示系统运行状态。
用于实时显示系统运行状态,包含处理器、内存、服务、进程等重要资源信息。
基本语法: top [参数]
参数 | 功能 |
---|---|
-d | 秒数指定 top 命令每隔几秒更新。默认是 3 秒在 top 命令的交互模式当中可以执行的命令 |
-i | 使 top 不显示任何闲置或者僵死进程 |
-p | 通过指定监控 进程ID 来仅仅监控某个进程的状态 |
操作说明
操作 | 功能 |
---|---|
P | 以 CPU使用率 排序,默认就是此项 |
M | 以内存的使用率 排序 |
N | 以 PID 排序 |
q | 退出top |
查询字段结果
-
第一行信息为任务队列信息
内容 说明 12:26:46 系统当前时间 up 1 day, 13:32 系统的运行时间,本机已经运行1 天13 小时32 分钟 2 users 当前登录了两个用户 load average: 0.00, 0.00, 0.00 系统在之前1 分钟,5 分钟,15 分钟的平均负载。一般认为小于1 时,负载较小。如果大于1,系统已经超出负荷 -
第二行为进程信息
内容 说明 Tasks: 95 total 系统中的进程总数 1 running 正在运行的进程数 94 sleeping 睡眠的进程 0 stopped 正在停止的进程 0 zombie 僵尸进程。如果不是0,需要手工检查僵尸进程 -
第三行为CPU 信息
内容 说明 Cpu(s): 0.1%us 用户模式占用的CPU 百分比 0.1%sy 系统模式占用的CPU 百分比 0.0%ni 改变过优先级的用户进程占用的CPU 百分比 99.7%id 空闲CPU 的CPU 百分比 0.1%wa 等待输入/输出的进程的占用CPU 百分比 0.0%hi 硬中断请求服务占用的CPU 百分比 0.1%si 软中断请求服务占用的CPU 百分比 0.0%st st(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟CPU 等待实际CPU 的时间百分比 -
第四行为物理内存信息
内容 说明 Mem: 625344k total 物理内存的总量,单位KB 571504k used 已经使用的物理内存数量 53840k free 空闲的物理内存数量,我们使用的是虚拟机,总共只分配了628MB 内存,所以只有53MB 的空闲内存了 65800k buffers 作为缓冲的内存数量 -
第五行为交换分区(swap)信息
内容 说明 Swap: 524280k total 交换分区(虚拟内存)的总大小 0k used 已经使用的交互分区的大小 524280k free 空闲交换分区的大小 409280k cached 作为缓存的交互分区的大小
10.5 netstat命令
功能: 显示网络状态。
用于显示各种网络相关信息,例如网络连接状态、路由表信息、接口状态、NAT、多播成员等等。
基本语法
netstat -anp | grep 进程号(功能描述:查看该进程网络信息)
netstat –nlp | grep 端口号(功能描述:查看网络端口号占用情况)
参数 | 说明 |
---|---|
-a | 显示所有正在监听(listen)和未监听的套接字(socket) |
-n | 拒绝显示别名,能显示数字的全部转化成数字 |
-l | 仅列出在监听的服务状态 |
-p | 表示显示哪个进程在调用 |
11. 定时常用命令
11.1 crontab命令
功能: 管理定时计划任务。
定时计划任务,就计划好的任务,到了时间就会自动执行,在Linux系统中的
crond
是一个定时计划任务服务,用户只要能够按照正确的格式(分、时、日、月、星期、命令)写入到配置文件中,那么就会按照预定的周期时间自动的执行下去,而crontab
命令则是用于配置的工具名称。
基本语法: crontab [参数]
参数 | 说明 |
---|---|
-e | 编辑 crontab 定时任务 |
-l | 查询 crontab 任务 |
-r | 删除当前用户所有的 crontab 任务 |
-
crontab -e
进入crontab 编辑界面。会打开vim 编辑你的工作时间格式:
f1 f2 f3 f4 f5 program
参数 说明 范围 f1 一小时当中的第几分钟 0-59 f2 一天当中的第几小时 0-23 f3 一个月当中的第几天 1-31 f4 一年当中的第几月 1-12 f5 一周当中的星期几 0-7 ( 0 和7 都代表星期日) -
特殊符号
特殊符号 说明 * 代表任何时间。比如 第一个“*”
就代表一小时中每分钟都执行一次的意思, 代表不连续的时间。比如 “0 8,12,16 * * * 命令”
,就代表在每天的8点0分,12点0分,16点0分都执行一次命令- 代表连续的时间范围。比如 “0 5 * * 1-6 命令”
,代表在周一到周六的凌晨5 点0 分执行命令*/n 代表每隔多久执行一次。比如 “*/10 * * * * 命令”
,代表每隔10 分钟就执行一遍命令 -
特定时间执行命令
时间 说明 45 22 * * * 命令 每天22点45分执行命令 0 17 * * 1 命令 每周1的17点0分执行命令 0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令 40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令 */10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令 0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现
参考示例
#每一分钟执行一次 /bin/ls
* * * * * /bin/ls
#在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
#周一到周五每天下午 5:00 寄一封信给 alex@domain.name:
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
#每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
#每两个小时重启一次apache
0 */2 * * * /sbin/service httpd restart
#每天7:50开启ssh服务
50 7 * * * /sbin/service sshd start
#每天22:50关闭ssh服务
50 22 * * * /sbin/service sshd stop
#每月1号和15号检查/home 磁盘
0 0 1,15 * * fsck /home
#每小时的第一分执行 /home/bruce/backup这个文件
1 * * * * /home/bruce/backup
#每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;
#每月的1、11、21、31日是的6:30执行一次ls命令
30 6 */10 * * ls
# 管理当前用户的计划任务
crontab -e
# 管理指定用户的计划任务
crontab -e -u user1
# 查看当前用户的已有计划任务列表
crontab -l