Chapter Ⅰ 入门
- Linux 开源系统,命令行,模块化(软件包的形势)
- Windows 闭源
Linux是类UNIX系统,mac系统也是类UNIX系统,所以二者的图形化界面比较相似
开源许可证:公共版权;宽松许可证
redhat是一家开源服务提供商,其收费范围如下:
- 开case处理故障
- 补丁更新
- 知识库
- 培训
RHEL(RedHat Enterprise Linux)
- Fedora:上游,实验版,半年更新,一年技术支持,提供最新的软件,不建议用在生产环境
- RHEL:商业版本
- CentOS:下游,拿掉RedHat中有知识版本的部分,如图标、功能等
Kdump,有助于系统故障时查找原因,但会占用磁盘空间
Chapter Ⅱ 访问命令行
Kernel是负责与硬件交互的,Shell是应用程序与Kernel间交互的,Bash是实现Shell众多程序中的一种,目前使用是最为广泛的。
Bash是默认的Shell程序
echo $SHEELL
1个物理控制台默认虚拟出来6个虚拟控制台tty
tty1 - tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名, 系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。
使用Alt+[F1—F6]组合键时,可以切换到tty2、tty3等上面去。
[root@localhost ~]# who
root tty1 2022-10-30 19:09
root pts/0 2023-11-28 10:02 (192.168.0.6)
**id:**获取用户ID(UID)和组ID(GID)
**whoami:**当前使用的用户
查看系统版本:
uname -r (uname=Unix Name)
cat /etc/redhat-release
alt + . 或 esc + . :补充上条指令的参数到此次命令
ctrl + a 光标到行首
ctrl + e 光标到行尾
ctrl + <- 以单词向左移动
ctrl + -> 以单词向右移动
ctrl + u 删除光标前的内容
ctrl + k 删除光标后的内容
“less is more”,less与more的功能类似,但比more更好用:
1、less支持上下翻页
2、less不必读整个文件,速度更快
3、less退出后shell不会留下刚显示的内容,更安全
history
!数字 执行该数字对应的历史指令
!c 匹配以c开头的最近一条指令
ctrl + c,搜索历史指令
Chapter Ⅲ 管理文件
启动分区
/boot 启动Linux和核心文件,存放开机文件,相当于C盘
根分区
/bin 二进制可执行命令,普通命令,如文件操作等,主要用于具体应用(软链接到/usr/bin)
/sbin 系统管理命令,如分区、格式化操作,主要用于系统管理(软链接到/usr/sbin)
/lib 标准程序设计库,又叫动态链接共享库
/lib64 64位的库文件
/dev 设备文件目录,如/dev/tty, /dev/hd*, /dev/sd*等
/etc 配置文件
/media 挂载设备目录(自动)
/mnt 挂载设备目录(手动)
/tmp 临时文件(/usr/tmp软链接到此)
/usr 通过系统自动安装的软件目录
/var 软件运行所产生的数据存放目录,如日志、数据库文件、缓存文件
/opt 可选的应用程序,一般是自己安装的第三方软件
/srv 服务存放一些对外的服务数据,如web、ftp、流媒体等
/root 系统管理员主目录
/lost+found 系统非正常关机而留下的文件
/misc 可以让多用户堆积和临时转移自己的文件
/sys 正在运行的硬件设备的驱动程序信息
/proc 由核心在内存中产生
用户分区
/home 除root用户之外其他用户的home目录
交换机分区
/swap 交换分区、虚拟内存,一般为物理内存的1.5~2倍
.(单个句点):当前目录
…(两个句点):一级目录
pwd:print working directory
cd:change directory
cd或者cd~:进入家目录
cd~:进入上一次的目录
ls -R:递归显示
ls -d:显示目录
ls -l:长列表显示
ls -i:显示inode
mkdir -p:递归创建
rmdir:删除空目录(实际中用处不大)
软链接:快捷方式,指向文件名;仅指向文件名,大小很小;删除原文件后,软链接文件不会自动删除,但会失去指向
硬链接:Inode的链接,指向文件的存储数据块地址;大小、时间和原文件完全相同,所有硬链接都删除后,文件的数据才会从硬盘中删除
原文件的inode值和硬链接的inode值相同;但软链接的inode则不同
通配符
通配符 | 说明 |
---|---|
* | 任意匹配 |
? | 任意单个字符 |
[abc] | 包含a或b或c中任意一个 |
[^abc] | 不包含a、b和c |
{a,b,c} {a…c} | 遍历a、b、c(一般用于创建文件或目录) |
{} 也可以用于保护变量,{$number}
$() 或者 `` 用于嵌套命令,echo "today is $(date +%A)"
或者 echo "today is `date +%A`"
符号 | 说明 |
---|---|
单引号 ‘’ | 单引号内全部都是字符 |
双引号 “” | 双引号内保留命令、变量,通过\进行转义 |
Chapter Ⅳ 获得帮助
man 文件类型
用如下命令查询
man man
常用的为:1-命令;5-配置文件
1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
不同文档类型的对比
[root@localhost ~]# man 1 passwd
PASSWD(1) User utilities PASSWD(1)
NAME
passwd - update user's authentication tokens
SYNOPSIS
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
DESCRIPTION
The passwd utility is used to update user's authentication token(s).
This task is achieved through calls to the Linux-PAM and Libuser API. Essentially, it initializes itself as a "passwd" service with
Linux-PAM and utilizes configured password modules to authenticate and then update a user's password.
A simple entry in the global Linux-PAM configuration file for this service would be:
#
# passwd service entry that does strength checking of
# a proposed password before updating it.
#
passwd password requisite pam_cracklib.so retry=3
passwd password required pam_unix.so use_authtok
#
Note, other module types are not required for this application to function correctly.
[root@localhost ~]# man 5 passwd
PASSWD(5) Linux Programmer's Manual PASSWD(5)
NAME
passwd - password file
DESCRIPTION
The /etc/passwd file is a text file that describes user login accounts for the system. It should have read permission allowed for all
users (many utilities, like ls(1) use it to map user IDs to usernames), but write access only for the superuser.
In the good old days there was no great problem with this general read permission. Everybody could read the encrypted passwords, but
the hardware was too slow to crack a well-chosen password, and moreover the basic assumption used to be that of a friendly user-commu‐
nity. These days many people run some version of the shadow password suite, where /etc/passwd has an 'x' character in the password
field, and the encrypted passwords are in /etc/shadow, which is readable by the superuser only.
If the encrypted password, whether in /etc/passwd or in /etc/shadow, is an empty string, login is allowed without even asking for a
password. Note that this functionality may be intentionally disabled in applications, or configurable (for example using the "nullok"
or "nonull" arguments to pam_unix.so).
If the encrypted password in /etc/passwd is "*NP*" (without the quotes), the shadow record should be obtained from an NIS+ server.
Regardless of whether shadow passwords are used, many system administrators use an asterisk (*) in the encrypted password field to
make sure that this user can not authenticate him- or herself using a password. (But see NOTES below.)
If you create a new login, first put an asterisk (*) in the password field, then use passwd(1) to set it.
Each line of the file describes a single user, and contains seven colon-separated fields:
name:password:UID:GID:GECOS:directory:shell
man -k:索引搜索,速度快,模糊匹配
mandb:用于初始化或手动更新 索引 数据库缓存
man -t:查询结果保存成文件
whatis:功能类似于man
pinfo:相当于帮助的百科全书
Chapter Ⅴ 创建、查看和编辑文本文件
编号 | 通道名称 | 描述 | 默认连接 | 用法 |
---|---|---|---|---|
0 | stdin | 标准输入 | 键盘 | 仅读取 |
1 | stdout | 标准输出 | 终端 | 仅写入 |
2 | stderr | 标准错误 | 终端 | 仅写入 |
3+ | filename | 其他文件 | 无 | 读取、写入 |
用法 | 说明 | 视觉辅助 |
---|---|---|
> file | 重定向stdout以覆盖文件 | |
>> file | 重定向stdout以附加到文件 | |
2> file | 重定向stderr以覆盖文件 | |
2> /dev/null | 将stderr错误消息重定向到/dev/null,从而将它丢弃 | |
> file 2>&1 &>file | 重定向stdout和stderr以覆盖同一个文件 | |
>> file 2>&1 >>file | 重定向stdout和stderr以附加到同一个文件 |
& 标准输出、标准错误输出到一起
2>&1 通道2从通道1出
1>&2 通道1从通道2出
管道符
管道是一个或多个命令的序列,用竖线字符(|)分隔。管道将第一个命令的标准输出连接到下一个命令的标准输入。
在管道中,tee将其标准输入复制到其标准输出中,并且还将标准输出重定向到指定为命令参数的文件。如果您将数据想象成流经管道的水,那么可将tee视觉化为管道中的T形接头,它负责输出在两个方向上的流向。
文本编辑器VIM
- 字符模式v
- 行模式V
- 块模式ctrl+v
- 撤销u
- 取消撤销ctrl+r
- 复制y(yank)
- 黏贴p(paste)
- 复制当前行yy
- 复制n行,数字+yy
SHELL变量
变量
=
{
S
H
E
L
L
变量
环境变量
变量=\left\{ \begin{matrix} SHELL变量 \\ 环境变量 \end{matrix} \right.
变量={SHELL变量环境变量
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
将SHELL变量声明为环境变量export
删除SHELL变量:unset
Chapter Ⅵ 管理本地用户和组
一个用户有一个主要组,还可以有其他的补充组,即一个用户可以归属到多个组中
wheel组,是一个特殊组,具有管理员权限
{
s
u
r
o
o
t
:用原来的环境变量
s
u
−
r
o
o
t
:重新登录,用
r
o
o
t
的环境变量
\left\{ \begin{matrix} su root:用原来的环境变量 \\ su - root:重新登录,用root的环境变量 \end{matrix} \right.
{suroot:用原来的环境变量su−root:重新登录,用root的环境变量
/etc/suoders
有%是组,没有%是用户
%wheel ALL=(ALL) NOPASSWD: ALL
ALL:哪些主机可以
ALL:可以切换到哪些用户或组
ALL:可以执行的指令
visudo
也可以修改,同时支持语法检查
sudo -l
查看用户权限
/etc/shadow
user:$6$BPFl0wz5$.Nxsxt6vvS/fQTU8hr9EUuDZSmR8Kl7.Qo/pP2nzsnPzmrMJJp5ZvibB.2J4K7KSEUoyJ7jF2q7WqiW8YeQjY1:18508:0:99999:7:::
字段1:用户名
字段2:密码,SHA512加密,$分割,第一个字段是随机字符串,之后是密码
字段3:最后一次修改时间,时间为据1970年1月1日多少天,可以通过 date -d “1970-01-01 18508 days” 查询
字段4:最小修改时间间隔,最后一次修改密码的日期起,多长时间之内不能修改密码;如果是 0,则密码可以随时修改
字段5:密码有效期,最后一次更改密码多长时间内需要再次变更密码(密码过期但账号可用);默认值为 99999(273 年),即永久生效
字段6:密码需要变更前的警告天数
字段7:密码过期后的宽限天数,如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效
字段8:账号失效时间,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用
字段9:保留
chage
,等同于修改shadow文件
Options:
-d, --lastday LAST_DAY set date of last password change to LAST_DAY
-E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-h, --help display this help message and exit
-I, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-l, --list show account aging information
-m, --mindays MIN_DAYS set minimum number of days before password
change to MIN_DAYS
-M, --maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS
-R, --root CHROOT_DIR directory to chroot into
-W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
例:chage -d 0 -m 3 -M 100 -W -I
也可以不加参数,交互式修改
/etc/passwd
user:x:500:500::/home/user:/bin/bash
字段1:用户名
字段2:密码,由于/etc/passwd文件对所有用户都可读,存在安全隐患,都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符
字段3:UID
字段4:GID
字段5:注释性描述
字段6:家目录
字段7:用户的登录shell
/etc/login.defs
设置用户帐号限制的文件,该文件里的配置对root用户无效
如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,/etc/shadow的配置优先级高于/etc/login.defs,可以理解成login.defs是全局设置,而shadow则是针对账号的设置,所以优先级更高
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail
创建一个用户时,要在目录/var/spool/mail中创建一个用户mail文件
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999
- PASS_MAX_DAYS:密码最大有效期
- PASS_MIN_DAYS:两次修改密码的最小时间间隔
- PASS_MIN_LEN:密码最小长度,对于root无效
- PASS_WARN_AGE:密码过期前多少天提示
- UID_MIN:用户ID的最小值(RHEL7之前的惯例是,1-499用于系统用户,500+用于普通用户)
- UID_MAX:用户ID的最大值
- GID_MIN:组ID的最小值
- GID_MAX:组ID的最大值
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
删除用户时执行的脚本 USERDEL_CMD
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes
使用useradd的时候是否创建家目录 CREATE_HOME
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077
设置UMASK值
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
删除用户时是否删除对应的组 USERGROUPS_ENAB
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512
使用MD5加密 ENCRYPT_METHOD
useradd
选项 | 用法 |
---|---|
-c, --comment COMMNET | 将用户的真实姓名添加到注释字段 |
-g, --gid GROUP | 为用户账户指定主要组 |
-G, --groups GROUPS | 为用户账户指定补充组的逗号分隔列表 |
-a, --append | 利用-G选项将补充组添加到用户当前的组成员集合中,而不是将补充组集合替换为新的集合 |
-d, --home HOME_DIR | 为用户账户指定特定的主目录 |
-m, --move-home | 将用户的主目录移到新的位置。必须与-d搭配使用 |
-s, --shell SHELL | 为用户账户指定特定的登录shell |
-L, --lock | 锁定用户账户 |
-U, --unlock | 解锁用户账户 |
userdel
从/etc/passwd中删除username的详细信息,但保留家目录
userdel -r username从/etc/passwd中删除详细信息的同时,也删除家目录
不指定-r选项的时候,删除用户的UID如果再次分配给其他用户,新用户将拥有删除用户的文件权限,存在信息泄露风险。
usermod
选项 | 用法 |
---|---|
-c | 修改注释 |
-d | 修改家目录 |
-md | 移动家目录 |
-e | 修改有效期 |
-g | 修改所属组 |
-G | 修改用户补充组 |
-aG | 增加补充组 |
-u | 修改UIID |
Chapter Ⅶ 控制对文件的访问
权限 | 文件 | 目录 |
---|---|---|
r(读取) | 读取文件内容 | 列出目录中的文件名 |
w(写入) | 更改文件内容 | 创建或删除目录中的文件 |
x(执行) | 执行文件 | 可以cd进入目录 |
chmod(change mode)
chmod WHO WHAT WHICH file|directory
- WHO是指u、g、o、a(用户、组、其他、全部)
- WHAT是指+、-、=(添加、删除、精确设置)
WHICH是指r、w、x(读取、写入、执行)
特殊权限
特殊权限位只在执行位x上有效
特殊权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
u+s,suid | 以文件拥有者身份运行 | 无影响 |
g+s,sgid | 以归属组身份运行 | 以归属身份创建文件 |
o+t,sticky | 无影响 | 只能删除自己的文件,不能删除其他用户的文件 |
以passwd为例,passwd指令在普通用户执行的时候,会以root身份运行,虽然shadow文件对任何用户都没有权限,但因为以root身份运行,所以可以正常修改密码
用数值表示(第四位):suid=4、sgid=2、sticky=1
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
数值表示为4755
默认权限
文件/目录的默认权限
类别 | 说明 |
---|---|
文件 | 666 - umask |
目录 | 777 - umask |
/etc/profile:主默认启动文件,系统上每一个用户在登陆时都将执行此文件,一些重要的变量就是在这个脚本文件中设置的
/etc/profile.d/:存放的是一些应用程序所需的启动脚本,其中包括了颜色、语言、less、vim及which等命令的一些附加设置
~/.bash_profile:用来设置一些环境变量,功能和/etc/profile 类似,但是这个是针对用户来设定的,也就是说,你在/home/user1/.bash_profile 中设定了环境变量,那么这个环境变量只针对 user1 这个用户生效。(/.bash_profile、/.bash_login和~/.profile先找到哪个用哪个)
~/.bashrc:作用类似于/etc/bashrc, 只是针对用户自己而言,不对其他用户生效;当登录时以及每次打开新的shell时,该该文件被读取
/etc/bashrc:这个文件设置系统bash shell相关的东西,对系统内所有用户生效。只要用户运行bash命令,那么这里面的东西就在起作用;当bash shell被打开时,该文件被读取
添加环境变量的三种方法:
1、临时生效:export PATH=
P
A
T
H
:
/
o
p
t
/
b
i
n
/
,只对当前会话有效
2
、只对当前用户永久生效:
v
i
m
/
.
b
a
s
h
p
r
o
f
i
l
e
,并执行
s
o
u
r
c
e
/
.
b
a
s
h
p
r
o
f
i
l
e
在
P
A
T
H
=
PATH:/opt/bin/,只对当前会话有效 2、只对当前用户永久生效:vim ~/.bash_profile,并执行source ~/.bash_profile 在PATH=
PATH:/opt/bin/,只对当前会话有效2、只对当前用户永久生效:vim /.bashprofile,并执行source /.bashprofile在PATH=PATH:
H
O
M
E
/
b
i
n
行后添加
:
/
o
p
t
/
b
i
n
/
3
、对系统内所有用户永久生效:
v
i
m
/
e
t
c
/
p
r
o
f
i
l
e
,文件末尾增加
P
A
T
H
=
HOME/bin行后添加 :/opt/bin/ 3、对系统内所有用户永久生效:vim /etc/profile,文件末尾增加 PATH=
HOME/bin行后添加:/opt/bin/3、对系统内所有用户永久生效:vim/etc/profile,文件末尾增加PATH=PATH:/opt/bin
export PATH
ssh ip + 指令,非登录shell操作
[root@localhost ~]# ssh root@192.168.255.1 ls -l /root
root@192.168.255.1's password:
total 52
-rw-------. 1 root root 1293 Jun 2 2022 anaconda-ks.cfg
-rw-r--r-- 1 root root 47508 Aug 9 16:09 tree-1.6.0-10.el7.x86_64.rpm
Chapter Ⅷ 监控和管理进程
进程是已启动的可执行程序的运行中实例。进程由以下组成部分:
- 已分配内存的地址空间
- 安全属性,包括所有权凭据和特权
- 程序代码的一个或多个执行线程
- 进程状态
进程的环境包括:
- 本地和全局变量
- 当前调度上下文
- 分配的系统资源,如文件描述符和网络端口
每个新进程分配有一个唯一进程ID (PID),满足跟踪和安全性之需。所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫init进程,在RHEL8中该init进程是systemd
fork函数可以创造子进程
通过fork,子进程继承安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec其自己的程序代码。通常,父进程在子进程运行期间处于睡眠状态,设置一个在子进程完成时发出信号的请求(wait)。在退出时,子进程已经关闭或丢弃了其资源和环境。唯一剩下的资源称为僵停,是进程表中的一个条目。父进程在子进程退出时收到信号而被唤醒,清理子条目的进程表,由此释放子进程的最后一个资源。然后,父进程继续执行自己的程序代码。
个人理解:父进程创造出多个子进程后,可以多进程运行,然后当子进程任务结束后再由父进程将他们清理
在多任务处理操作系统中,每个CPU(或CPU核心)在一个时间点上处理一个进程。在进程运行时,它对CPU时间和资源分配的直接要求会有变化。进程分配有一个状态,它随着环境要求而改变。
名称 | 标志 | 内核定义的状态名称和描述 |
运行 | R | TASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪。 |
睡眠 | S | TASK_INTERRUPTIBLE:进程正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中。 |
D | TASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应信号。仅在进程中断可能会导致意外设备状态的情况下使用。 | |
K | TASK_KILLABLE:与不可中断的D状态相同,但有所修改,允许等待中的任务响应要被中断(彻底退出)的信号。实用程序通常将可中断的进程显示为D状态。 | |
I | TASK_REPORT_IDLE: D状态的一个子集。在计算负载平均值时,内核不会统计这些进程。用于内核线程。设置了 TASK_UNINTERRUPTABLE和 TASK NOLOAD标志。类似于TASK_KILLABLE,也是D状态的一个子集。它接受致命信号。 | |
已停止 | T | TASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复)。 |
T | TASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志。 | |
僵停 | Z | EXIT ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放。 |
X | EXIT DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到。 |
PS指令
常用的两种命令:ps -ef
和ps aux
如果想查看进程的CPU占用率和内存占用率,可以使用aux
如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef
选项 | 意义 |
---|---|
a | 所有进程,包括其他用户进程 |
u | 以用户为主的格式来显示程序状况 |
x | 显示所有进程,不以终端来区分 |
-e | 显示所有进程 |
-f | 全格式 |
Linux版的ps命令支持三种选项格式:
- UNIX(POSIX)选项,可以分组但必须以短划线开头 ps -aux
- BSD选项,可以分组但不可与短划线同用 ps aux
- GNU长选项,以双短划线开头 ps aux --sort
例如,ps -aux不同于ps aux。 当有x用户的时候ps -aux 相当于x用户执行 ps,UNIX标准要求“ps -aux”打印名为“x”的用户拥有的所有进程,以及所有可能的进程由-a选项选择。如果名为“x”的用户不存在,该ps可能解释该命令以"ps aux"代替,并打印一个警告。这种行为是为了帮助老年人过渡scripqs和习惯。它是脆弱的,易变的,因此不应该依赖。
按内存升序排列:ps aux --sort=rss
按CPU降序排列:ps aux --sort=-%cpu
后台作业
如果利用&符号将包含管道的命令行发送到后台,管道中最后一个命令的PID将用作输出。管道中的所有进程仍是该作业的成员。
通过jobs可以查看后台作业及作业编号
后台→前台:fg %作业编号
前台→后台:ctrl+z,前台作业置于后台后并暂停
启动后台暂停作业:bg %作业编号
中断进程
信号编号 | 短名称 | 定义 | 用途 |
---|---|---|---|
1 | HUP | 挂起 | 用于报告终端控制进程的终止。也用于请求进程重新初始化(重新加载配置)而不终止。 |
2 | INT | 键盘中断 | 导致程序终止。可以被拦截或处理。通过按INTR键序列 (Ctrl+c)发送。 |
3 | QUIT | 键盘退出 | 与SGNT相似;在终止时添加进程转储。通过按QUIT键序列(Ctrl+)发送。 |
9 | KILL | 中断,无法拦截 | 导致立即终止程序。无法被拦截、忽略或处理;总是致命的。 |
15默认 | TERM | 终止 | 导致程序终止。和SIGKILL不同,可以被拦截、忽略或处理。要求程序终止的“友好”方式;允许自我清理。 |
18 | CONT | 继续 | 发送至进程使其恢复(若已停止)。无法被拦截。即使被处理,也始终恢复进程。 |
19 | STOP | 停止,无法拦截 | 暂停进程。无法被拦截或处理。 |
20 | TSPT | 键盘停止 | 和SIGSTOP不同,可以被拦截、忽略或处理。通过按SUSP键序列(Ctrl+z)发送。 |
[root@localhost ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
killall命令可以根据命令名称向多个进程发送信号
pkill相当于是模糊匹配的kill,可以同时杀死多个进程,常用选项如下
选项 | 意义 |
---|---|
-U | 匹配真实用户ID |
-u | 匹配有效用户ID |
-v | 查找不符合条件的 |
实际用户ID(实际组ID):标识当前用户(所属组)是谁,当用户登陆时取自口令文件。
有效用户ID(有效组ID):用来决定我们(当前进程)对文件的访问权(即实际该进程的是以那个用户运行的)。
passwd实际是以用户ID:root,组ID:zzg来运行的,即对PID=8444的进程来说:
它的实际用户ID为zzg(由于是当前用户是zzg)
它的有效用户ID为root
它的实际用户组ID为zzg
它的有效用户组ID为zzg
Chapter Ⅸ 控制服务和守护进程
守护进程一般用进名称+d表示,比如httpd、sshd等
Centos 5:SysV init
Centos 6:Upstart
Centos 7:Systemd
Centos 8:Systemd
systemctl支持管理的单元类型
[mysql@localhost ~]$ systemctl -t help
Available unit types:
service
socket
busname
target
snapshot
device
mount
automount
swap
timer
path
slice
scope
在RHEL8中,netstat和ss功能一样
systemctl cat httpd可以直接查看对应服务的配置文件
systemctl restart、reload、reload-or-restart 进程
- restart,PID改变
- reload,仅重新加载配置文件,PID不变,但部分服务可能不支持
- reload-or-restart,不支持reload的话再restart
systemctl选项
选项 | 意义 |
---|---|
start | 启动 |
stop | 停止 |
restart | 重启 |
enable | 开机启动 |
disable | 禁止开机启动,删除符号链接 |
mask | 屏蔽,建立一个指向/dev/null的符号链接,无法启动 |
unmask | 解除屏蔽 |
disable后,不影响启动该服务
mask后,服务就不无法再次启动
systemctl enable --now httpd
设置开机启动,同时开启该服务
uptime 可以查看负载情况
top指令
s:修改刷新时间,默认位3秒
x:高亮排序,shift+←或shift+→调整排序列
k:结束进程,与kill类似
Chapter Ⅹ 配置和保护SSH
w,查看目前在线的用户信息
pkill -t tty信息,踢掉在线用户
SSH登录
- 密码登录
- 密钥登录
使用密钥登录配置
1、生成公私钥的密钥对
ssh-keygen -t rsa -f .ssh/lab_rsa
-t表示类型,默认位rsa;-f指定生成的密钥对位置及命名,默认在~/.ssh/下,私钥为id_rsa,公钥为id_rsa.pub
创建的时候还可以加入密语,进一步增加密钥的安全性
2、修改被管机器上的ssh配置文件
AuthorizedKeysFile .ssh/authorized_keys
,指定公钥的存储位置
3、将公钥复制到被管机器上
ssh-copy-id -i /home/student/.ssh/id_rsa.pub devops@servera
复制成功后,会在authorized_keys中查到公钥信息
4、使用私钥登录
ssh -i /home/student/.ssh/id_rsa devops@servera
Chapter Ⅺ 分析和存储日志
主要系统日志
日志文件 | 存储的消息类型 |
---|---|
/var/log/messages | 大多数系统日志消息记录在此处。例如包括与身份验证、电子邮件处理和调度作业执行相关的消息一级纯粹与调试相关的消息 |
/var/log/secure | 与安全性和身份验证事件相关的syslog消息 |
/var/log/maillog | 与邮件服务器相关的syslog消息 |
/var/log/cron | 与调度作业执行相关的syslog消息 |
/var/log/boot.log | 与系统启动相关的非syslog控制台消息 |
关于系统日志的两个重要服务:systemd-journald和rsyslogd
systemd-journald记录了最全的所有系统日志;rsyslogd只记录syslog协议产生的日志
rsyslog优先级
代码 | 优先级 | 严重性 |
---|---|---|
0 | emerg | 系统不可用 |
1 | alert | 必须立即采取措施 |
2 | crit | 临界情况 |
3 | err | 非严重错误状况 |
4 | warning | 警告情况 |
5 | notice | 正常但重要的事件 |
6 | info | 信息性事件 |
7 | debug | 调试级别消息 |
/etc/rsyslog.conf中配置syslog日志的规则
产生源.级别 日志路径
如uucp,news.crit /var/log/spooler,表示uucp、news产生的crit级别事件,会存储到/var/log/spooler文件中
日志轮转
logrotate工具会轮转日志文件,以防止它们在含有/var/log目录的文件系统中占用太多空间。轮转日志文件时,使用指示轮转日期的扩展名对其重命名。
手动发送syslog消息
logger -p local7.notice "Log entry created on host"
保留系统日志
默认情况下,系统日志保在在/run/log/journal目录中,这意味着系统重启时这些日志会被清除。/etc/systemd/journald. conf文件中的Storage参数决定系统日志以易失性方式存储,还是在系统重启后持久保留。
- persistent
将日志存储在/var/log/journal 目录中,这可在系统重启后持久保留。 - volatile
将日志存储在易失性/run/log/journal 目录中。因为/run文件系统是临时的,仅存在于运行时内存中,存储在其中的数据(包括系统日志)不会在系统启后持久保留。 - auto(默认)
rsyslog决定要使用持久存储还是易失性存储。如果/var/log/journal 目录存在,那么rsyslog会使用持久存储,否则使用易失性存储。
timedatectl set-timezone Asia/Shanghai
timedatectl set-time 2020-11-3018:41:00
timedatectl set-ntp true/false
systemctl status chronyd
RHEL从7.0开始改用chrony同步时间,原ntp同步方式也可以使用,但要安装ntp服务
chronyc sources -v
rpm -qc chrony
q:query
c:configfiles
Chapter Ⅻ 管理网络
RHEL 7:使用network或NetworkManager服务管理网络均可
RHEL 8:只用NetworkManager管理网络
接口命名
ens:Ethernet s 扩展槽的索引号(独立)
eno:Ethernet o 集成设备的设备索引号(集成)
enp4s0:ps 基于总线及槽的拓扑结构进行命名
enp4s0f0:function 虚拟接口
ip link show
:查看链路状态
ip -s link show
:查看链路收发包信息
ip addr
:查看IP地址
ip route
:查看路由表
tracepath、traceroute都可以查看路径,其中tracepath是系统默认安装的,都使用UDP协议
ss等同于netstat
选项 | 描述 |
---|---|
-n | 显示接口和端口的编号,而不显示名称 |
-t | 显示TCP套接字 |
-u | 显示UDP套接字 |
-l | 仅显示侦听中的套接字 |
-a | 显示所有(侦听中和已建立的)套接字 |
-p | 显示使用套接字的进程 |
nmcli命令
连接配置文件(Connection)和物理网口,一个物理网口可以有多个配置文件,但只能有一个生效
nmcli device status
nmcli device disconnect ens33; nmcli connect ens33
注:ens33是物理网口device;Wired connection 1是连接文件,相当于物理网口的一个配置
nmcli connection show
nmcli connection add con-name test-port ifname ens33 type ethernet ipv4.method manual ipv4.address 172.25.250.100/24 ipv4.gateway 172.25.250.254
nmcli connection modify test-port ipv4.dns 172.25.250.254
nmcli connection reload test-port
nmcli connection down test-port; nmcli connection up test-port
hostname命令
永久修改:hostnamectl set-hostname xxx
或者 vim /etc/hostname
临时修改:hostname xxx
/etc/resolv.conf
search作用:补全要访问的短域名
比如访问servera,不全后就是servera.lab.example.com
Chapter XIII 归档和传输文件
压缩和解压
tar操作
cf压缩;xf解压;tf查看
选项 | 描述 |
---|---|
-c, --create | 创建存档,压缩 |
-x, --extract | 从存档中提取,解压 |
-t, --list | 列出存档的目录,查看 |
-f, --file | 文件名,需要放在参数最后面 |
-C | 指定存放解压文件的路径 |
三种存档类型gzip、bzip2和xz
选项 | 特点 |
---|---|
-z, --gzip | 速度快,压缩率低 |
-j, --bzip2 | 居中 |
-J, --xz | 速度慢。压缩率高 |
SCP指令
Secure CoPy,安全传输文件
本机→远端:scp local_path/file_name user@host:/path
远端→本机:scp user@host:/path local_path/file_name
scp /etc/yum.conf student@servera:/home/student/
如果传送目录,用-r选项
Chapter XIV 安装和更新软件包
安装方式 = { 源码安装:源码形式发布,需要编译成二进制后使用; . c o n f i g u r e ∣ m a k e ∣ m a k e i n s t a l l R P M ( R e d h a t P a c k a g e M a n a g e r ):管理方便,但依赖关系复杂 Y U M : R P M 的前端程序,可自动解决 R P M 的依赖关系 安装方式=\left\{ \begin{matrix} 源码安装:源码形式发布,需要编译成二进制后使用; .configure | make | make install \\ RPM(Redhat Package Manager):管理方便,但依赖关系复杂 \\ YUM:RPM的前端程序,可自动解决RPM的依赖关系 \end{matrix} \right. 安装方式=⎩ ⎨ ⎧源码安装:源码形式发布,需要编译成二进制后使用;.configure∣make∣makeinstallRPM(RedhatPackageManager):管理方便,但依赖关系复杂YUM:RPM的前端程序,可自动解决RPM的依赖关系
软件包的命名
name-version-release.architecture.rpm
NAME:软件名名称
VERSION:原始软件的版本号
RELEASE:发行版号
ARCH:编译的软件包运行的处理架构;noarch标识不限定架构;x86_64表示64位的x86指令集;aarch64表示64位的ARMv8
RPM更新软件包:先删除旧版本,再安装新版本
检查RPM安装包
命令 | 说明 |
---|---|
rpm -qa | 列出当前安装的所有RPM包 |
rpm -q NAME | 显示系统上安装的NAME版本 |
rpm -qi NAME | 显示有关软件包的详细信息 |
rpm -ql NAME | 列出软件包中含有的所有文件 |
rpm -qc NAME | 列出软件包中含有的配置文件 |
rpm- qd NAME | 列出软件包中含有的文档文件 |
rpm -q --change-log NAME | 查询软件包的更新信息 |
rpm -q --scripts NAME | 查询安装、卸载前后执行的脚本 |
rpm -qf 文件路径 | 查看一个文件是由哪个包安装的 |
从软件包查文件
从文件查软件包
安装:rpm -ivh 软件包
更新:rpm -Uvh 软件包
卸载:rpm -e 软件包
YUM安装
在RHEL8中把软件源分成了两部分,分别是:
BaseOS 存储库 - BaseOS 存储库以传统 RPM 包的形式提供底层核心 OS 内容
AppStream 存储库 - Application Stream 存储库提供您可能希望在给定用户空间中运行的所有应用程序
yum仓库用来存放所有的现有的.rpm包,当使用yum安装一个rpm包时,需要依赖关系,会自动在仓库中查找依赖软件并安装。仓库可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、统一的网络仓库。安装的时候,会现在RPM包,然后再在安装。
命令 | 说明 |
---|---|
yum list | 列出已安装和可用的软件包 |
yum group list | 列出已安装和可用的组 |
yum search KEYWORD | 按关键字搜索软件包 |
yum info PACKAGE | 显示软件包的详细信息 |
yum install PACKAGE | 安装软件包 |
yum group install GROUP | 安装软件包组 |
yum update | 更新所有软件包 |
yum remove PACKAGE | 删除软件包 |
yum history | 显示安装和删除历史 |
所有安装和删除事务的日志都记录在/var/log/dnf.rpm.log中
创建YUM仓库
本质:在
/
e
t
c
/
y
u
m
.
r
e
p
o
s
.
d
/
下创建
r
e
p
o
文件
{
手工创建
y
u
m
−
c
o
n
f
i
g
−
m
a
n
a
g
e
r
指令
本质:在/etc/yum.repos.d/下创建repo文件\left\{ \begin{matrix} 手工创建 \\ yum-config-manager指令 \end{matrix} \right.
本质:在/etc/yum.repos.d/下创建repo文件{手工创建yum−config−manager指令
仓库类型
{
本地
y
u
m
源仓库
网络
y
u
m
源仓库
自建
y
u
m
源仓库
仓库类型\left\{ \begin{matrix} 本地yum源仓库 \\ 网络yum源仓库 \\ 自建yum源仓库 \end{matrix} \right.
仓库类型⎩
⎨
⎧本地yum源仓库网络yum源仓库自建yum源仓库
参数 | 说明 |
---|---|
[base] | 软件源的名称,自定义,所有repo文件中必须唯一,不能有空格 |
name | 软件仓库的名称 |
mirrorlist | 镜像列表,多个镜像网站,一般不用,因为部分镜像在国外,搜索起来很慢 |
baseurl | 镜像URL地址,唯一的一个,是搜索RPM包的关键 |
enable | 0表示禁用 |
gpgcheck | 0表示不进行gpg校验 |
gpgkey | 指定校验的gpg密钥文件 |
priority | 优先级,1为最高,设置不同repo的执行顺序 |
Chapter XV 访问Linux文件系统
硬盘命名
s
d
a
1
{
s
:
s
c
s
i
接口
d
:磁盘
a
:第几块磁盘
1
:第几个分区
sda1\left\{ \begin{matrix} s:scsi接口 \\ d:磁盘 \\ a:第几块磁盘 \\ 1:第几个分区 \end{matrix} \right.
sda1⎩
⎨
⎧s:scsi接口d:磁盘a:第几块磁盘1:第几个分区
vda:虚拟磁盘
nvme0p1:nvme磁盘,0表示第几块磁盘,1表示第几个分区(partition)
df -h:1G=1024M
df -H:1G=1000M
进制方式不一样,会导致识别出来的空间大小存在一定误差
硬盘 → 分区 → 格式化 → 文件系统 → 挂载
-
分区:fdisk、parted
-
格式化:mkfs
-
挂载:临时挂载mount;永久挂载/etc/fstab
fstab挂载的时候推荐使用UUID(用磁盘命名挂载,可能在磁盘命名错乱的时候造成系统崩溃)
查看UUID的方法:
lsblk -fp /dev/sda1
blkid /dev/sda1
取消挂载umount时如果报错,可能是有用户正在使用此分区,可用lsof查看谁在使用
查找文件
locate:搜索预生成的文件名或文件路径,从mlocate数据库中查找信息
find:通过爬取整个文件系统层次结构来实时搜索 -
locate命令
locate数据库每日自动更新,也可以通过updatedb命令强制即时更新
-i 忽略大小写
-n 限制搜索结果数量 -
find命令
选项 | 说明 | 示例 |
---|---|---|
-iname | 忽略大小写 | find /etc -iname test |
-f | 搜索文件 | find /etc -name test -f |
-d | 搜索文件夹 | find /etc -name test -d |
-user | 所有者 | find /etc -name test -user student |
-group | 所属组 | find /etc -name test -group student |
-size | 大小 | find /etc -name test -size 10M 查找大小10M的文件find /etc -name test -size +10M 大于10M的文件find /etc -name test -size -10M 小于10M的文件 |
-mmin | 修改时间 | find /etc -mmin -10 查找10分钟内修改的文件find /etc -mmin +10 查找10分钟前修改的文件 |
find -exec
find / -user student -exec cp -a {} /root/dfiles \;
在根目录/下查找student用户的文件,并copy到/root/dfiles目录下
相当于是把查找后的结果,即exec前执行的结果放到{}中
Chapter XVI 分析服务器和获取支持
cockpit:WEB控制台监控系统
使用TCP:9090端口
firewalld添加cockpit服务
sudo firewalld-cmd --add-service=cockpit --permanent
sudo firewalld-cmd --reload
“Reuse my password for privileged tasks”,允许使用sudo特权