Linux常用命令
文章目录
一、用户管理和组管理
1.用户管理
超级用户 | 系统用户 | 普通用户 |
---|---|---|
UID=0 | 0<=UID<=999 | UID>=1000 |
1)查看用户配置文件和用户影子文件
用户账户文件passwd位于/etc
目录下,文件中的每一行对应一个用户账户,每个用户账户的信息包含七个字段,字段之间中“:”隔开。
cat -n /etc/passwd # 查看用户账户文件
# 用户名 : 账户密码 : UID : GID : 用户相关信息 : 用户主目录 : 用户登陆环境
# 1 2 3 4 5 6 7
cat -n /etc/shadow # 查看用户影子文件
# 用户名1 : 密码 : 最近更改密码日期3 : 密码不可被更改天数 : 密码需要在多少天内更改5 : 密码到期前多少天发送警告 : 密码到期后多少天失效7 : 账号失效日期 : 保留域9
2)su–切换用户
su - # 切换到root用户
su <username> # 切换用户不改变用户主目录和环境变量
su - <username> # 切换用户的同时,把用户主目录和相应的环境变量一起切换
# 由超级用户切换到普通用户不需要输入密码,由普通用户切换到超级用户或者其他普通用户需要输入密码
3)useradd、userdel–添加、删除用户
# 添加用户------------------------------------------------------------------------
useradd [option] <username> # 创建一个名为username的新用户,一般会自动创建用户主目录
-m # 在创建新用户时自动创建用户的主目录(普通用户默认)
-M # 在创建新用户时不要创建用户的主目录(系统用户默认)
-n # 取消建立以用户名称为名的组
-e [date] # 指定用户账户的失效时间,对应/etc/passwd的字段8,格式为“YYYY-MM-DD”
-f [N] # 设置密码过期后多少天锁定账户,对应/etc/passwd的字段7
-u <UID> # 指定用户UID
-g <groupname|GID> # 创建新用户并指定用户组
-G <groupname|GID> # 指定新用户的附加组
-d <path> # 创建用户并指定主目录路径
-s <path> # 指定新用户使用的Shell,默认为/bin/bash
-c <remarks> # 为账户加上备注信息,对应/etc/passwd的字段5
# 由/etc/login.defs中CREATE_HOME变量控制是否自动创建用户主目录,默认为yes
# USERGROUPS_ENAB变量控制创建新用户指定的组
# yes:系统会自动创建一个与用户名同名的组
# no:新用户将被添加到/etc/default/useradd文件中GROUP变量指定的默认组
# 例子
useradd -r -s /sbin/nologin weichat # 创建系统账户weichat,并指定Shell为/sbin/nologin,表示不能登录,UID和GID都小于1000
# 删除用户------------------------------------------------------------------------
userdel [option] <username> # 删除指用户名
-r <username> # 删除指定用户名以及家目录和邮件
-f <username> # 强制删除用户
4)usermod–修改用户属性
usermod [option] <username>
-g # 指定用户的主组,GID或组名
-G # 指定用户的附加组,GID或组名
-d # 指定用户的主目录
-s # 指定用户使用的shell,默认为bash
-e # 指定用户登陆失效时间
-u # 指定用户uid
-c # 备注信息,对应/etc/passwd的字段5
-f # 密码过期后多少天锁定账号,对应/etc/passwd的字段7
-l # 指定新用户名称
-L # 锁定用户密码,
-U # 解锁用户密码
5)passwd–修改用户密码
passwd [option] <username> # 更改指定用户密码
-d # 删除用户密码,该账号无需密码即可登录
-l # 锁定账户密码(仅root可以使用)
-u # 解锁账户密码(仅root可以使用)
-S # 显示指定用户账号的状态
-x # 指定多少天内必须修改密码,对应/etc/shadow中字段5
-w # 密码到期前多少天警告用户,对应/etc/shadow中字段6
-i # 密码过期后多少天锁定账号,对应/etc/shadow中字段7
-e # 强制用户下次登录必须修改密码
6)其他命令
env|grep SHELL # 查看当前登录用户的登录shell
2.组管理
1)查看组账户管理文件和组影子文件
cat -n /etc/group # 查看组账户管理文件
# 组名 : 组密码 : GID : 组内用户列表
cat -n /etc/gshadow # 查看组影子文件
# 组名 : 组密码 : 组管理员 : 组内用户列表
2)newgrp–切换组
mewgrp # 切换到默认组(初始组)
newgrp [-] <groupname> # 切换到指定组
# 加-则会在一个新的shell中启动
# 如果用户已经在此组,则切换到此组
# 如果用户不在此组,则需要输入密码,来临时获取该组权限
3)groupadd–新增组账户
groupadd [option] <groupname>
-g # 指定新创建组账户的GID
-r # 创建系统组账号GID小于1000
4)groupmod–修改组属性
groupmod [option] <groupname>
-g # 修改组账户GID
-n # 修改组账户名
5)groupdel–删除组账户
groupdel <groupname>
6)gpasswd–修改组账户密码
gpasswd [option] <groupname> # 修改组账户密码
-a <username> # 添加用户到组
-d <username> # 从组中删除用户
-A <username> # 指定用户为组管理员
-M <username> # 指定组成员
-r # 删除密码
-R # 限制用户登入组,只有组中成员才可以用newgrp加入该组,组外成员即使知道密码也无法登入
3.其他相关Shell命令
1)id–查看用户信息
id # 查看当点用户信息
id [option] <username> # 查看指定用户信息
-u # 只显示UID
-g # 显示用户的主组的GID
-G # 显示用户所有组的GID
-un\-gn\-Gn # 显示用户名称\主组名\所有组名
2)whoami–显示用户名称
whoami # 查看当前登录用户的用户名
3)who–显示当前登陆用户信息
who # 显示当前登录到系统中所有用户的信息
-a # 显示所有信息,包括死掉的进程
-u # 显示闲置时间
-H # 显示列标题
二、文件及目录管理
1.文件及目录操作
1)cd命令1
cd # 进入当前用户主目录
cd - # 返回刚才的工作目录
cd .. # 跳转上一级目录
cd <path> # 跳转到指定目录
cd / # 跳转到根目录
2)mkdir命令2
mkdir <dir> # 创建空目录
mkdir -p <dir> # 创建多级空目录
3)rmdir命令3
rmdir <dir> # 删除空目录
rmdir -p <dir> # 删除多级空目录
4)touch命令
touch <filename> [<filename>...] # 创建文件
touch -a <filename> # 只修改文件的访问时间
touch -m <filename> # 只修改文件的更改时间
touch A -r B # 把A的访问时间和更改时间设置和B一致
touch -c <filename> # 不建立任何文件,但修改已存在文件的访问、更改和改动时间
touch -t "YYMMDDHHMM.SS" <filename> # 指定时间戳创建文件
touch -d "tomorrow" <filename> # 使用指定字符串(从当前时间算起)表示文件访问、更改时间
5)rm命令4
rm <fileName> [<filename>...] # 删除文件
rm -f <filename> # 强制删除,不提示,忽略不存在的文件
rm -i <filename> # 删除之前给用户以提示,需要用户做出选择
rm -r <dir> # 递归删除目录和目录中包含的内容
6)find命令
find # 返回当前目录所有子目录以及文件
find [<path>] -name <filename|dir> # 在路径Path下(默认为当前目录)查找名称为name的文件或目录
-ls # 并列详细信息
find [<path>] -user <username> # 在路径path下查找所有者为username用户的文件
find [<path>] -perm <SUID> # 在路径path下查找带有特殊权限SUID的命令
find [<path>] -type <type> # 在路径path下查找类型为type的文件
find [<path>] -newer <oldPath> # 在路径path下查找比oldPath更新的文件
7)locate命令
locate [选项] /etc/sm # 搜素/etc目录下所有以sm开头的文件
-i /etc/sm # 搜素/etc目录下所有以sm开头的文件,并忽略大小写
# locate比find查找更快,一天更新一次
# 所以查不到最新文件,可以在locate之前,先使用updatedb手动更新数据库
8)cp命令5
cp [option] <source_file|source_dir> <target_dir> # 复制文件和目录
-i # 如果存在同名文件,覆盖前给用户提示,需要用户做出选择
-n # 不覆盖现有文件
-f # 如果无法打开现有目标文件,则将其删除,使用-n则忽略此选项
-r # 会复制该目录及其下面的子目录和文件
9)mv命令6
mv [option] <source_file|source_dir> <target_dir> # 移动文件和目录
-i # 如果存在同名文件,覆盖前给用户提示,需要用户做出选择
-n # 不覆盖现有文件
-f # 覆盖之前不提示用户,直接覆盖
mv <oldname> <newname> # 重命名文件
10)ls命令7
ls [option] <filename|dir>
-a # 列出所有文件,包括以.开头的隐藏文件
-R # 递归显示目录下所有文件及子目录
-d # 列出目录自身的信息,而不是它所包含内容的信息
-l # 列出信息的详细内容
-Z # 列出每个文件的安全上下文信息,即与SELinux有关的信息
11)pwd命令8
pwd # 显示当前工作目录
12)whereis命令
where [option] > # 定位一个命令的二进制文件
-b # 只找二进制格式的文件
-m # 只找在说明文件manual路径下的文件
-s # 只找source源文件
13)whatis命令
whatis [option] <command> # 显示一个命令的概述信息,等价于man -f 命令名称
14)file命令
file <path> # 检测并显示文件的类型
2.文件查看
1)head命令
head [option] <filename> # 默认显示文件前10行
-c <N> # 显示文件的前Num字节
-n <N> # 显示文件的前Num行
2)tail命令
tail [option] <filename> # 默认显示文件后10行
-c <N> # 显示文件的后Num字节
-n <N> # 显示文件的后Num行
3)more命令
more <filename> # 分屏查看文件内容
# Space(空格)键向前翻页
# Enter键向前翻行
# b键向后翻页
# q键退出
4)less命令
less <filename> # 可以分屏查看文件的内容,在查看的同事还可以搜索某些关键字
# 除了more命令中的按键外,还支持⬆️、⬇️、⬅️、➡️、PgUp键和PgDn键等
# 在less命令工作界面中,输入“/”,然后输入需要查询的字符串并按Enter键
# 可以从光标所在位置开始向文件尾部查询文本中包含的字符串,按n键查找下一个,按N键反方向查找
# 在less命令工作界面中,输入“?”,从光标所在位置开始向文件头部查询文本中包含的字符串
5)cat命令
cat命令功能比较多,可以显示文本文件的内容,也可以生成新文件、合并已存在的文件或者在文件内容后面追新的内容
5.1 显示文件内容
cat [option] <filename>
-n # 在显示的每一行前加上行号
-b # 在显示的非空行前加上行号
5.2 新建文件并添加内容
cat > <filename>
# 如果文件不存在,则新建文件并等待输入内容;如果文件存在,则修改文件内容为新输入的文本。
# 注意,输入完毕,需要按Ctrl+D键结束
5.3 合并源文件生成新文件
cat <source_file1> <source_file2> ><filename>
# 将源文件1和源文件2的内容合并到新的文件名中
5.4 向目标文件中追加内容
cat <source_file1> >> <target_file>
# 将源文件的内容追加到目标文件的内容之后
6)tac命令
tac <filename>
# 显示文本文件内容,从最后一行反向显示
7)grep命令
grep [option] <match_pattern> [filename]
-c # 打印符合要求的行数
-v # 打印不符合要求的行(不显示行号)
-n # 输出符合要求的行及其行号
# -vn显示不符合要求的行及其行号
# -vc显示不符合要求的行数
8)od命令
od <filename> # 可以以八进制和其他格式转存可执行文件,默认显示八进制
三、其他管理
1)clear命令
clear # 清屏,等同于Ctrl+L
2)history命令
history # 显示出所有在终端中执行过的历史命令,无论正确的还是错误的
# 默认记录1000条历史命令,文件/etc/profile中的参数HISTSIZE可以设置记录的命令条数
3)date命令
date # 显示系统当前日期、星期几和时间
date +%Y-%m-%d # 显示当前的年月日,中间以“-”隔开
date +%H:%M:%S # 显示当前的时分秒,中间以“:”隔开
date --date="100 days ago" +%Y/%m/%d # 显示100天之前的日期,中间以“/”隔开
4)cal命令
cal # 默认显示当前月份的日历
cal 20 5 2024 # 显示2024年5月20日的日历
cal 5 2024 # 显示2024年5月的日历
cal 2024 # 显示2024年全年的日历
5)wc命令
wc [option] <filename>
-l # 显示文件中的行数,或者终端中输入文本的行数
-w # 显示文件中的单词数,或者终端中输入文本的单词数
-m # 显示文件中的字符数,或者终端中输入文本的字符数
-c # 显示文件中的字节数,或者终端中输入文本的字节数
# 终端输入信息完毕后,需要先按Enter键,然后按Ctrl+D键结束键盘输入
6)操作符命令
6.1 >命令
[command] ><filename>
><filename> # >前没有命令则直接新建后面的文件
ll /root>outout # 将/root目录下包含的子目录和文件的详细信息保存到文件output中,如果存在则覆盖不存在则新建
6.2 >>命令
>>命令称为输出附加重定向,会将“>>”前面的命令的输出结果追加在一个指定文件的末尾,而不是覆盖指定文件的内容。
[command] >><filename>
>><filename> # >>前没有命令则直接新建后面的文件
6.3 <命令
<命令称为输入重定向,<命令可以重新定义输入的方向,例如从文件输入,而不是从键盘输入。
[command] <filename>
wc -l </var/log/messages # 统计</var/log/messages文件行数
6.4 |命令
|称为管道命令,它可以把两条命令连接起来,把钱一条命令的输出作为后一条命令的输入。
grep "root" /etc/passwd|wc -l # 先找出/etc/passwd中包含root的行,然后通过管道命令统计出总的行数
6.5 free命令
free [option] # 显示内存信息
-k # 以K为单位,K不显示,这也是du命令的默认option
-m # 以M为单位,M不显示
-g # 以G为单位,G不显示
-h # 自动选择单位并显示
-t # 显示内存总数
-ms 2 # 每两秒以兆(也可以是ks、gs...)字节为单位动态刷新内存信息,Ctrl+C退出
6.6 du命令
du命令可以查看文件或者目录等已经使用磁盘空间的情况
du [option] <path>
-k # 显示使用磁盘空间时以千字节为单位,省略K
-m # 显示使用磁盘空间时以兆字节为单位,省略M
-h # 显示使用磁盘空间时自动选择合适的单位,并添加上相应的单位
-s # 显示指定路径下使用的磁盘空间总量,不现实路径中每一项的磁盘空间用量
6.7 df命令
df命令可以查看磁盘中未使用的空间情况。注意,df命令显示未使用磁盘空间的容量时是以分区或者文件系统为单位来显示的。
df [option] <path>
-k # 显示使用磁盘空间时以千字节为单位,省略K
-m # 显示使用磁盘空间时以兆字节为单位,省略M
-h # 显示使用磁盘空间时自动选择合适的单位,并添加上相应的单位
四、有关系统的命令
1)运行级别表
运行级别的代号 | 运行级别的名称 | 运行级别的说明 |
---|---|---|
0 | halt | 关机,代表系统停机状态 |
1 | Single user mode | 单用户模式,只支持root账户 |
2 | Multiuser,without NFS | 不支持网络文件系统的过用户模式 |
3 | Full Multiuser mode | 完全多用户模式,支持网络文件系统 |
4 | unused | 系统未使用,用做保留 |
5 | X11 | 图形界面的多用户模式 |
6 | Reboot | 重启 |
2)init命令
init <N> # N的取值为0~6的整数
3)runlevel命令
runlevel # 查看系统运行级别
4)echo命令
echo abc
# abc
echo $SHELL # 查看默认shell
# /bin/bash
5)uname命令
uname -r # 查看linux内核版本号
# 3.10.0-693.el7.x86_64
6)help, man 命令
<command> --help # 显示帮助信息后直接退出,返回命令行提示符
man <command>
五、系统的关机和重启
1)系统关机命令
init 0
halt
poweroff
shutdown -h 0
shutdown -h now
2)系统重启命令
init 6
reboot
shutdown -r 0
shutdown -r now
3)shutdown命令
shutdown [option] <date> [alert]
-h # 关闭计算机
-r # 重新启动计算机
-k # 只发送警告信息,并不真的关机或重启
shutdown -c # 取消挂起的关机命令
shutdown -h 30 # 30min后关机并向所有用户发出警告
shutdown -h 11:00 # 计算机在11:00关机并向所有用户发出警告
六、文件系统管理
1.Linux文件结构图
graph TB
A(/)---B(/run)
A(/)---C(/boot)
C---C1(grub2)
C---C2(efi)
A(/)---D(/dev)
A(/)---E(/etc)
E---E1(rc.d)
A(/)---F(/home)
A(/)---G(/lib)
A(/)---H(/bin)
H-.->L1
A(/)---L(/usr)
L---L1(bin)
L---L2(sbin)
L---L3(local)
L---L4(tmp)
A(/)---I(/media)
A(/)---J(/root)
A(/)---K(/sbin)
A(/)---N(/srv)
A(/)---O(/tmp)
A(/)---M(/var)
M---M1(tmp)
M---M2(ftp)
L4-.->M1
subgraph A
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
end
2.文件类型
文件类型 | 符号 | 介绍 |
---|---|---|
普通文件 | - | 用于存放数据、程序等信息的一般文件,又可以分为二进制文件、xml文件、db文件等如果要查看一个普通文件的类型可以使用file命令 |
目录文件 | d | 相当于Windows系统中的文件夹,由该目录所包含的目录项所组成的文件 |
块设备文件 | b | 存取是以一个字块为单位,普通文件的处理不必要对硬件进行过多的操作的,而字符型设备和块设备就不同了,所以是以特别形式文件出现。/dev/cdrom、/dev/fd0、/dev/hda的存取是通过数据块进行 |
套接字文件 | s | 套接字文件是一个用户不可见的,高度极简的用于汇集网络套接字的内存文件系统,它没有块设备,没有子目录,没有文件缓冲,它借用虚拟文件系统的框架来使套接字与文件描述字具有相同的接口。 |
链接文件 | l(L不是1) | 符号链接又叫软链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件 |
字符设备文件 | c | 存取数据时是以单个字符为单位的,/dev/audio是字符设备文件,对audio的存取是以字节流方式来进行的。 |
命名管道文件 | p | 负责讲一个进程的信息传递给另一个进程,从而使该进程的输出称为另一个进程的输入。 |
3.软(符号)链接和硬链接
1)软链接
ln -s <source_file> <softlink_file> # 创建软(符号)链接,可以指向目录
rm <softlink_file> # 删除软链接,提示用户
unlink <softlink_file> # 删除软链接,不提示
2)硬链接
ln <source_file> <softlink_file> # 创建硬链接,不允许对目录创建硬链接。
# 相当于复制源文件,即使源文件删除,链接文件也不会失效
4.查看文件类型
1)ls -l查看文件类型
ll
是ls -l
的别名
ll <filename>
ls -l <filename>
# -rw-r--r--. 1 root root 153 5月 14 20:40 222.txt
# -表示普通文件,在第一个字符位置
2)file命令查看文件类型
file [option] <filename|dir>
-b # 列出辨识结果,不显示文件名称
-c # 详细显示命令执行过程,便于排错或分析程序执行的情形
-v # 查看版本信息
-z # 尝试去解读压缩文件的内容
file -f <namefile> [<filename|dir>] # namefile中写文件名,file会依序辨识这些文件,namefile格式为每列一个文件名称(一行一个文件名)
3)stat命令查看文件类型
stat [filename|dir] # 以文字的格式显示inode的内容
4)inode介绍
每个文件和目录都有一个与之对应的inode,包含以下信息:
- 文件的大小
- 文件的创建时间
- 文件的最后修改时间
- 文件的最后访问时间
- 文件的权限
- 文件的拥有者ID
- 文件的组ID
- 文件类型
- 文件的连接数
- 指向文件数据块的指针等等
5.查找指定类型文件
1)find–查找指定类型文件
find [dir] -type [f d c s p l] [-ls] [wc -l]
# f--普通文件、d--目录文件
# b--块设备文件、c--字符设备文件
# s--套接字文件、p--管道文件
# l--符号链接文件
-ls # 显示文件的详细信息
wc -l # 统计查找到的文件个数
6.文件和目录的权限管理
1)文件和目录的访问权限
1.1 文件的访问权限
-
读(r):允许读文件的内容。
-
写(w):允许向文件中写入数据。
-
执行(x):允许将文件作为程序执行
1.2 目录的访问权限
- 读(r):允许查看目录中有哪些文件和目录。
- 写(w):允许在目录下创建(或删除)文件、目录,修改文件名字或者目录名字。
- 执行(x):允许访问目录(用cd进入改目录)
1.3 用户分类
- 文件所有者(owner):建立文件、目录的用户。
- 文件所在的组(group):也称为属组、属于同一组的群的用户对于属于该组群的文件有相同的访问权限。
- 其他用户(other):除了文件所有者、同组用户外的其他用户。
1.4 权限查看
ls -l 222.txt
-rw-r--r--. 1 root root 153 5月 14 20:40 222.txt
# 文件所有者是root,文件所在组是root组
# rw-:左边三个字符表示文件所有者的访问权限,拥有读(r)、写(w)的权限
# r--:中间三个字符表示文件所在组的访问权限,拥有读(r)的权限
# r--:右边三个字符表示其他用户的访问权限,拥有读(r)的权限
为了方便权限也可以用数字表示,其中r=4、w=2、x=1、-=0,rwx权限就是4+2+1=7,rw-权限就是4+2=6……
权限 | 二进制 | 八进制 |
---|---|---|
— | 000 | 0 |
–x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
2)修改文件的目录的访问权限
2.1 chmod命令
命令格式1
chmod n1n2n3 <filename|dir> # 设定数字为指定文件或目录修改访问权限
# n1代表所有者访问权限
# n2代表同组用户的权限
# n3代表其他用户的权限
命令格式2
chmod [ugoa] [+-=] [rwxugo] <filename|dir> # 修改文件货目录的访问权限
# 选项1:用户标识
# 所有者(u)
# 同组(g)
# 其他人(o)
# 所有的人员(a)
# 选项2:设定方法
# +:增加权限
# -:删除权限
# =:分配权限,同时删除旧的权限
# 选项3:权限字符
# r(读)、w(写)、x(执行)
# u(和所有者的权限相同)、g(和所同组的用户权限相同)、o(和其他用户的权限相同)
chmod u=rwx,go=x a.txt
chmod 711 a.txt
# 这两条命令效果一样
2.2 chown命令
chown [-R] <username[:groupname]> <filename|dir>
# 功能:更改属主和组
# -R对目录及其子目录进行递归设置
chown root:root test.txt
2.3 chgrp命令
chgrp <group|GID> <filename|dir>
# 功能:改变文件或目录组群
3)默认权限、隐藏属性、特殊权限
3.1 默认权限
在Linux系统中,所有文件系统预设的权限都是666,也即所有者、同组用户、其他用户都有读和写的权限,没有执行的权限。而目录系统预设的默认权限值是777,即所有者、同组用户、其他用户同时具有读写和执行的权限。
但访问文件、目录时真正拥有的权限是通过掩码umask屏蔽掉某些不必要的默认权限后,剩余下来的权限。
Linux系统在预设的情况下,超级用户root的默认掩码umask是022,普通用户的默认掩码是002.
umask # 查看当前用户的默认屏蔽权限为022
umask [mask]
# 功能:设置文件或目录的默认权限
3.2 隐藏属性
1)查看文件隐藏属性
lsattr [-adlRvV] [filename|dir]
-a # 显示所有文件和目录
-l # 此参数目前没有任何作用
-R # 递归处理,将指定目录下的所有文件及子目录一并处理
-v # 显示文件或目录版本
-V # 显示版本信息
2)修改文件隐藏属性
chattr [+-=] [ai] <filename|dir>
a # 只能增加数据,而不能删除也不能修改数据(仅root用户才能设置这个属性)
i # 不能删除,不能修改,不能改名(仅root用户才能设置这个属性)
3.3 特殊权限
文件特殊权限有SUID、SGID、SBIT三种,他们用于改变文件执行时的行为。
1)suid(Set User ID upon execution):
-
当一个可执行文件设置了suid权限位时,用户在执行这个文件时,将会以该文件所有者的权限来运行,而不是以执行者的权限。
-
举例来说,
/usr/bin/passwd
命令通常设置了suid位,这样即使普通用户执行该命令,也会拥有文件所有者(通常是root)的权限,从而能够更改用户的密码。ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd -
suid权限在文件权限位中表示为
x
位置上的s
,例如rwsr-xr-x
。
2)sgid(Set Group ID upon execution):
-
对于设置了sgid权限位的可执行文件,执行文件的用户将会以该文件所属组的权限来运行。
-
对于目录来说,sgid权限位的作用是:当用户在此目录下创建新文件或目录时,新文件或目录的所属组将会继承目录的所属组,而不是创建者的默认组。
ls -l /usr/bin/locate
-rwx–s–x. 1 root slocate 40512 11月 5 2016 /usr/bin/locate -
sgid权限在文件权限位中表示为
x
位置上的s
,对于目录则是在w
位置上,例如rwxr-sr-x
(文件)或rwxr-sr-x
(目录)。
3)sbit(Sticky Bit):
-
sbit权限位主要用于目录,它限制用户只能删除自己拥有的文件。
-
最典型的应用是
/tmp
目录,任何用户都可以在此创建文件,但只能删除自己创建的文件。ls -dl /tmp
drwxrwxrwt. 17 root root 4096 5月 18 16:09 /tmp -
sbit权限在文件权限位中表示为
x
位置上的t
,对于目录则是在w
位置上,例如rwxrwxr-t
(目录)。
在设置这些特殊权限时,可以使用chmod
命令加上特定的符号或数字模式:
suid:
u+s
或4xxx
sgid:g+s
或2xxx
sbit:o+t
或1xxx
其中,xxx
代表其他权限位的设置。
理解这些特殊权限对于系统安全管理和文件保护非常重要,因为不当的设置可能会导致安全漏洞。
7.文档的归档和压缩
1)文件的压缩与解压缩
1.1 常用的文件压缩/解压缩命令
压缩命令 | 对应的解压缩命令 | 压缩后的扩展名 | 打开对应压缩文件的命令 |
---|---|---|---|
compress | uncompress | *.z | zcat |
gzip | gunzip|gzip -d | *.gz | zcat |
bzip2 | bunzip2|bzip2 -d | *.bz2 | bzcat |
xz | unxz|xz -d | *.xz | xzcat |
1.2 gzip和gunzip命令
gzip的压缩速度快,但是压缩率低于bzip2的压缩率,压缩后的文件后缀是.gz
单独使用gzip命令时,无法将一个目录压缩成一个压缩包
gzip [option] <filename> [<filename> [...]] # 压缩
-c # 写入标准输出,保持原始文件不变
-d # 解开压缩文件
-f # 强行压缩文件,不理会文件名称或硬链接是否存在以及该文件是否为符号链接
-l # 列出压缩文件的相关信息
-L # 显示版本与版权信息
-q # 不显示警告信息
-r # 递归处理,将指定目录下的所有文件及子目录一并处理
-t # 测试压缩文件是否正确无误
-v # 显示指令执行过程
-V # 显示版本信息
gunzip [option] <filename> # 解压缩
1.3 bzip2和bunzip2命令
bzip2比gzip有更高的压缩率,被其压缩后的文件的后缀为.bz2 。
bzip2 [option] <filename|dir> [<filename|dir> [...]]
-c # 输出至标准输出
-v # 显示压缩或解压缩的详细信息
-d # 解开压缩文件
-s # 降低内存的使用量
-t # 测试.bz2压缩文件的完整性
-f # bzip2在压缩或解压缩时,若文件已存在,则不会覆盖已有文件;使用-f,可强制bzip2进行文件覆盖
-k # 在压缩和解压缩后保留源文件
-q # 安静模式,不显示警告信息
z # 强制进行压缩
bunzip2 [option] <filename|dir> # 解压缩
1.4 compress和uncompress
使用compress压缩的文件一般以.Z
为后缀。
compress [option] <filename>
uncompress [option] <filename>
1.5 xz和unxz命令
xz命令压缩的后缀为.xz
。
xz [option] <filename>
-d # 强制解压缩
-# # 指定压缩比,范围为1~9,默认为6
-z # 强制压缩
-t # 测试压缩文件的完整性
-l # 列出关于.xz文件的消息
-k # 压缩/解压缩时保留不删源文件
-f # 压缩或解压缩时强制覆盖同名文件
-Num # (0~9)默认为6,指定压缩等级
-q # 安静模式
1.6 目录的压缩与解压缩
tar [option] <dir>
-c # 创建归档文档
-t # 列出归档文件的内容
-u # 更新归档文件(压缩后的归档文件无法更新)
-v # 处理文件时显示详细信息
-w # 可以逐个选择要归档的文件及目录
-z # 通过gzip压缩归档文件
-j # 通过bzip2压缩归档文件
-J # 通过xz压缩归档文件
-Z # 通过compress压缩归档文件
-x [<path>] # 从归档文件中提取特定文件
-C <path> # 指定提取到的目录
-f <dir> # 指定归档文件的名称(此参数一般放到最后)
--delete <path> # 从归档文件中删除指定的文件,path为归档文件内的目录
--exclude <path> # 排除指定文件
-N[--after-date,--newer-mtime] <date> # 备份date以后的文件(不包括目录)
# 例子:
tar -cf 2.tar 2/
tar -cjf 2.tar.bz2 2/
tar -czf aa.`date +%Y%m%d`.tar.gz 2/ # 文件名包含当前时间
tar -xf 2.tar
aa.20240519.tar.gz
七、磁盘管理
1.Linux磁盘分区介绍
对于一个硬盘来说,主分区至少有 1 个,最多有 4 个;扩展分区可以没有,最多只能有 1 个,且主分区+扩展分区总共不能超过 4 个;逻辑分区可以有若干个。
2.磁盘标识
整个磁盘和每个分区都被Linux表示为/dev
目录中的文件、磁盘类型不同标识也不同,有以下阆中类型的磁盘。
1)IDE磁盘
在Linux中,IDE
接口的设备被称为hd
,驱动器标识符为hd[a-d]*
,“[]
”中的字母为a、b、c、d
中的一个。例如,a
是基本盘,b
是从盘,c
是辅助主盘,d
是辅助从盘,“*
"指分区,即主分区和扩展分区。
2)SCSI/SATA磁盘
SCSI
和SATA
接口的设备被称为sd
,驱动器标识符为sd[a-p]*
,第一块硬盘被称为sda
、第二块硬盘被称为sdb
……以此类推。
3)Grub对磁盘分区的表示方式
多操作系统启动文件Grub
并不区分IDE
、SCSI
或者SATA
硬盘,所有的硬盘都被表示为hd#
,#
是从0开始hd1表示第二块硬盘。
对于任意一块硬盘hd#
,hd#,1
、hd#,2
、hd#,3
表示它的分区。
4)磁盘分区过程
-
查看系统中的磁盘
ls -l /dev/sd*
-
查看分区
fdisk -l <disk_name>
创建主分区
fdisk <disk_name> # 进入分区界面,输入“m” # 命令: n # 增加一个新的分区 p # 主分区 e # 扩展分区 p # 查看分区表情况
-
创建swap交换分区
主分区创建后,一般还需要创建一个
swap交换
分区,用于当内存不够用时,使用交换分区暂时替代部分内存。交换分区大小不能超过2G
,交换分区无法直接创建,需要先创建一个主分区后,修改主分区的类型,使其成为swap交换分区。type # 修改分区类型 Num # 分区号 Hex # Hex代码,82表示swap类型
-
有关命令
mkswap <partition_name> # 初始化交换分区 swapon [option] <partition_name> # 激活交换分区 -s # 查看当前系统已存在的swap分区 partprobe /dev/sdc # 通知内核重读分区表
3.逻辑卷管理
1)命令表
PV(Physical Volume)物理卷
VG(Volume Group)卷组,建立在物理卷之上,由1~n个物理卷组成。
LV(Logical Volume)逻辑卷
任务 | PV | VG | LV |
---|---|---|---|
创建 | pvcreate | vgcreate | lvcreate |
删除 | pvremove | vgremove | lvremove |
扫描列表 | pvscan | vgscan | lvscan |
显示属性 | pvdisplay | vgdisplay | lvdisplay |
扩展 | vgextend | lvextend | |
缩减 | vgreduce | lvreduce | |
显示信息 | pvs | vgs | lvs |
改变属性 | pvchange | vgchange | lvchange |
重命名 | vgrename | lvrename | |
改变容量 | pvresize | lvresize | |
检查一致性 | pvck | vgck |
2)逻辑卷管理的操作
一般包括创建卷、查看卷、调整卷等。
2.1 创建卷
创建物理卷
pvcreate <disk_name|partition_name>
创建卷组
vgcreate <vg_name> <pv_name> [...]
创建逻辑卷
lvcreate -L <memory_size> <vg_name> # 逻辑卷大小
lvcreate -l <pe> <vg_name> # PE值
lvcreate -n <lv_name> <vg_name> # 逻辑卷名
2.2 查看卷
查看物理卷
pvdisplay[|pvs] # 显示所有物理卷
[<pv_name>] # 显示指定物理卷
查看卷组
vgdisplay[vgs] # 显示所有卷组
[<vg_name>] # 显示指定卷组
查看逻辑卷
lvdisplay[lvs] # 显示所有逻辑卷
[<vg_name>] # 显示指定
3)调整卷
扩产卷组
vgextend <vg_name> <pv_name> [...] # 将指定的物理卷添加到卷组中
缩减卷组
vgreduce <vg_name> <pv_name> [...] # 讲指定的物理卷从卷组中移除
扩产逻辑卷
lvextend -L <+memory_size> <lv_name> # 逻辑卷增量
lvextend -l <+memory_size> <lv_name> # 逻辑卷增量
缩减逻辑卷
lvextend -L <-memory_size> <lv_name> # 逻辑卷增量
lvextend -l <-memory_size> <lv_name> # 逻辑卷增量
# 缩减逻辑卷之前一定要先缩减逻辑卷上的文件系统大小
# lvextend、lvreduce、lvresize均支持-r(resizefs)参数用于调整逻辑卷的同时调整文件系统的尺寸
4.文件系统管理
1)创建文件系统
mkfs.ext4 <partition_name> # 将分区格式化为ext4文件系统
mkfs.xfs <partition_name> # 将分区格式化为xfs文件系统
mkfs -t <file_system> <partition_name> # 将分区格式化为指定文件系统
2)查看文件系统
df命令
df -T <filename|partition_name> # 查看已经挂载的分区和文件系统类型
df -[t,s] <file_system> <filename|partition_name>
t # 仅显示指定文件系统类型的磁盘信息
x # 不显示指定文件系统类型的磁盘信息
parted命令
parted -l # 输出文件系统类型
blkid命令
blkid # 查看已格式化的UUID和文件系统
file命令
file -Ls [filename|partition_name] # file识别文件类型,-L启用符号链接跟随,-s启用读取块设备或字符设备
findmnt命令
findmnt <filename|partition_name> # 列出所有已挂载文件系统或者搜索出某个文件系统
lsblk命令
lsblk -f # 查看所有分区类型
3)磁盘检查命令
fsck命令
fsck [option] [file_system]
-a # 自动修复文件系统,不询问任何问题
-A # 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统
-N # 不执行命令,仅列出实际执行会进行的操作
-P # 当搭配“-A”参数使用时,则同时会检查所有的文件系统
-r # 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式
-R # 当搭配“-A”参数使用时,则会略过/目录的文件系统不予检查
-s # 依序执行检查作业,而非同时执行
-T # 执行fsck指令时,不显示标题信息
-V # 显示执行指令过程
-t <file_sys_type> # 指定要检查的文件系统类型
xfs_repair命令
xfs_repair <partition_name>
badblocks命令
badblocks <partition_name> # 检查磁盘中有没有坏的扇区
5.挂载文件系统
格式文件系统后还需要将分区挂载到Linux文件系统的某个目录上。
1)mount命令
执行不带任何参数的mount
命令,则会显示当前系统中已经挂载的所有文件系统列表。
格式1
mount [-t <partition_name>] [-o <mount_option>] <device_name> <mount_point>
# (1) -t可以指定文件类型
# (2) 省略-t选项,mount将依次试探/proc/filesystems中不包含nodev的行
# (3) 必须同时指定设备名<device_name>和挂载点<mount_point>
格式2
mount [-o <mount_option>] <device_name|point>
# (1) 选择使用设备名<device_name>和挂载点<mount_point>之一即可
# (2) 省略-o选项,则使用/etc/fstab中指定的文件类型
格式3
mount -a [-t <partition_name>] [-o <mount_option>] <device_name|mount_point>
# (1) 选择使用设备名<device_name>和挂载点<mount_point>之一即可
# (2) -t可以指定文件类型
# (3) -o用于指定挂载/etc/fstab中包含指定挂载选项的文件系统
# (4) 若同时指定-t和-o,则为或者的关系
mount_option | 含义 |
---|---|
auto | 开机自动挂载 |
default,noauto | 开机不自动挂载 |
nouser | 只有root可挂载 |
ro | 只读挂载 |
rw | 可读写挂载 |
user | 任何用户均可挂载 |
users | 允许所有users组中的用户挂载文件系统 |
sync | I/O同步进行 |
async | I/O异步进行 |
dev | 解析文件系统上的块特殊设备 |
nodev | 不解析文件系统上的块特殊设备 |
suid | 允许suid 操作和设定sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限 |
nosuid | 禁止suid 操作和设定sgid 位 |
noatime | 不更新文件系统上inode 访问记录,可以提升性能(参考atime 参数) |
nodiratime | 不更新文件系统上目录inode 访问记录,可以提升性能(参考atime 参数) |
relatime | 实时更新inode access [^1]记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 想似,但不会打断如nutt 或其他程序探测文件在上次访问后是否被修改的进程),可以提升性能(参考atime 参数) |
flush | vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失 |
defaults | 使用文件系统的默认挂载参数,例如ext4 的默认参数 |
2)自动挂载
mount挂载的文件在系统关机后会自动卸载
需要在/etc/fstab
中添加代码
字段 | 说明 |
---|---|
file system | 要挂载的设备,可以使用设备名,也可以通过UUID=<uuid>或LABEL=<labe>来指定 |
mount_point | 挂载点目录 |
type | 挂载的文件系统类型 |
options | 挂载选项,可以设置多选项,不同选项之间用逗号隔开,使用过defaults表示系统自动识别文件系统进行挂载 |
dump | 使用dump命令备份文件系统的频率,空白或值为0时,不备份;值为1时,要备份 |
pass | 开机时fsck命令会自动检查文件系统,pass规定了检查的顺序。挂载到分区的文件系统的对应值为1,其他文件系统为2,如果某文件系统在启动时不需要自检,则该字段的值为0 |
6.卸载设备
1)unmount命令格式
unmount <device_name|mount_point> # 卸载指定的设备
八、Linux Shell常用快捷键
快捷键 | 作用 |
---|---|
Tab | (1)命令补全 (2)文件名或路径补全 (3)连续按两次Tab,显示以已输入字符开头的所有命令、文件名或路径 |
Ctrl+D | (1)退出终端,相当于输入了exit命令 (2)结束键盘输入 (3)在命令行种从光标处向右删除,相当于按Delete键 |
Ctrl+C | (1)结束当前正在运行的程序 (2)取消当前命令行的编辑 |
Ctrl+L | 终端清屏,相当于执行clear命令 |
Ctrl+Z | 将终端中正在运行的程序送到后台 |
Ctrl+R | 搜索历史命令 |
Ctrl+A | 移动光标到所在行的行首 |
Ctrl+E | 移动光标到所在行的行尾 |
Ctrl+U | 擦除当前光标位置到行首的全部内容 |
Ctrl+K | 擦除当前光标位置到行尾的全部内容 |
Ctrl+W | 擦除光标位置前的单词(以空格划分);如果光标在一个单词本身上,它将擦除从光标位置到该单词词首的全部字母 |
Ctrl+Y | 粘贴使用Ctrl+W、Ctrl+K、Ctrl+U擦除的文本 |
附录
英文名对照表
英文名 | 对应名词 | 英文名 | 对应名词 | 英文名 | 对应名词 |
---|---|---|---|---|---|
alert | 警告 | command | 命令 | device_name | 设备名 |
dir | 目录名 | disk_name | 磁盘名 | filename | 文件名 |
file_system | 文件系统 | groupname | 组名 | lv_name | 逻辑卷名 |
mask | 权限(数字) | match_pattern | 匹配模式 | memory_size | 内存大小 |
mount_option | 挂载选项 | mount_point | 挂载点 | N | 0, 1, 2… |
option | 选项 | partition_name | 分区名 | path | 路径 |
pv_name | 物理卷名 | remarks | 备注 | softlink_file | 软链接文件 |
source_dir | 源目录 | source_file | 源文件 | target_dir | 目标文件 |
type | 类型 | username | 用户名 | vg_name | 卷组名 |
参考书籍
- 《Linux系统应用》
- 盛剑会 苗凤君 主编
- 董智勇 李晓楠 张茜 副主编
- 清华大学出版社