《Linux 就该这么学》学习笔记
这个系列主要记录了 Linux 的学习过程中我觉得有必要记录的知识点
Day 01
1.5 RPM(红帽软件包管理器)
- 本质:将安装规则与源代码打包
- 目的:降低安装难度
- 原理:通过将安装规则打包到一起降低难度
命令 | 作用 |
---|---|
rpm -ivh filename.rpm | 安装软件的命令格式 |
rpm -Uvh filename.rpm | 升级软件的命令格式 |
rpm -e filename.rpm | 卸载软件的命令格式 |
rpm -qpi filename.rpm | 查询软件描述信息的命令格式 |
rpm -qpl filename.rpm | 列出软件文件信息的命令格式 |
rpm -qf filename | 查询文件属于哪个 RPM 的命令格式 |
1.6 Yum 软件仓库
Yum 软件仓库可以 根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。
- 目的:进一步降低软件安装难度
- 原理:将大量的常用的 RPM 软件包收集到一起
- 通过:自动解决依赖关系
命令 | 作用 |
---|---|
yum repolist all | 列出所有仓库 |
yum list all | 列出仓库中所有软件包 |
yum info | 软件包名称 查看软件包信息 |
yum install | 软件包名称 安装软件包 |
yum reinstall | 软件包名称 重新安装软件包 |
yum update | 软件包名称 升级软件包 |
yum remove | 软件包 移除软件包 |
yum clean all | 清除所有仓库缓存 |
yum check-update | 检查可更新的软件包 |
yum grouplist | 查看系统中已经安装的软件包组 |
yum groupinstall | 软件包组 安装指定的软件包组 |
yum groupremove | 软件包组 移除指定的软件包组 |
yum groupinfo | 软件包组 查询指定的软件包组信息 |
1.7 systemd 初始化进程
systemctl 命令 | 作用 |
---|---|
systemctl restart 服务名称 | 重启服务 (PID 值不变) |
systemctl reload服务名称 | 重新加载配置文件(不终止服务,不修改 PID 值) |
systemctl start 服务名称 | 启动服务 |
systemctl stop 服务名称 | 停止服务 |
systemctl enable 服务名称 | 加入到启动项 |
systemctl status 服务名称 | 查看服务状态 |
2.2 Linux 命令格式
命令名称 [命令参数] [命令对象]
其中命令名称、命令参数、命令对象之间要有空格来分隔。
Linux 的命令参数有两种格式:
长格式 | 短格式 |
---|---|
--命令前缀 | -命令前缀 |
--list | -l |
--all | -a |
短格式和短格式的参数可以合并(只保留一个减号)
短格式和长格式的参数不能合并
长格式和长格式的参数不能合并
长格式和短格式的参数不能合并
举个例子如果要合并 -a
和 -l
这两个短格式,那么可以写成 -al
。
2.3 常用系统工作命令
2.3.6 Linux 的 5 种常见进程状态:
状态 | 意义 |
---|---|
R(运行) | 进程正在运行或在运行队列中等待 |
S(中断) | 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态 |
D(不可中断) | 进程不响应系统异步信号,即便用 kill 命令也不能将其中断 |
Z(僵死) | 进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数 后将进程释放 |
T(停止) | 进程收到停止信号后停止运行 |
2.3.7 top 命令
top 命令是用来动态监视进程活动与系统负载等信息的命令。
可以看作是 Windows 系统中的任务管理器。
在上面的图片中,top的前五行为系统整体的统计信息,分别代表以下含义:
- 第 1 行:系统时间、系统以及运行时间、登录终端数、系统负债(三个三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低。)
- 第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
- 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
- 第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
- 第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
信息 | 意义 |
---|---|
top | 当前系统时间 |
up | 系统已经开机时间 |
user | 系统当前终端数量 |
load average | 系统负载情况 |
Tasks | 进程总数量 |
running | 运行进程 |
sleeping | 等待进程 |
stopped | 停止进程 |
zombie | 僵尸进程 |
%Cpu(s) | CPU 使用情况 |
us | CPU 使用率 |
id | CPU 空闲率 |
Kib Mem | 内存大小 |
total | 内存总大小 |
used | 已使用内存 |
free | 空闲内存 |
Kib Swap | 交换分区 |
PID | 进程号码 |
USER | 用户发起人 |
PR-NI | 进程优先级(数值越低优先级越高) |
S | 进程状态 |
%CPU | 进程占用 CPU 百分比 |
%MEM | 进程占用内存百分比 |
TIME+ | 进程运行时间 |
Day 02
2.4 系统状态检测命令
2.4.1 ifconfig 命令
获取网卡配置与网络状态信息,格式为 ifconfig [网络设备] [参数]
。
例如:
[root@linux ~]# ifconfig
从上图的可得 ip 地址、子网掩码:
网卡 MAC 地址(物理地址,唯一值)
收到数据包大小(收到 14.7 KiB)
发送数据包大小(发送 16.1 KiB)
2.4.2 uname -a 命令
用于查看系统内核与系统版本等信息,格式为 uname [-a]
。
例如:
[root@linux ~]# uname -a
其中上图中,
zhuzongxiao.com
是主机名称;
3.10.0-862.el7.x86_64
是内核版本号;
#1 SMP Wed Mar 21 18:14:51 EDT 2018
系统打包发布时间;
x86_64
系统架构。
2.4.4 free 命令
查看当前系统中内存的使用量信息,格式为 free [-h]
。
例如:
[root@linux ~]# free -h
可以得到如下的图片:
其中 Mem
表示物理内存、 Swap
表示交换分区。
代表以下信息:
内存总量 | 已用量 | 可用量 | 进程 共享的 内存量 |
磁盘 缓存的 内存量 |
缓存的 内存量 |
|
---|---|---|---|---|---|---|
total | used | free | shared | buff/cache | available | |
Mem | 3.7G | 848M | 2.0G | 11M | 860M | 2.6G |
Swap | 819M | 0B | 819 |
2.4.5 who 命令
可以查看当前登入主机的用户终端信息,格式为 who [参数]
。
例如:
[root@linux ~]# who
2.4.7 history 命令
用于显示历史执行过的命令,格式为 history [-c]
。
用这个命令可以查看当前用户执行过的最近的 1000 条命令,也可以修改 /etc/profile
中的 HISTSIZE
变量值。
用户可以使用键盘上的上下键进行选择,也可以使用 !编码数字
的方法来重复执行。
使用 history -c
即可清空记录。
2.4.8 sosreport 命令
用于收集系统配置及框架信息并输出诊断文档,格式为 sosreport
。
2.5 工作目录切换命令
2.5.1 pwd 命令
用于显示用户当前所处的工作目录,格式为 pwd [选项]
。
2.5.2 cd 命令
用于切换工作路径,格式为 cd [目录名称]
。
也可以通过 cd -
返回上一次所在的目录,
或是通过 cd..
进入上级目录,
以及通过 cd~
切换到当前用户的家目录,
还有通过 cd ~username
切换到其他用户的家目录。
2.5.3 ls 命令
用于现实目录中的文件信息,格式为 ls [选项] [文件]
。
ls -a
可以看到所有文件包括隐藏文件,
如果要查看目录属性,可以添加一个 -d
参数。
Linux 中所有以 .
开头的文件都是隐藏文件。
2.6 文本文件编辑命令
2.6.1 cat 命令
用于查看纯文本文件(内容较少),格式为 cat [选项] [文件]
。
2.6.2 more 命令
用于查看纯文本文件(内容较多),格式为 more [选项] [文件]
。
2.6.3 head 命令
用于查看纯文本文档的前 N 行,格式为 head [选项] [文件]
。
如果只想看前 15 行,那么可以使用 head -n 15 文件名
即可。
2.6.4 tail 命令
与 head
命令相反,看纯文本文档的后 N 行或者是持续刷新内容,格式为 tail [选项] [文件]
。
如果需要持续刷新一个文件的内容,格式为 tail -f 文件名
。
Day 05
5.1 Linux 系统三种用户身份
身份 | 名称 | UID 值 |
---|---|---|
管理员 | root | UID:0 |
系统用户 | UID:1~999 | |
早期Linux RHELE5/6 UID:1~499 | ||
普通用户 | UID:1000~ | |
早期Linux RHELE5/6 UID:500~65535 |
5.1.1 useradd 命令
使用 useradd
命令,格式为 useradd [选项] 用户名
。
默认的用户家目录会在 /home
目录中,默认的 Shell
解释器为 /bin/bash
。
参数 | 作用 |
---|---|
-d | 指定用户的家目录(默认为/home/username) |
-e | 账户的到期时间,格式为 YYYY-MM-DD. |
-u | 指定该用户的默认 UID |
-g | 指定一个初始的用户基本组(必须已存在) |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认 Shell 解释器 |
如果要创建一个普通用户并且指定家目录的路径、用户的 UID
以及 Shell
解释器,
使用 useradd -d /home/linux -u 8888 -s /sbin/nologin xxx
。
意思是创建了一个家目录为 /home/linux
, 用户的 UID
为 8888,默认解释器是 /sbin/nologin
的 xxx
用户,其中用户的解释器被设置为 nologin
,则代表该用户不能登录到系统中。
系统中的用户组分为基本组和扩展组。
基本组:用户与生俱来,创建好用户后,默认有一个与其同名的用户组。基本组只能有一个。
扩展组:加入的其它组就是扩展组,可以有 N 个扩展组。
5.1.2 groupadd 命令
可以创建用户组,格式为 gourpadd [选项] 群组名
。
例如:
[root@linux home]# groupadd groupA
5.1.3 usermod 命令
用于修改用户属性,格式为 usermode [选项] 用户名
。
因为 Linux 系统的一切都是文件,因此可以在系统中创建用户也就是修改配置文件。可以直接用文本编辑器修改用户参数项目,也可以用 usermod
命令进行修改已创建的信息。比如用户的 UID、基本/扩展用户组、默认终端。
参数 | 作用 |
---|---|
-c | 填写用户账户的备注信息 |
-d -m | 参数-m 与参数-d 连用,可重新指定用户的家目录并自动把旧的数据转移过去 |
-e | 账户的到期时间,格式为 YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录系统 |
-U | 解锁用户,允许其登录系统 |
-s | 变更默认终端 |
-u | 修改用户的 UID |
例如:
假设账户 chiperman
的信息如下:
[root@linux ~]# id chiperman
uid=1000(chiperman) gid=1000(chiperman) groups=1000(chiperman)
将用户 chiperman
加入到 root
用户组中,扩展列表会多出 root
用户组而基本组不受影响:
[root@linux ~]# usermod -G root chiperman
[root@linux ~]# id chiperman
uid=1000(chiperman) gid=1000(chiperman) groups=1000(chiperman),0(root)
5.1.4 passwd 命令
用于修改用户密码、过期时间、认证信息等,格式为 passwd [选项] [用户名]
。
管理员可以修改自己和所有用户的密码,还不需要验证旧密码。
用户只能使用 passwd 修改自己的密码。
参数 | 作用 |
---|---|
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
–stdin | 允许通过标准输入修改用户密码,如 `echo "NewPassWord" |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录时修改密码 |
-s | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
5.1.5 userdel 命令
用于删除用户,格式为 userdel [选项] 用户名
。
执行删除操作时,用户的家目录会默认保留,使用 -r
参数可以将其删除
参数 | 作用 |
---|---|
-f | 强制删除用户 |
-r | 同时删除用户及用户家目录 |
5.2 文件权限与归属
Linux 系统的权限区分
符号 | 意义 |
---|---|
- | 普通文件 |
d | 目录文件 |
l | 链接文件 |
b | 块设备文件 |
c | 字符设备文件 |
p | 管道文件 |
5.2.1 文件
对于每一个文件,都有都有所属的所有者和所有组,并且规定了文件的所有者、 所属组以及其他用户对文件所拥有权限,分别是“可读”、“可写”、“可执行”。
权限 | 权限具体内容 |
---|---|
可读 | 示能够读取文件的实际内容 |
可写 | 能够编辑、新增、修改、删除文件的实际内容 |
可执行 | 能够运行一个脚本程序 |
5.2.2 目录文件
权限 | 权限具体内容 |
---|---|
可读 | 能够读取目录内的文件列表 |
可写 | 能够在目录内新增、删除、重命名文件 |
可执行 | 能够进入该目录 |
5.2.3 读、写、执行权限
读、写、执行权限简写为 r、w、x。
也可以用数字 4、2、1 来表示
权限分配 | 文件所有者 | 文件所属组 | 其他用户 | ||||||
---|---|---|---|---|---|---|---|---|---|
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
字符表示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
文件权限的数字法表示基于字符表示(rwx)的权限计算而来。
注意:数字法不可相加求累计和。
假设一个文件的权限为 7 ,那么可读、可写、可执行(4+2+1);
一个文件的权限为 6 ,那么可读、可写(4+2)。
假设一个文件,其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限,而其他人只有可读的权限。那么权限就是 rwxrw-r– ,数字法为 764,如果没有这个权限,用 -
代替,不能使用 空格
。
在上图中,包含了文件的类型、访问权限、所有者(属主)、所属组(属组)、占用磁盘大小、修改时间和文件名称的信息。
该文件的类型为普通文件,所有者权限为可读、可写 rw-
,所属组的权限为可读 r--
,其他用户的权限为可读 r--
,所有者是 root
,所属组是 root
,文件的磁盘占用大小是 1977
字节,最近一次修改时间是 2 月 15 日 02:24 分
,文件名称是 initial-setup-ks.cfg
。
5.3 文件的特殊权限
5.3.1 SUID
SUID 是一种可对二进制程序进行设置的特殊权限,让执行者临时拥有所有者的权限(仅针对拥有执行权限的二进制程序有效)
查看 passwd
命令属性时,发现所有者的权限由 rwx
变为 rws
,其中的 x
变为 s,就意味着这个文件被赋予了 SUID
权限。
如果本身权限为 rw-
,那么被赋予特殊权限后,变为大写的 S
。
5.3.2 SGID
SGID 有以下两种功能:
- 文件(二进制的可执行文件):临时获得所属组的权限
- 目录:将一个目录设置了
SGID
权限,新建的所有文件都会默认归属于这个所属组
SGID
的第一种功能是参考 SUID
而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。
如果有 SGID
权限,那么所属组的可执行权限会被修改为 s
。
chomd 和 chown 命令
chomd 是用来设置文件和目录的权限,格式为 chomd [参数] 权限 文件或目录名
chomd 760 test
意思是把 test
文件的权限修改为 760
,意味着所有者、所属组、其他用户的权限分别是:“可读可写可执行”、“可读可写”、“无权限”。
chown 是用来设置文件或目录的所有者和所属组,格式为 chwon [参数] 所有者:所属组 文件或目录名称
chown root:bin test
意思是把 test
文件的所有者和所属组分别设置为 root
和 bin
。
chomd
和 chown
针对目录进行操作的时候,需要加上大写参数 -R
来表示递归操作,即表示对目录内所有的文件进行整体操作。
5.3.3 SBIT
SBIT(粘滞位),当目录被设置 SBIT
特殊权限位后,文件的其他人权限部分的 x
执行权限就会被替换成 t
或者 T
,原本有 x
执行权限则会写成 t
,原本没有 x
执行权限则会被写成 T
。
特殊权限的数字表示法
SUID | 4 |
---|---|
SGID | 2 |
SBIT | 1 |
特殊权限法写在一般权宪法之前,7 654
意思是特殊权限是都有,文件所有者、文件所属组 以及其他用户的可读
、可写
和可执行
的权限分别是:6
、5
、4
。
下面的表格做一个简单的示例
字符表示 | 数字表示 |
---|---|
rwsrw-r-- | 4 764 |
rwxrw-r– | 764 |
rwsrw-rwT | 5 766(原本所有者有 可执行 权限为,而其他用户没有 可执行 权限) |
rwSr-s-wT | 7 652(原本所有者、其他用户都没有 可执行 权限) |
因为如果是大写的特殊权限,那么代表原本没有这个权限,原本表示为 -
。否则特殊权限应为小写字母。
5.4 文件的隐藏属性
默认情况下用户不能直接发觉,保障了系统安全性。
5.4.1 chattr
用于设置文件的隐藏权限,格式为 chatter [参数] 文件
。
如果要添加隐藏权限,在 chatter
后加上 +参数
,
移除隐藏权限,在 chatter
后加上 -参数
。
假设一个文件 testfile
被使用了 chatter +i testfile
命令,那么这个文件不能被进行修改。
如果想要删除这个文件,rm testfile
会提示权限不足(即使使用 rm -f testfile
依旧不行,甚至是 root
用户也不行),
那么我们需要先用下面的 lsatter testfile
命令查看这个文件的隐藏权限,
可以得知 testfile
文件有隐藏权限,
那么我们再使用 chatter -i testfile
来移除隐藏权限,
之后再使用 rm testfile
就可以成功删除文件。
5.4.2 lsattr
用于查看文件的隐藏权限,配合 chattr
使用。
5.5 文件访问控制列表
一般权限、特殊权限、隐藏权限都是对一类用户设置。
如果对普通文件和目录设置 ACL 就是针对指定的用户或用户组设置操作权限。
另外,如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。
5.5.1 setfacl 命令
管理文件的 ACL
规则,格式为 setfacl [参数] 文件名称
。
使用 setfacl
命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。
如果要针对目录文件需要用 -R
递归参数,针对普通文件则使用 -m
参数。
如果要删除某个文件的 ACL
,这可以使用 -b
参数。
例如:
[root@linux home]# setfacl -Rm u/g:chiperman:rwx testfile
-R
是对一个目录设置 facl
的权限,
-m
指的是对文件设置 facl
的权限,
u
代表对一个用户进行权限设置,
也可以用 g
代替表示对一个组进行权限设置,
这里是对 chiperman
用户设置了 rwx
权限,
对于 testfile
目录进行的操作。
这个时候查看文件的权限最后一个 .
变为了 +
,
这就代表我们已经对该文件设置了 ACL
。
5.5.2 getfacl 命令
用 getfacl
可以查看对于这个文件设置的 ACL
信息,格式为 getfacl 文件名称
。
例如:
[root@linux home]# getfacl testfile/
可以看到已经针对于 chiperman
用户设置的 rwx
权限。
su 命令与 sudo 服务
su 命令可以切换用户身份,使得当前用户不退出登录的情况下,切换到其他用户。
例如:从 root
管理员切换到 chiperman
账户
[root@linux ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@linux ~]# su - chiperman
Last login: Sun Feb 16 05:33:07 EST 2020 on :0
su
命令和用户名之间有一个 -
,意味着完全切换,把环境变量信息也变更为新用户的信息,建议添加 -
。
此外,从 root 管理员切换到普通用户不需要验证密码,相反则需要,也是为了安全保证。
sudo 命令可以把特定的执行权限赋予给指定用户,可以避免泄露 root 密码,还能保证普通用户完成工作。格式为 sudu [参数] 命令名称
。
参数 | 作用 |
---|---|
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u 用户名或 UID 值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
中的来说,sudo 有以下功能:
- 限制用户执行指定的命令
- 记录用户执行的每一条命令
- 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数
- 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码
如果担心直接修改配置文件出错,可以用 visudo 命令赋予权限。
Day 06
6.x 待定
ihard 总个数
bhard 总大小
本文的封面图片来自 Unspalsh 的 Sai Kiran Anagani