首页 > 系统相关 >Linux备忘录

Linux备忘录

时间:2023-05-02 16:11:33浏览次数:39  
标签:文件 命令 指定 dev 备忘录 Linux 进程 root

Linux备忘录

文件目录

- /bin:命令目录
- /sbin:超级命令目录,只有admin可以执行
- /boot:系统目录,等同于C盘
- /dev:设备文件目录,SSD、光驱、U盘,/dev/sr0代表光驱,必须都要先挂载
- /etc:配置文件目录。软件安装完成后,配置文件存放在此目录(重要)
- /home:user的家目录
- /root:admin的家目录
- /media:挂载目录,挂载光盘以及软盘
- /mnt:挂载目录,挂载额外的设备,如U盘、SSD、移动硬盘
- /opt:第三方软件目录,放置和安装其他软件的位置,手工安装的源码包软件
- /usr/local:软件目录
- /proc:虚拟文件系统,保存在内存中,主要保存于内核、进程、外部设备状态和网络状态,如/proc/devices /proc/net
- /sys:虚拟文件系统,保存在内存中,主要保存于内核相关信息
- /tmp:临时文件目录,在这个目录下,所有用户都可以访问和写入
- /var:经常变化的文件目录,网页文件、数据文件、日志文件

路径

绝对路径:ls /home/username/desktop
相对路径:../:表示上级目录
	./:表示当前目录
	文件夹名称/ :表示下级目录(下一级)

命令

- stat 查看文件信息
- which 查看可执行文件的位置
- wheris 查看某个命令的位置
- alias 命令设置别名
- hostname-ctl 更改主机名字
- dmidecode 查看系统服务器信息
- dmesg 查看服务器硬件启动日志
- ip a 查看系统地址
- date 查看系统时间日期
- ethtool 查看网卡信息
- source 初始化文件
- locate 依据名字查找文件
- rz/sz 上传/下载文件

ls 查看文件及目录

- ls = list show
- ls / #根目录所有目录
- ls -l 或 ll #详细显示
- ls -lh #详细显示以及显示文件大小
- ls -a #显示所有文件及目录

mkdir 创建目录

- mkdir test
- mkdir -p test/test1
- mkdir -m 777 tset4

ln 链接

- -s:创建软链接。
- -f:强制创建链接文件,如果文件已经存在则覆盖。
- -i:交互式询问是否覆盖已存在的文件。
- -n:创建软链接时,如果原文件是一个目录,则创建一个新目录作为链接文件。

ln -sf ./test.txt 123
ln ./test123.txt test

cd 切换目录

change directory 切换当前目录
cd /usr/bin #跳转到/usr/bin
cd ~ #到/home
cd ../../ #到目前目录的上两层

rm 删除文件及目录

- -i:删除前进行确认提示;
- -r:递归删除目录及其子目录;
- -f:强制删除,不进行确认提示。

删除文件file1:
rm file1
删除目录dir1及其子目录和文件:
rm -r dir1
删除当前目录下所有以“.txt”结尾的文件,且不进行确认提示:
rm -f *.txt

在删除文件时,可以使用通配符(如“*”、“?”等)匹配多个文件,例如删除以“.log”结尾的所有文件:
rm *.log

删除所有以“.bak”结尾的文件,并自动备份被删除的文件:
rm --backup=numbered *.bak

删除目录及其子目录下某个类型的所有文件,可以使用“find”命令和“rm”命令的组合,例如删除所有以“.log”结尾的文件:
find dir1 -name "*.log" -type f -exec rm {} \;
“dir1”为要删除的目录,“-name”选项指定文件名模式,“-type f”选项指定要删除的类型为文件,
“-exec”选项执行“rm”命令并删除符合条件的文件。

kill/pkill 结束进程

- -s signal:指定要发送的信号类型,例如kill -s SIGTERM PID表示发送SIGTERM信号终止进程。
- -l:列出所有可用的信号类型。
- -n signum:指定信号类型的数字编号。
- -f:强制终止进程,不给进程发送信号。
通常,使用kill命令终止进程的流程如下:
1. 使用ps命令或top命令查看进程的PID。
2. 使用kill命令发送信号终止进程。

kill 12345
kill -9 12345
pkill -9 nginx

wc 计数

word count
- -c:计算文件中的字节数 bytes;
- -w:计算文件中的字数 word;
- -l:计算文件中的行数 lines;
- -m:计算文件中的字符数(不包括换行符);
- -L:计算文件中最长行的长度;

wc example.txt
计算一个名为“example.txt”的文件中的行数、字节数和字数

wc -l example.txt
只输出文件中的行数。

cat example.txt | wc
计算一个名为“example.txt”的文件中的行数、字节数和字数

grep -v "^$" file.txt | wc -l
使用grep命令将空行过滤掉后再进行统计

count=$(wc -l file.txt | awk '{print $1}')
在Shell脚本中使用,将wc命令的输出保存到变量中
使用wc命令统计文件中的行数,并使用awk命令提取结果中的第一个字段(即行数),最后将结果保存到变量count中。

find 查找文件及目录

- -name PATTERN:按文件名匹配,PATTERN为文件名的通配符,可以使用*、?等;
- -type TYPE:按类型匹配,TYPE为f表示文件,d表示目录,l表示符号链接等;
- -size [+-]SIZE:按文件大小匹配,SIZE为文件大小,可使用k、M等单位表示,+表示大于SIZE,-表示小于SIZE;
- -mtime [+-]DAYS:按文件修改时间匹配,DAYS为天数,+表示在DAYS天之前修改过,-表示在DAYS天之内修改过;
- -maxdepth N:设置查找的目录深度,只查找N级目录;
- -mindepth N:设置查找的目录深度,从第N级目录开始查找。
- -print:将匹配的文件名输出到标准输出流中;
- -delete:删除匹配的文件或目录;
- -exec command {} \;:对匹配的文件或目录执行特定的命令,{}表示匹配的文件名或目录名。

要查找当前目录及其子目录中所有扩展名为txt的文件:
find . -name "*.txt" -print

要查找当前目录及其子目录中所有大小大于1MB的文件,并将它们删除:
find . -type f -size +1M -delete

要查找当前目录及其子目录中所有修改时间在7天之前的文件,并将它们移动到另一个目录中,可以使用以下命令:
find . -type f -mtime +7 -exec mv {} /path/to/destination \;

要查找当前目录及其子目录中所有以数字开头的txt文件,可以使用正则表达式匹配文件名:
find . -regex './[0-9]+.*\.txt' -print

要查找当前目录及其子目录中所有大小大于1MB且修改时间在7天之前的文件:
find . -type f -size +1M -mtime +7 -print

要查找当前目录及其子目录中所有路径名中包含logs的文件或目录,可以使用通配符匹配文件路径:
find . -path '*logs*' -print

xargs 传参

- -n:指定每次传递给command的参数个数,默认为全部参数。
- -I:指定替换字符串,xargs会将替换字符串替换为从标准输入中读取的参数。
- -t:输出command执行的命令行。
- -p:在执行command之前提示用户确认。
- -r:当从标准输入中读取不到参数时,不执行command。
- -s:指定从标准输入中读取的参数总大小的上限。

grep 查找文件、目录、文件中的字段

- -i:忽略大小写;
- -v:输出不包含匹配字符串的行;
- -n:输出行号;
- -c:输出匹配字符串的行数;
- -r:递归查找指定目录及其子目录中的文件。

假设我们有一个名为test.txt的文本文件,包含以下内容:
hello world
this is a test file
hello grep
grep command is useful

查找包含字符串grep的行
grep grep test.txt

该命令将输出以下结果:
hello grep
grep command is useful

查找包含字符串hello或world的行
grep 'hello\|world' test.txt

该命令将输出以下结果:
hello world
hello grep

查找所有包含字符串hello的行,并输出行号
grep -n hello test.txt

该命令将输出以下结果:
1:hello world
3:hello grep

递归查找当前目录及其子目录中所有txt文件中包含字符串hello的行,并输出文件名和行号
grep -r -n hello *.txt

该命令将输出所有包含字符串hello的行,并在每行前面加上文件名和行号,例如:
test.txt:1:hello world
test.txt:3:hello grep
subdir/test2.txt:2:hello there

wget 下载

- -O:指定下载文件的保存路径和文件名,如-O /path/to/file指定将文件下载到/path/to/file;
- -c:支持断点续传,如果下载过程中中断了,可以使用-c选项继续下载;
- -r:递归下载整个目录,可以使用-r选项指定下载深度;
- -np:不下载父级目录,如果下载目录时需要限制下载深度,可以使用-np选项;
- -P:指定下载文件的保存目录,如-P /path/to/dir指定将文件下载到/path/to/dir目录下;
- -T:设置下载超时时间,单位为秒,如-T 60表示下载超过60秒就超时;
- -q:静默模式,不输出下载进度信息,只显示错误信息;
- -U:设置User-Agent请求头,可以伪装浏览器或其他工具进行下载。

例如,下载一个文件:
wget https://example.com/file.zip

下载整个目录:
wget -r -np https://example.com/dir/

其中,-r选项表示递归下载,-np选项表示不下载父级目录,https://example.com/dir/表示要下载的目录URL。

curl http访问

- -o:指定下载文件的保存路径和文件名,如-o /path/to/file指定将文件下载到/path/to/file;
- -O:将下载文件保存到当前目录下,文件名与URL的最后一段相同;
- -C:支持断点续传,如果下载过程中中断了,可以使用-C选项继续下载;
- -I:只显示HTTP响应头信息,不下载文件;
- -H:设置HTTP请求头,如-H "Content-Type: application/json"表示设置Content-Type请求头;
- -d:发送POST请求的数据,如-d "key=value"表示发送key=value的POST数据;
- -u:设置HTTP认证信息,如-u username:password表示使用Basic认证方式进行认证;
- -k:跳过SSL证书验证,可以在HTTPS请求时使用-k选项;
- -s:静默模式,不输出请求和响应信息,只显示错误信息。

例如,下载一个文件:
curl -o file.zip https://example.com/file.zip

下载整个目录:
curl -O -J -L -R -r 0-9 https://example.com/dir/*

其中,-O选项表示将下载文件保存到当前目录下,-J选项表示保存文件名与URL的最后一段相同,
-L选项表示跟随重定向,-R选项表示支持远程时间戳,-r选项表示支持断点续传。

watch 实时查看

- -n:指定执行命令的时间间隔,单位为秒,如-n 10表示每10秒执行一次命令;
- -d:高亮显示命令输出中的变化部分,方便观察变化;
- -t:不显示watch命令的标题行,只显示命令输出;
- -c:清空终端屏幕,每次执行命令前先清空终端屏幕;
- -x:使用命令的输出作为终端窗口标题,方便识别不同的watch命令。

例如,使用watch命令监控系统的负载情况:
watch -n 1 uptime

其中,-n 1选项表示每秒执行一次uptime命令,输出系统的负载情况。

例如,结合tail命令实时观察日志文件的变化:
watch -n 1 tail -n 10 /var/log/syslog

其中,-n 1选项表示每秒执行一次tail命令,输出日志文件的最后10行。

输出重定向

- >:将标准输出流重定向到指定文件中,如果文件不存在则创建,如果文件已存在则覆盖原内容。
- >>:将标准输出流重定向到指定文件中,如果文件不存在则创建,如果文件已存在则在文件末尾追加内容。
- 2>:将标准错误输出流重定向到指定文件中。
- &>:将标准输出流和标准错误输出流都重定向到指定文件中。
- |:将前一个命令的输出作为后一个命令的输入。
下面,我们通过一些示例来演示输出重定向的使用。

1.将程序输出保存到文件中
假设我们有一个名为test.txt的文本文件,包含以下内容:
hello world
this is a test file

现在,我们要将ls命令的输出保存到test.txt文件中,可以使用以下命令:
ls > test.txt
该命令将ls命令的输出保存到test.txt文件中。如果test.txt文件不存在,则创建该文件;如果文件已存在,则覆盖原内容。

2.将程序输出追加到文件末尾
如果我们想把ls命令的输出追加到test.txt文件的末尾,而不是覆盖原内容,可以使用以下命令:
ls >> test.txt
该命令将ls命令的输出追加到test.txt文件的末尾。

3.将程序错误输出保存到文件中
有时候,程序的错误输出可能比较重要,我们也需要将其保存到文件中。例如,如果我们执行一个不存在的命令,系统会输出错误信息:
bash: abc: command not found

如果我们要将该错误信息保存到error.log文件中,可以使用以下命令:
abc 2> error.log
该命令将执行abc命令,由于该命令不存在,系统会输出错误信息,而该错误信息将被重定向到error.log文件中。

4.将标准输出流和标准错误输出流都重定向到文件中
有时候,我们既需要将标准输出流重定向到文件中,又需要将标准错误输出流重定向到文件中,可以使用以下命令:
ls &> output.log
该命令将ls命令的标准输出流和标准错误输出流都重定向到output.log文件中。

5.将一个命令的输出作为另一个命令的输入
查找当前目录及其子目录中所有txt文件中包含字符串hello的行,可以使用以下命令:
grep hello *.txt

将结果保存到文件中,可以使用输出重定向符号,例如:
grep hello *.txt > result.txt
该命令将查找当前目录中所有txt文件中包含字符串hello的行,并将结果保存到result.txt文件中。

VIM

命令模式

1. 移动光标
在命令模式下,可以使用以下命令来移动光标:
- h:向左移动一个字符。
- j:向下移动一行。
- k:向上移动一行。
- l:向右移动一个字符。
- w:向右移动一个单词。
- b:向左移动一个单词。
- 0:移动到当前行的开头。
- $:移动到当前行的结尾。
- gg:移动到文本的第一行。
- G:移动到文本的最后一行。
2. 插入文本
在命令模式下,可以使用以下命令来插入文本:
- i:在当前光标位置前插入文本。
- I:在当前行的开头插入文本。
- a:在当前光标位置后插入文本。
- A:在当前行的结尾插入文本。
- o:在当前行的下方插入一行。
- O:在当前行的上方插入一行。
3. 删除文本
在命令模式下,可以使用以下命令来删除文本:
- x:删除当前光标所在位置的字符。
- dw:删除当前光标位置到单词结尾的文本。
- d0:删除当前光标位置到行开头的文本。
- d$:删除当前光标位置到行结尾的文本。
- dd:删除整行文本。
4. 复制和粘贴文本
在命令模式下,可以使用以下命令来复制和粘贴文本:
- yy:复制当前行。
- yw:复制当前光标位置到单词结尾的文本。
- p:将复制的文本粘贴到当前光标位置的下方。
- P:将复制的文本粘贴到当前光标位置的上方。
5. 撤销和恢复操作
在命令模式下,可以使用以下命令来撤销和恢复操作:
- u:撤销上一次操作。
- Ctrl+r:恢复上一次撤销的操作。
6. 查找和替换文本
在命令模式下,可以使用以下命令来查找和替换文本:
- /pattern:搜索文本中的模式。
- n:在查找模式时,移动到下一个匹配项。
- N:在查找模式时,移动到上一个匹配项。
- :s/old/new/g:将当前行中的所有“old”替换为“new”。
- :%s/old/new/g:将文本中所有的“old”替换为“new”。
7. 块操作
在命令模式下,可以使用以下命令来执行块操作:
- Ctrl+v:进入可视块模式,可以选择一个矩形块。
- Shift+i:在可视块模式下,进入插入模式,可以在选择的矩形块中插入文本。
- d:在可视块模式下,删除选择的矩形块中的所有文本。

末行模式

1. 保存文件
- :w:保存文件。
- :w filename:将文件保存为指定的文件名。
2. 退出VIM
- :q:退出VIM。
- :q!:强制退出VIM,不保存修改。
- :wq:保存并退出VIM。
3. 查找和替换文本
- /pattern:搜索文本中的模式。
- :s/old/new/g:将当前行中的所有“old”替换为“new”。
- :%s/old/new/g:将文本中所有的“old”替换为“new”。
4. 移动光标
- :n:将光标移动到第n行。
- :$:将光标移动到文本的最后一行。
- :1:将光标移动到文本的第一行。
5. 显示和隐藏行号
- :set number:显示行号。
- :set nonumber:隐藏行号。
6. 执行外部命令
- :!command:执行外部命令,例如:!ls。
7. 插入文本
- :a:在当前行的后面插入文本。
- :i:在当前行的前面插入文本。
- :o:在当前行下面插入一行并插入文本。
8. 删除文本
- :d:删除当前行。
- :%d:删除整个文本。
9. 执行宏
- :@x:执行名称为x的宏。
10.代码着色
- :syntax on/off

可视化模式

VIM中的可视化模式用于选择文本块,用户可以使用以下命令来执行各种操作:
1. 进入可视化模式
- v:进入可视化模式。
- V:进入行可视化模式。
- Ctrl+v:进入块可视化模式。
2. 选择文本块
- j:向下选择一行。
- k:向上选择一行。
- h:向左选择一个字符。
- l:向右选择一个字符。
- w:选择下一个单词。
- e:选择下一个单词的结尾。
- b:选择上一个单词的开头。
3. 操作文本块
- d:删除选择的文本块。
- y:复制选择的文本块。
- p:将复制的文本块粘贴到当前光标位置下面。
- P:将复制的文本块粘贴到当前光标位置上面。
- I:在选择的文本块的开头插入文本。
- A:在选择的文本块的末尾插入文本。
4. 取消选择
- Esc:退出可视化模式。

管道符

0:标准输入。进程需要外部的某些程序传递相应的参数,才能正常运行
1:标准输出,程序或命令正确的执行结果,称为标准输出
2:标准错误,程序或命令错误的执行结果,称为标准错误

用户管理

用户组

储存在/etc/group

groupadd
-g 指定新建工作组的 id

groupmod
-g 设置使用的群组识别码。
-n 设置使用的群组名称。

1. 查看用户组信息
在进行用户组添加操作之前,我们需要先了解当前系统中已经存在的用户组。我们可以使用以下命令来查看当前系统中已经存在的用户组:
cat /etc/group

2. 创建用户组
如果我们需要创建一个新的用户组,可以使用以下命令:
sudo groupadd <group_name>

3. 验证用户组添加操作
添加用户到用户组之后,我们可以使用以下命令来验证用户组添加操作是否成功:
groups <username>

4. 修改用户组信息
如果需要修改已经存在的用户组信息,可以使用以下命令进行修改:
sudo groupmod <group_name>

5. 删除用户组
如果我们需要删除一个已经存在的用户组,可以使用以下命令进行删除:
sudo groupdel <group_name>

用户

useradd [OPTIONS] USERNAME

其中,OPTIONS是可选参数,用于设置新用户的属性和特征,USERNAME是新用户的用户名。下面是一些常用的OPTIONS选项:
- -c COMMENT:设置用户的注释信息。
- -d HOME_DIR:设置用户的主目录路径。
- -e EXPIRE_DATE:设置用户的过期日期。
- -f INACTIVE_DAYS:设置用户的账户失效时间。
- -g PRIMARY_GROUP:设置用户的主组名称或GID。
- -G SECONDARY_GROUP:设置用户的附加组名称或GID。
- -m:自动创建用户的主目录。
- -s SHELL:设置用户的默认Shell程序。
	/bin/bash => 给人使用
	/sbin/nologin => 给软件使用
- -u UID:设置用户的UID。
- -p PASSWORD:设置用户的密码,需要使用加密后的密码。
- -r:创建系统账户,该账户的UID和GID值大于等于500。
- -Z:设置用户的SELinux安全上下文。

查看系统默认值,可以使用以下命令:
grep UID_MIN /etc/login.defs
grep UID_MAX /etc/login.defs
grep GID_MIN /etc/login.defs
grep GID_MAX /etc/login.defs


1. 打开终端,并以root用户身份登录。

2. 使用以下命令创建新的用户:
sudo adduser <username>

3. 如果需要为新用户设置密码,可以使用以下命令进行密码设置:
sudo passwd <username>

4. 如果需要将新用户添加到某个特定的用户组中,可以使用以下命令进行用户组添加操作:
sudo usermod -aG <group_name> <username>

5. 验证新用户是否添加成功,可以使用以下命令查看系统中已经存在的用户:
cat /etc/passwd

6. 退出root用户身份。
exit

/etc/passwd

root:x:0:0:root:/root:/bin/bash

- root:用户名。
- x:密码加密方式,x表示密码已经加密并存储在/etc/shadow文件中。
- 0:UID值,表示用户的唯一标识符。
- 0:GID值,表示用户所属的主组。
- root:注释信息,通常包括用户的姓名、电话号码、电子邮箱等信息。useradd -c "信息" 用户名称
- /root:主目录路径,表示用户的主目录所在的路径。用户默认在/home
- /bin/bash:默认Shell程序,表示用户登录后默认使用的Shell程序。
	/bin/bash => 给人使用
	/sbin/nologin => 给软件使用

文件权限

三种基本权限:读取、写入和执行。这三种权限分别用r、w和x表示,对应于文件的读取、写入和执行权限。
在文件名前面,还有一些符号用于表示文件的类型和权限,它们包括:
- `-`:表示文件类型为普通文件。
- `d`:表示文件类型为目录。
- `l`:表示文件类型为链接文件。
- `b`:表示文件类型为块设备文件。
- `c`:表示文件类型为字符设备文件。
- `s`:表示文件类型为套接字文件。
- `p`:表示文件类型为命名管道文件。

文件的权限可以分为三类:所有者权限、组权限和其他用户权限。
数字表示方法:rwx表示111,r-x表示101,r--表示100,以此类推。
rwxr-xr--表示文件所有者具有读取、写入和执行权限,用户组具有读取和执行权限,其他用户只有读取权限。
符号表示方法:每种权限位组都可以使用符号表示,r表示读取权限,w表示写入权限,x表示执行权限。
u表示文件所有者,g表示用户组,o表示其他用户,a表示所有用户。

使用符号表示文件的权限,可以使用如下格式:
[user|group|other][+|-|=][rwx]
其中,user表示文件所有者,group表示用户组,other表示其他用户;
+表示增加权限,-表示去除权限,=表示设置权限;
rwx表示读取、写入、执行权限。

要将文件的所有者权限设置为读取和执行,可以使用命令:
chmod u+rx filename
文件权限的设置可以使用`chmod`命令,例如:
chmod 777 filename
这个命令将文件的所有者、用户组和其他用户的权限都设置为读取、写入和执行。

除了基本的文件权限之外,Linux系统还提供了其他一些高级的文件权限设置方式,例如:
1. SUID权限:当一个文件被设置了SUID权限时,任何用户都可以以该文件所有者的身份运行它。
这种权限通常用于一些需要特殊权限才能执行的程序,例如passwd命令。
2. SGID权限:当一个文件被设置了SGID权限时,任何用户都可以以该文件所属用户组的身份运行它。
这种权限通常用于共享文件夹和共享文件的管理。
3. Sticky权限:当一个目录被设置了Sticky权限时,只有目录所有者和文件所有者才能删除其中的文件。
这种权限通常用于共享目录和公共计算机上的临时文件夹。

这些高级权限可以使用chmod命令设置,例如:
chmod u+s filename # 设置SUID权限
chmod g+s dirname # 设置SGID权限
chmod +t dirname # 设置Sticky权限

除了chmod命令之外,还可以使用chown和chgrp命令来改变文件的所有者和用户组,例如:
chown user filename # 将文件所有者设置为user
chgrp group filename # 将文件用户组设置为group

getfacl/setfacl 文件访问权限

getfacl [选项] 文件或目录
- -R:递归查看目录下所有文件和子目录的ACL信息。
- -p:以可重现的格式输出ACL信息。
- -s:只显示基本ACL信息。

setfacl [选项] 权限规则 文件或目录
- -R:递归设置目录下所有文件和子目录的ACL信息。
- -m:修改ACL信息。
- -x:删除ACL信息。
- -d:设置默认ACL信息。

查看CPU

1. `lscpu`:该命令可以列出CPU的详细信息,包括CPU型号、架构、核心数、线程数、缓存大小等等。例如:
$ lscpu
2. `cat /proc/cpuinfo`:该命令可以列出CPU的详细信息,包括CPU型号、缓存大小、时钟频率等等。例如:
$ cat /proc/cpuinfo
3. `top`:该命令可以实时监视系统的CPU占用情况。
在命令行中输入top,然后按下Shift+P键,显示CPU占用率的高低对进程进行排序,并显示每个进程所占用的CPU时间和CPU占用率。

$ top
top - 10:51:06 up 1 day,  2:11,  1 user,  load average: 0.23, 0.22, 0.25
Tasks: 210

uname -a 查看内核信息

系统服务

1. 启动服务
systemctl start 服务名

例如,启动Apache服务:
systemctl start httpd.service

2. 停止服务
systemctl stop 服务名

例如,停止Apache服务:
systemctl stop httpd.service

3. 重启服务
systemctl restart 服务名

例如,重启Apache服务:
systemctl restart httpd.service

4. 查看服务状态
systemctl status 服务名

例如,查看Apache服务状态:
systemctl status httpd.service

5. 激活服务
systemctl enable 服务名

例如,激活Apache服务:
systemctl enable httpd.service

6. 禁用服务
systemctl disable 服务名

例如,禁用Apache服务:
systemctl disable httpd.service

需要注意的是,systemctl命令需要root权限才能执行。

systemctl(systemd)

- 启动服务:systemctl start service_name
- 停止服务:systemctl stop service_name
- 重启服务:systemctl restart service_name
- 查看服务状态:systemctl status service_name
- 设置服务开机启动:systemctl enable service_name
- 取消服务开机启动:systemctl disable service_name
- 查看服务日志:systemctl status -n 50 service_name (显示最近50行日志)
- 查看服务配置文件:systemctl cat service_name
- 查看服务依赖关系:systemctl list-dependencies service_name
- 查看所有已启动的服务:systemctl list-units --type=service

service/chkconfig

service 服务名 start|stop|restart|status
- start:启动服务。
- stop:停止服务。
- restart:重启服务。
- status:查看服务状态。

chkconfig --level 运行级别 服务名 on|off|reset
- on:设置服务在指定运行级别下开机自启动。
- off:关闭服务在指定运行级别下的开机自启动。
- reset:重置服务在指定运行级别下的开机自启动状态。

进程优先级调整

1.top
top -r pid

2.renice
renice -5 pid

3.nice
kill pid
systemctl stop command
nice -n -5 command

sshd ssh服务

- /etc/ssh/sshd_config:sshd服务的主配置文件,包含了sshd服务的各种参数和选项。
- Port:sshd服务监听的端口号,默认为22。
- PermitRootLogin:是否允许root用户通过ssh登录,默认为yes。
- PasswordAuthentication:是否允许使用密码进行ssh登录,默认为yes。
- PubkeyAuthentication:是否允许使用公钥进行ssh登录,默认为yes。
- UsePAM:是否启用PAM(Pluggable Authentication Modules)认证,默认为yes。
- AllowUsers:允许哪些用户通过ssh登录。
- AllowGroups:允许哪些用户组的成员通过ssh登录。
- DenyUsers:禁止哪些用户通过ssh登录。
- DenyGroups:禁止哪些用户组的成员通过ssh登录。
- LogLevel:sshd服务的日志级别,默认为INFO。
- /var/log/auth.log:sshd服务的日志文件,记录了sshd服务的各种操作和事件。

ntp 时间同步

ntp.org.cn

ntpdate domain

crontab 任务规划

crontab [-u 用户名] [-l|-e|-r] [文件名]
- -u:指定要操作的用户。
- -l:列出指定用户的cron任务。
- -e:编辑指定用户的cron任务。
- -r:删除指定用户的cron任务。

- @reboot:在系统启动时执行任务。
- @yearly、@annually:每年执行一次任务。
- @monthly:每月执行一次任务。
- @weekly:每周执行一次任务。
- @daily、@midnight:每天执行一次任务。
- @hourly:每小时执行一次任务。

/etc/crontab.deny #黑名单
/etc/crontab.allow #白名单
/var/spool/cron/username #任务存放路径
/var/log/cron #日志

分 时 日 月 周 命令(绝对路径)
* * * * * /usr/bin/......
30 4 1 * * /usr/bin/systemctl restart network

at 一次性任务

$ at 15:30
at> /usr/bin/command
at> ^D

- -f:指定要执行的脚本文件。
- -l:列出当前用户的所有待执行的任务。
- -d:删除指定的任务。
- -c:显示指定任务的详细信息。

监控命令

ps 静态查找进程

1. 基本用法:在命令行中输入ps即可列出当前用户下的所有进程。例如:
$ ps
  PID TTY          TIME CMD
  153 pts/0    00:00:00 bash
  1074 pts/0    00:00:00 ps
其中,PID表示进程ID,TTY表示进程所在的终端设备,TIME表示进程已经运行的时间,CMD表示进程的命令名称。

2. 选项-a:该选项用于显示所有用户的所有进程。例如:
$ ps -a
  PID TTY          TIME CMD
  153 pts/0    00:00:00 bash
  1075 pts/0    00:00:00 ps

3. 选项-u:该选项用于显示进程的详细信息,包括进程所属用户、CPU占用率、内存占用率等等。例如:
$ ps -u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu     153  0.0  0.1  13972  3564 pts/0    Ss   10:52   0:00 bash
ubuntu    1085  0.0  0.0  17464  2496 pts/0    R+   10:58   0:00 ps -u

4. 选项-f:该选项用于显示完整的进程信息,包括进程的PPID(父进程ID)、进程状态、启动时间等等。例如:
$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
ubuntu     153   151  0 10:52 pts/0    00:00:00 bash
ubuntu    1094   153  0 11:00 pts/0    00:00:00 ps -f

5. 选项-e:该选项用于显示所有进程,而不仅仅是当前用户的进程。例如:
$ ps -e

6. 选项-l:该选项用于显示进程的长格式信息,包括进程的UID、PID、PPID、CPU占用率、内存占用率、启动时间等等。例如:
$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  1291  1243  0  80   0 -  2839 wait   tty2     00:00:00 bash
0 R  1000  1557  1291  0  80   0 -  3088 -      tty2     00:00:00 ps
其中,F表示进程的标志位,S表示进程的状态,
UID表示进程所属用户的ID,PID表示进程ID,PPID表示父进程ID,
C表示CPU占用率,PRI表示进程的优先级,NI表示进程的优先级数值,
ADDR表示进程在内存中的地址,SZ表示进程占用的内存大小,
WCHAN表示进程正在等待的事件,TTY表示进程所在的终端设备,
TIME表示进程已经运行的时间,CMD表示进程的命令名称。

7. 选项-x:该选项用于显示所有进程,不仅仅是与当前终端设备相关的进程。例如:
$ ps -x
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:02 /sbin/init splash
    2 ?        S      0:00 [kthreadd]
    3 ?        I<     0:00 [rcu_gp]
    4 ?        I<     0:00 [rcu_par_gp]
    6 ?        I<     0:00 [kworker/0:0H-kblockd]
    8 ?        I<     0:00 [mm_percpu_wq]
   ...

8. 选项-C:该选项用于按照命令名称进行排序,并显示进程的详细信息。例如:
$ ps -C sshd -f
UID        PID  PPID  C STIME TTY          TIME CMD
root       902     1  0 10:50 ?        00:00:00 /usr/sbin/sshd -D
其中,选项-C后面的参数为进程的命令名称,-f表示显示进程的详细信息。

9. 选项-H:该选项用于显示进程树。例如:
$ ps -H
  PID TTY          TIME CMD
  153 pts/0    00:00:00 bash
  164 pts/0    00:00:00   less
  168 pts/0    00:00:00     sh
  169 pts/0    00:00:00       ps
其中,PID表示进程ID,TTY表示进程所在的终端设备,TIME表示进程已经运行的时间,CMD表示进程的命令名称。
进程树的结构由缩进表示。
例如,进程164是进程153的子进程,进程168是进程164的子进程,进程169是进程168的子进程。

ps -df | grep test
ps -aux
ps -u test

top 动态查找进程

交互界面中的各列数据含义如下:
- PID:进程ID;
- USER:进程所属用户;
- PR:进程优先级;
- NI:进程的nice值;
- VIRT:进程使用的虚拟内存大小;
- RES:进程占用的物理内存大小;
- SHR:进程共享的内存大小;
- S:进程状态,如R表示正在运行,S表示睡眠,Z表示僵死,D表示不可中断等;
- %CPU:进程占用CPU的百分比;
- %MEM:进程占用内存的百分比;
- TIME+:进程运行的累计CPU时间;
- COMMAND:进程所执行的命令。

- -d:指定刷新间隔时间,即多长时间更新一次进程信息,单位是秒,默认是3秒;
- -p:指定要监视的进程ID;
- -u:指定要监视的用户;
- -H:以线程的形式显示进程信息;
- -s:指定按照进程的哪个属性进行排序,如-s %CPU表示按照CPU使用率进行排序;
- -b:以批处理模式运行top命令,将结果输出到文件中。

vmstat 内存、swap


procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 842252  15920  81692    0    0    25    36   78  109  6  1 93  0  0

“procs”表示进程的情况,“r”表示正在运行的进程数,“b”表示处于等待状态的进程数;
“memory”表示内存的情况,“swpd”表示虚拟内存使用情况,“free”表示空闲内存大小,“buff”表示用作缓冲区的内存大小,“cache”表示用作缓存的内存大小;
“swap”表示交换空间的情况,“si”表示从磁盘读入交换空间的速度,“so”表示写出到磁盘的交换空间的速度;
“io”表示磁盘I/O的情况,“bi”表示从块设备读入的速度,“bo”表示写出到块设备的速度;“system”表示系统调用的情况,“in”表示每秒中断数,“cs”表示每秒上下文切换次数;
“cpu”表示CPU的情况,“us”表示用户进程使用CPU的时间占比,“sy”表示内核进程使用CPU的时间占比,“id”表示CPU空闲时间占比,“wa”表示等待I/O的CPU时间占比,“st”表示虚拟机被剥夺CPU的时间占比。

- -a:显示所有信息;
- -d:显示磁盘I/O信息;
- -m:显示内存使用情况信息;
- -s:指定时间间隔,单位为秒,默认为2秒;
- -n:指定输出的次数;
- -V:显示vmstat命令的版本信息。

例如,运行vmstat命令:
vmstat 1 10

mpstat CPU监控

在mpstat命令输出的结果中,第一行表示平均值,后面的行表示每个CPU的统计信息。
mpstat命令的输出格式如下:
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain)  06/22/2017  _x86_64_ (2 CPU)
12:31:12 PM  CPU   %user   %nice    %sys %iowait   %irq  %soft  %steal  %guest  %gnice   %idle
12:31:12 PM  all    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00    0.00   99.99
12:31:12 PM    0    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00    0.00   99.99
12:31:12 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

“CPU”表示CPU的编号;
“%user”表示用户进程使用CPU的时间占比,“%nice”表示用户进程使用CPU的时间占比,优先级高于普通用户进程;
“%sys”表示内核进程使用CPU的时间占比,“%iowait”表示CPU等待I/O的时间占比,“%irq”表示中断处理程序使用CPU的时间占比,
“%soft”表示软中断处理程序使用CPU的时间占比,“%steal”表示虚拟机被剥夺CPU的时间占比,“%guest”表示虚拟机使用CPU的时间占比,
“%gnice”表示虚拟机中优先级较高的进程使用CPU的时间占比,“%idle”表示CPU空闲时间占比。(*重要)

- -A:显示所有信息;
- -P:指定要监视的CPU或CPU组,可以使用CPU或CPU组的编号或名称;
- -u:显示CPU使用情况信息;
- -I:指定要监视的中断类型,可以是“SUM”、“CPU”、“DEVICE”等;
- -h:显示帮助信息。

例如,运行mpstat命令:
mpstat 1 10

iostat 磁盘读写

在iostat命令输出的结果中,第一行表示平均值,后面的行表示每个磁盘的统计信息。iostat命令的输出格式如下:

Linux 3.10.0-514.el7.x86_64 (localhost.localdomain)  06/22/2017  _x86_64_ (2 CPU)
12:31:12 PM  CPU  %user %nice %system %iowait %steal %idle
12:31:12 PM  all  0.02  0.00   0.01   0.00   0.00  99.97
12:31:12 PM    0  0.01  0.00   0.01   0.00   0.00  99.98
12:31:12 PM    1  0.03  0.00   0.01   0.00   0.00  99.96
12:31:12 PM  Device  r/s   w/s   rkB/s   wkB/s  rrqm/s  wrqm/s  %util
12:31:12 PM  sda     0.00  0.00    0.00    0.00     0.00    0.00   0.00
12:31:12 PM  sdb     0.00  0.00    0.00    0.00     0.00    0.00   0.00

“Device”表示磁盘名称;
“r/s”表示每秒读取的次数,
“w/s”表示每秒写入的次数,
“rkB/s”表示每秒读取的数据量(单位为KB),
“wkB/s”表示每秒写入的数据量(单位为KB),
“rrqm/s”表示每秒合并的读取请求量,
“wrqm/s”表示每秒合并的写入请求量,
“%util”表示磁盘的使用率。(*重要,磁盘是否繁忙,90%就是繁忙)

- -c:输出CPU使用情况信息;
- -d:输出磁盘使用情况信息;
- -h:显示帮助信息。
- -x:显示扩展信息
- -k:以KB为单位显示数据量

例如,运行iostat命令:
iostat -d -x -k 1 10

sar 性能分析

- -u:输出CPU使用率相关信息,包括每个CPU核心的使用率、用户态和系统态的CPU使用率、中断和上下文切换等信息。
- -r:输出内存使用率相关信息,包括内存的空闲、缓存、缓冲、使用和交换区等信息。
- -b:输出磁盘I/O相关信息,包括磁盘读写速度、I/O请求队列长度等信息。
- -n:输出网络相关信息,包括网络接口的流量、错误包、丢包等信息。
- -p:输出进程相关信息,包括进程的CPU和内存使用情况、网络活动、I/O操作等信息。
- -f:指定sar数据文件的路径,可以用于查看历史数据。
- -q:表示输出平均负载相关信息

sar -q 1 10

- ldavg-1:过去1分钟内的平均负载。
- ldavg-5:过去5分钟内的平均负载。
- ldavg-15:过去15分钟内的平均负载。

pidstat 进程磁盘读写

- -u:输出CPU使用率相关信息,包括用户态、系统态和等待CPU时间的CPU使用率等。
- -r:输出内存使用率相关信息,包括进程的虚拟内存、物理内存、共享内存等情况。
- -d:输出磁盘I/O相关信息,包括进程的读写速度、I/O请求队列长度等情况。
- -w:输出上下文切换和进程等待的CPU时间相关信息。
- -t:指定输出进程的时间间隔。
- -h:以易于读取的格式输出结果。
- -p:指定要监测的进程号,多个进程号可以使用逗号分隔。
- -C:指定要监测的进程名,多个进程名可以使用逗号分隔。
- -u:指定输出所有进程的使用情况,而不是只输出指定的进程。

pidstat -d 1 10
查看进程

uptime 查看负载均衡

uptime命令的输出格式如下:
22:16:47 up  1:21,  2 users,  load average: 0.00, 0.01, 0.05
“load average”后面的三个数依次表示系统1分钟、5分钟、15分钟的平均负载。
如果系统平均负载超过了CPU核心数的2倍,就说明系统负荷过重,需要进一步优化。

- -p:显示系统启动时间;
- -s:显示系统运行的时长,以紧凑格式输出;
- -h:以人性化方式输出系统运行时间,如2天3小时20分钟;
- -V:显示uptime命令的版本信息。

free

1. total(总内存):系统中总共的物理内存。
2. used(已使用内存):当前已经被占用的内存数量。
3. free(空闲内存):当前没有被占用的内存数量。
4. shared(共享内存):被多个进程共享的内存数量。
5. buffers/cached(缓存区):系统为了加快磁盘访问而预留的内存。
6. available(可用内存):当前系统中可用的内存数量。
`free`命令的输出结果默认以字节为单位,但是也可以使用参数来指定输出结果的单位,例如使用“-m”参数可以将结果以MB为单位显示。

使用管道符(|)将`free`的输出结果传递给`grep`命令,可以查找特定的内存使用信息。
例如,以下命令可以查找“buffers”和“cached”行中包含“Swap”的信息:
free -h | grep -i swap
例如,以下命令可以每隔5秒自动刷新一次内存使用情况:
free -h -s 5

监听命令

ipconfig 网卡信息
/etc/sysconfig/network-scripts/...

strace

- -p:指定要跟踪的进程号。
- -o:指定输出结果的文件名。
- -c:统计系统调用的次数、时间和错误等信息。
- -t:输出每个系统调用的时间戳。
- -e:指定要跟踪的系统调用,多个系统调用可以使用逗号分隔。
- -s:指定输出结果的最大长度。
- -f:跟踪进程的所有子进程。
- -v:输出更详细的调试信息。

strace命令的输出结果包括以下内容:
- 系统调用的名称和参数。
- 系统调用的返回值。
- 进程的信号传递和处理等信息。

strace -c ls
查看ls命令调用

netstat 网络状态

- -a:显示所有网络连接,包括监听和非监听状态的。
- -t:显示TCP协议的连接信息。
- -u:显示UDP协议的连接信息。
- -p:显示进程名和进程ID号。
- -n:不解析主机名和服务名,以IP地址和端口号代替。
- -l:仅显示监听状态的网络连接。
- -r:显示路由表信息。
- -i:显示网络接口信息。
- -s:显示网络统计信息,包括网络流量、网络错误等情况。

- 协议:TCP或UDP。
- 本地地址和端口号:本地计算机的IP地址和端口号。
- 远程地址和端口号:远程计算机的IP地址和端口号。
- 状态:网络连接的状态,如ESTABLISHED、LISTEN、CLOSED等。
- 进程名和进程ID号:占用该端口的进程的名称和ID号。

netstat -anptu
显示所有TCP和UDP的网络连接信息,并显示占用该端口的进程的名称和进程ID号,以IP地址和端口号代替主机名和服务名。

ss 网络状态

- -t:显示TCP协议的套接字信息。
- -u:显示UDP协议的套接字信息。
- -d:显示DCCP协议的套接字信息。
- -r:显示RAW协议的套接字信息。
- -a:显示所有连接和监听套接字信息。
- -n:以数字格式显示IP地址和端口号。
- -p:显示套接字对应的进程信息。
- -s:显示套接字的统计信息,如接收和发送的包数量、传输速率等。
- -o:显示TCP协议的计时器信息。
- -i:显示套接字的时间戳信息。
- -h:显示ss命令的帮助信息。
- -l:表示显示所有监听套接字信息。

ss命令的输出结果包括以下内容:
- 协议类型和状态。
- 本地IP地址和端口号。
- 远程IP地址和端口号。
- 套接字对应的进程ID和进程名称。
- 套接字的时间戳信息和计时器信息。
- 套接字的统计信息,如传输的字节数、包数量、传输速率等。

ss -ntl
查看tcp端口
ss -s

tcpdump 抓包

- -i:指定网络接口,如eth0。
- -n:以数字格式显示IP地址和端口号。
- -X:以ASCII码和十六进制编码显示数据包的原始内容。
- -w:将抓取的数据包保存到文件中。
- -r:从文件中读取数据包并进行分析。
- -c:指定抓取数据包的数量。
- -s:指定抓取数据包的大小。
- -v:显示详细的抓包信息。
- -A:以ASCII码显示数据包的原始内容。

tcpdump -i eth1

lsblk

- -a:显示所有块设备,包括未挂载的设备。
- -p:显示块设备的完整路径。
- -f:显示块设备的文件系统类型。
- -m:使用简化的输出格式。
- -o:指定要显示的列,如NAME、MAJ:MIN、SIZE、FSTYPE等。
- -t:显示块设备的树形结构。
- -u:显示块设备的容量单位,如字节、千字节、兆字节等。

history

文件管理

sync/rsync

sync [option]
- -f:禁止使用异步写入磁盘的方式。
- -n:执行同步操作,但不将缓存数据写入磁盘。
- -q:禁止输出同步操作的结果。

rsync [option] source_file target_file
- -a:使用归档模式同步文件,包括文件的权限、时间、属主等属性。
- -r:递归同步目录及其子目录。
- -v:显示同步过程中的详细信息。
- -z:使用压缩算法进行传输,可以节省带宽。
- -n:执行模拟同步操作,不执行真正的同步操作。
- --delete:删除目标目录中不存在于源目录中的文件。

将本地目录/dir1同步到远程主机的目录/dir2中,可以使用以下命令
rsync -avz /dir1/ user@remote_host:/dir2/

tar 压缩文件

- c:创建新的归档文件;
- r:向归档文件中追加文件;
- u:更新归档文件中的文件;
- x:从归档文件中解压文件;
- t:列出归档文件中的文件列表;
- v:归档进度
- z:使用gzip压缩归档文件;
- j:使用bzip2压缩归档文件;
- f:指定归档文件名。

1. 创建归档文件
tar -cf archive.tar file1 file2 dir1
将文件file1、file2和目录dir1打包到归档文件archive.tar中。

2. 解压归档文件
tar -xf archive.tar
将归档文件archive.tar中的所有文件和目录解压到当前目录中。

3. 列出归档文件中的文件列表
tar -tf archive.tar
将列出归档文件archive.tar中的所有文件和目录列表。

4. 向归档文件中追加文件
tar -rf archive.tar file3
将文件file3追加到归档文件archive.tar中。

5. 更新归档文件中的文件
tar -uf archive.tar file1
将更新归档文件archive.tar中的文件file1,如果归档文件中不存在该文件,则会将该文件追加到归档文件中。

6. 使用gzip或bzip2压缩归档文件
tar -czf archive.tar.gz file1 file2 dir1
tar -cjf archive.tar.bz2 file1 file2 dir1
将使用gzip或bzip2压缩归档文件,并将文件file1、file2和目录dir1打包到归档文件中。

1. 排除文件或目录
tar -cf archive.tar --exclude=dir1 file1 file2 dir1
将排除目录dir1,并将文件file1、file2和目录dir1打包到归档文件archive.tar中。
2. 指定归档文件名和路径
tar -cf /tmp/archive.tar /home/user1
将目录/home/user1打包到归档文件/tmp/archive.tar中。
3. 指定归档文件名和压缩格式
tar -czf archive.tar.gz file1 file2 dir1
将使用gzip压缩归档文件,并将文件file1、file2和目录dir1打包到归档文件中。
4. 从网络上下载并解压归档文件
curl https://example.com/archive.tar.gz | tar -xz
将从网址https://example.com/archive.tar.gz下载归档文件并解压到当前目录中。
5. 将归档文件传输到远程主机
tar -czf - file1 file2 dir1 | ssh user@remote_host "cat > /tmp/archive.tar.gz"
将打包、压缩文件和目录,并将归档文件通过ssh传输到远程主机,并保存到/tmp/archive.tar.gz文件中。

rpm 管理包

- -i:安装一个新的软件包。
- -U:升级已有的软件包。
- -e:卸载一个软件包。
- -q:查询已安装的软件包信息。
- -V:验证已安装的软件包是否完整和正确。
- -h:显示rpm命令的帮助信息。
- -a:表示查询所有已安装的软件包
- --nodeps:忽略软件包之间的依赖关系。
- --test:模拟软件包安装或升级过程,以检查是否存在问题。
- --force:强制执行软件包的安装、升级或卸载操作。
rpm命令的输出结果包括以下内容:
- 软件包名称和版本号。
- 软件包的安装路径和文件列表。
- 软件包的依赖关系和冲突关系。
- 软件包的安装状态和信息。

rpm -qa | gerp xxx #查询软件包
rpm -e --nodeps xxx #卸载
rpm -ivh xxx #安装
rpm -qf #查询那个软件包
rpm -ql #安装后生成那些文件

du 详细查看文件大小

- -h:以易读的方式显示文件大小,例如“1K”、“2M”等;
- -s:仅显示总大小,不显示每个子目录或文件的大小;
- -c:在每个子目录或文件大小的下方显示总大小;
- -a:显示所有文件和目录的大小,包括隐藏文件和目录;
- -L:对符号链接指向的文件或目录进行计算,而不是计算符号链接本身的大小;
- --exclude=PATTERN:排除符合特定模式的文件或目录;
- --max-depth=N:设置目录的深度,只计算N级子目录的大小。

du -sh *

diff 比较文件差异

- -q:只显示文件是否有差异,不显示具体差异的内容。
- -r:递归比较目录下的所有文件。
- -u:使用Unified格式显示差异,可以显示更加详细的差异信息。
- -c:使用Context格式显示差异,与Unified格式类似,但是多显示一些上下文信息。
- -i:忽略大小写进行比较。
- -w:忽略空格和制表符的差异。

diff file1 file2

scp

Secure Copy
基于SSH协议的安全文件传输工具,用于在不同的计算机之间进行文件传输。
- -r:递归复制目录。
- -P:指定SSH端口号。
- -p:保留文件的权限、时间戳等属性。
- -C:启用数据压缩。
- -v:显示详细的传输信息。
- -q:静默模式,不显示传输信息。
- -i:指定私钥文件。
- -l:限制传输带宽。
- -B:后台运行scp命令。

安全策略

本文不描述详细策略

端口使用规范

端口号 0 不使用
端口号 1 - 1023,称之为特权端口,系统默认只给root使用
端口号 1024 - 4999 由客户端程序自由分配
端口号 5000 - 65535 由服务器端程序自由分配

netfilter

netfilter是iptables的核心机制,netfilter允许用户通过hook的方式,让Linux内核执行注册的回调函数并完成一系列功能。
1:NF_IP_PRE_ROUTING,位于数据包被路由之前,数据包一致性检查完成后,进入该hook位置。
2:NF_IP_LOCAL_IN,位于数据包被路由后,并且数据包的目的地是本机时。
3:NF_IP_FORWARD,位于数据包被路由后,但数据包目的地址不是本机时。
4:NF_IP_LOCAL_OUT:由本机发出的数据包,在被路由之前,进入该hook处理。
5:NF_IP_POST_ROUTING:即将离开本机的数据包,在该hook被处理。

当Linux内核模块被注册后,注册的函数由可以有5种返回值,不同的返回值,内核会进行不同的处理。
1:NF_ACCEPT,报文被正常处理,允许报文通过。
2:NF_DROP,报文被丢弃。
3:NF_STOLEN,取走这个报文,不在进行后续处理。
4:NF_QUEUE,报文进行重新排队,可以被送到用户程序。
5:NF_REPEAT,对该报文重新调用hook函数。

md5sum md5校验值

查看文件是否修改过
md5sum test.txt

ssh-keygen 生成ssh密钥

ssh-keygen
ssh-copy-id -i id_rsa.pub test@host

firewalld 动态防火墙

阻塞区域(block):任何传入的网络数据包都将被阻止。
工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
信任区域(trusted):所有的网络连接都可以接受。
丢弃区域(drop):任何传入的网络连接都被拒绝。
内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。

注:FirewallD的默认区域是public。
firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下。

firewall-config 图形化配置
用图形化界面设置更快更省事


firewall-cmd 命令行配置:
firewall-cmd --state && echo "Running" || echo "Not running"

1、域zone相关的命令
--get-default-zone  查询默认的区域名称
--set-default-zone=<区域名称>   设置默认的区域
--get-active-zones  显示当前正在使用的区域与网卡名称
--get-zones 显示总共可用的区域
--new-zone= 新增区域
2、services管理的命令
--get-services  显示预先定义的服务
--add-service=<服务名> 设置默认区域允许该服务的流量
--remove-service=<服务名>  设置默认区域不再允许该服务的流量
3、Port相关命令
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-port=<端口号/协议>  设置默认区域不再允许该端口的流量
4、网卡相关的命令
--add-interface=<网卡名称>  将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称>   将某个网卡与区域进行关联
5、查看所有规则的命令
--list-all  显示当前区域的网卡配置参数、资源、端口以及服务等信息
--permanent 查看永久生效的配置参数、资源、端口以及服务等信息(加上后规则永久生效,需要reload)
6、重载防火墙的策略
--reload    让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

iptables 静态防火墙

RAW表:主要确定是否对数据包进行状态跟踪。
Mangle表:用于修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形等。
NAT表:修改数据包的IP地址,端口等信息。
Filter表:对数据包进行过滤,根据特定规则确定对数据包如何处理。
优先级:mangle > nat > filter

input
匹配目标IP是本机的数据包
output
出口数据包 , 一般不在此链上做配置
forward
匹配流经本机的数据包
prerouting
修改目的地址,用来做 DNAT 。如:把内网中的 80 端口映射到互联网端口
postrouting
修改源地址,用来做 SNAT。如:局域网共享一个公网IP接入Internet。

当一个数据包进入网卡时,它首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需要转送出去。
如果数据包就是进入本机的,它就会到达 INPUT 链。数据包到了 INPUT 链后,任何进程都会收到它。
本机上运行的程序可以发送数据包,这些数据包会经过 OUTPUT 链,然后到达POSTROUTING 链输出。
如果数据包是要转发出去的,且内核允许转发,数据包就会经过 FORWARD 链,然后到达 POSTROUTING 链输出。

整体数据包分两类:
1、发给防火墙本身的数据包 ;
2、需要经过防火墙的数据包
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网>
--sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

iptables支持的过滤条件包括:
- IP地址(源地址、目标地址)
- 端口号(源端口、目标端口)
- 协议类型(TCP、UDP、ICMP等)
- 网络接口(输入接口、输出接口)
- 标记(标记数据包,以便后续处理)

iptables支持的动作包括:
- ACCEPT:允许数据包通过。
- DROP:丢弃数据包。
- REJECT:拒绝数据包,并向发送端发送一个拒绝报文。
- LOG:将数据包记录到系统日志中。
- MASQUERADE:网络地址转换,用于将内部IP地址转换为公网IP地址进行访问。
- SNAT:源地址转换,用于修改数据包的源IP地址。
- DNAT:目标地址转换,用于修改数据包的目标IP地址。
- REDIRECT:数据包重定向,用于将数据包重定向到指定的端口号或IP地址。

-P 设置默认策略
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I 在规则链的头部加入新规则
-D 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
--dport num  匹配目标端口号
--sport num  匹配来源端口号
-t, --table table 对指定的表 table 进行操作.

-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。

-p:指定要匹配的数据包协议类型;
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。

-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num:Replays替换/修改第几条规则

-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
-h:显示帮助信息;

selinux 安全上下文

SELinux配置文件位于  /etc/selinux/config

SELINUX=enforcing 此项定义selinux状态。

enforcing—强制模式,系统受selinux保护。就是你违反了策略,你就无法继续操作下去
permissive—提示模式,系统不会受到selinux保护,只是收到警告信息。
提示模式时Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来(警告信息)
disabled—禁用selinux。

SELINUXTYPE=targeted
此项定义selinux使用哪个策略模块保护系统。
targeted只对apache ,sendmail,bind,postgresql,nfs,cifs等网络服务保护。
setenforce 0
临时关闭SELinux
setenforce 1
临时打开SELinux
getenforce
查看SELinux状态
sestatus
查看SELinux工作模式

lsattr 显示文件属性

chattr 防止文件修改

磁盘管理

system ID:
- 83:Linux文件系统分区
- 82:Linux swap分区
- 7:Windows NTFS分区
- 1:FAT16分区
- 8e:Linux LVM分区

df 查询磁盘情况

可以显示文件系统的总容量、已用空间、可用空间和使用率等信息
- `-h`:以人类可读的方式显示磁盘使用情况,例如以GB、MB或KB为单位。
- `-T`:显示文件系统类型。
- `-t`:只显示指定类型的文件系统,例如只显示ext4类型的文件系统。
- `-i`:显示文件系统的inode使用情况,而不是磁盘空间使用情况。
- `-x`:不显示指定类型的文件系统,例如不显示tmpfs类型的文件系统。

- 显示所有已挂载的文件系统的磁盘使用情况:
  df
- 以人类可读的方式显示所有已挂载的文件系统的磁盘使用情况:
  df -h
- 显示指定文件系统的磁盘使用情况:
  df /dev/sda1
- 显示指定类型的文件系统的磁盘使用情况:
  df -t ext4
- 显示文件系统的inode使用情况:
  df -i
`df`命令可以帮助系统管理员或用户了解当前文件系统的空间使用情况,以便他们及时采取措施来管理和优化文件系统的存储资源。

dd 复制转换文件设备

input_file和output_file表示输入文件和输出文件的路径,if表示输入文件,of表示输出文件。
- iflag:用于指定输入文件的属性,例如iflag=direct表示使用直接IO方式读取文件。
- oflag:用于指定输出文件的属性,例如oflag=direct表示使用直接IO方式写入文件。
- bs:用于指定每次读取或写入的数据块大小,默认为512字节。
- count:用于指定读取或写入的数据块数量。
- skip:用于指定输入文件中跳过的数据块数量。
- seek:用于指定输出文件中跳过的数据块数量。

复制文件或设备
dd if=/dev/sda of=/dev/sdb bs=4096

创建指定大小的文件
dd if=/dev/zero of=file.txt bs=1M count=10

将ISO镜像写入U盘
dd if=image.iso of=/dev/sdb bs=4M

fsck 修复磁盘数据

- -a:自动修复文件系统错误。
- -c:检查设备的坏道,需要较长时间。
- -f:强制检查文件系统,即使文件系统看起来正常。
- -V:显示详细的检查和修复过程。
通常,使用fsck命令检查和修复文件系统的流程如下:
1. 卸载要检查和修复的文件系统,例如umount /dev/sda1。
2. 使用fsck命令检查和修复文件系统,例如fsck /dev/sda1。
3. 等待fsck命令完成检查和修复操作。
4. 重新挂载文件系统,例如mount /dev/sda1 /mnt。

fsck -a /dev/sda1

mkfs 创建或格式化磁盘

mkfs -t ext4 /dev/sda1
将/dev/sda1磁盘创建为ext4格式

mkfs.xfs -f test.rar
test.rar为ext4格式,强制改为xfs格式

fdisk 磁盘分区(MBR)

fdisk /dev/sda
1. p:查看当前分区表的信息。
2. n:创建一个新分区。
3. d:删除一个分区。
4. t:设置一个分区的类型。
5. w:将修改后的分区表写入磁盘。

LVM 逻辑卷

PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。

VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,
卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。

LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,
逻辑卷建立后可以动态扩展和缩小空间。

PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,
同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。

LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
由于受内核限制的原因,一个逻辑卷(Logic Volume)最多只能包含65536个PE(Physical Extent),
所以一个PE的大小就决定了逻辑卷的最大容量,4 MB(默认) 的PE决定了单个逻辑卷最大容量为 256 GB,
若希望使用大于256G的逻辑卷,则创建卷组时需要指定更大的PE。
将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。
管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。
管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。

将现有的食材(磁盘)放到锅里弄成一锅炖菜(逻辑卷组),炖煮好后(设定好后)分配给每一个碗(逻辑卷)

线性模式
写完一个设备后再写另一个设备
条带模式
数据是被分散写入到LVM各设备上

因为条带模式的数据不具有安全性,且LVM并不强调读写性能,故LVM默认为线性模式。
物理卷(pv)
pvcreate:创建物理卷。
    - 语法:pvcreate [选项] 物理卷
    - 示例:pvcreate /dev/sdb1

pvdisplay:显示物理卷信息。
    - 语法:pvdisplay [选项] [物理卷路径]
    - 示例:pvdisplay /dev/sdb1

pvmove:将物理卷上的数据移动到其他物理卷。
    - 语法:pvmove [选项] 源物理卷路径 目标物理卷路径
    - 示例:pvmove /dev/sdb1 /dev/sdd1

pvremove:删除物理卷。
    - 语法:pvremove [选项] 物理卷路径
    - 示例:pvremove /dev/sdb1

pvscan:扫描物理卷信息。
    - 语法:pvscan [选项]
    - 示例:pvscan

pvresize:调整物理卷大小。
    - 语法:pvresize [选项] 物理卷路径
    - 示例:pvresize /dev/sdb1

------------


卷组(vg)
vgcreate:创建卷组。
    - 语法:vgcreate [选项] 卷组 物理卷...
    - 示例:vgcreate vg1 /dev/sdb1 /dev/sdc1

vgdisplay:显示卷组信息。
    - 语法:vgdisplay [选项] [卷组名称]
    - 示例:vgdisplay vg1

vgremove:删除卷组。
    - 语法:vgremove [选项] 卷组名称
    - 示例:vgremove vg1

vgextend:添加物理卷到卷组中。
    - 语法:vgextend [选项] 卷组名称 物理卷...
    - 示例:vgextend vg1 /dev/sdd1

vgreduce:从卷组中删除物理卷。
    - 语法:vgreduce [选项] 卷组名称 物理卷...
    - 示例:vgreduce vg1 /dev/sdd1

vgscan:扫描卷组信息。
    - 语法:vgscan [选项]
    - 示例:vgscan

vgchange:修改卷组属性。
    - 语法:vgchange [选项] 卷组名称
    - 示例:vgchange -a n vg1

------------


逻辑卷(lv)
lvcreate:创建逻辑卷。
    - 语法:lvcreate [选项] [-l|--extents 逻辑区块数] [-L|--size 逻辑卷大小] [-n|--name 逻辑卷名称] 卷组
    - 示例:lvcreate -n lv1 -L 10G vg1

lvextend:扩展逻辑卷。
    - 语法:lvextend [选项] 逻辑卷物理路径
    - 示例:lvextend -L +5G /dev/mapper/vg1-lv1

lvreduce:缩小逻辑卷。
    - 语法:lvreduce [选项] 逻辑卷物理路径
    - 示例:lvreduce -L -5G /dev/mapper/vg1-lv1

lvdisplay:显示逻辑卷信息。
    - 语法:lvdisplay [选项] [逻辑卷物理路径]
    - 示例:lvdisplay /dev/mapper/vg1-lv1

lvmove:移动逻辑卷数据到其他物理卷。
    - 语法:lvmove [选项] 逻辑卷物理路径 目标物理卷路径
    - 示例:lvmove /dev/mapper/vg1-lv1 /dev/sdd1

lvremove:删除逻辑卷。
    - 语法:lvremove [选项] 逻辑卷物理路径
    - 示例:lvremove /dev/mapper/vg1-lv1

lvrename:重命名逻辑卷。
    - 语法:lvrename [选项] 原逻辑卷名称 新逻辑卷名称
    - 示例:lvrename /dev/vg1/lv1 /dev/vg1/lvnew

lvresize:调整逻辑卷大小。
    - 语法:lvresize [选项] 逻辑卷物理路径
    - 示例:lvresize -L 20G /dev/mapper/vg1-lv1

lvmove:移动逻辑卷数据到其他物理卷。
    - 语法:lvmove [选项] 逻辑卷物理路径 目标物理卷路径
    - 示例:lvmove /dev/mapper/vg1-lv1 /dev/sdd1

lvconvert:将逻辑卷转换为其他类型的逻辑卷。
    - 语法:lvconvert [选项] 目标类型 逻辑卷物理路径
    - 示例:lvconvert --type raid1 /dev/mapper/vg1-lv1

lvscan:扫描逻辑卷信息。
    - 语法:lvscan [选项]
    - 示例:lvscan

lvchange:修改逻辑卷属性。
    - 语法:lvchange [选项] 逻辑卷物理路径
    - 示例:lvchange -a y /dev/mapper/vg1-lv1
#1.将各物理磁盘或分区的系统类型设为Linux LVM,其system ID为8e,通过fdisk工具中的t命令设置
[root@localhost ~]# fdisk /dev/sda
...
Command (m for help): n
First cylinder (1593-3916, default 1593):
Using default value 1593
Last cylinder, +cylinders or +size{K,M,G} (1593-3916, default 3916): +5G
...
Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): 8e   # 指定system ID为8e
Changed system type of partition 5 to 8e (Linux LVM)
...
Command (m for help): p
...
/dev/sda5            1593        2246     5252227+  8e  Linux LVM
/dev/sda6            2247        2900     5253223+  8e  Linux LVM
/dev/sda7            2901        3554     5253223+  8e  Linux LVM
Command (m for help): w
...
#将/dev/sda重新进行分区映射
[root@localhost ~]# partx -a /dev/sda
...
[root@localhost ~]# kpartx -af /dev/sda
...


------------

#2.将各物理磁盘或分区初始化为PV(physical volume,物理卷),这一阶段可使用的命令为pvcreate、pvremove、pvscan、pvdisplay(pvs)
[root@localhost ~]# pvcreate /dev/sda{5,6,7}   # 将三个分区初始化为物理卷
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sda7" successfully created
[root@localhost ~]# pvscan
  PV /dev/sda5                      lvm2 [5.01 GiB]
  PV /dev/sda6                      lvm2 [5.01 GiB]
  PV /dev/sda7                      lvm2 [5.01 GiB]
  Total: 3 [15.03 GiB] / in use: 0 [0   ] / in no VG: 3 [15.03 GiB]
[root@localhost ~]# pvdisplay /dev/sda5   # 显示物理卷sda5的详细信息
  "/dev/sda5" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda5
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   # 由于PE是在VG阶段才划分的,所以此处看到的都是0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               lrNOS3-8U21-ZS8o-eyKH-HqPn-DLhX-W1ppl4
  
[root@localhost ~]# pvremove /dev/sda7   # 删除sda7的物理卷信息
  Labels on physical volume "/dev/sda7" successfully wiped
[root@localhost ~]# pvscan   # 可以看到PV列表中已无sda7
  PV /dev/sda5   VG testvg   lvm2 [5.01 GiB / 5.01 GiB free]
  PV /dev/sda6   VG testvg   lvm2 [5.01 GiB / 5.01 GiB free]
[root@localhost ~]# pvcreate /dev/sda7
  Physical volume "/dev/sda7" successfully created


------------

#3.创建VG(volume group,卷组)。卷组将多个物理卷整合起来(屏蔽了底层细节),并划分PE(physical extend)。PE是物理卷中的最小存储单元,有点类似于文件系统中的block,PE大小可指定,默认为4M。这一阶段用到的命令有vgcreate、vgscan、vgdisplay、vgextend、vgreduce
[root@localhost ~]# vgcreate -s 8M testvg /dev/sda{5,6}   # 使用sda5、sda6创建卷组,指定PE大小为8M
  Volume group "testvg" successfully created
[root@localhost ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "testvg" using metadata type lvm2
[root@localhost ~]# vgdisplay   # 查看卷组详细信息
  --- Volume group ---
  VG Name               testvg
  System ID            
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write   # 可读写
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               10.02 GiB   # 卷组容量
  PE Size               8.00 MiB
  Total PE              1282   # PE总数
  Alloc PE / Size       0 / 0   # 分配的容量
  Free  PE / Size       1282 / 10.02 GiB   # 空闲的容量
  VG UUID               5zBY8e-5Cgc-HqSo-BOiZ-02NX-77ON-NJSCbN

------------

#4.在卷组上创建LV(logical volume,逻辑卷)。为了便于管理,逻辑卷对应的设备文件保存在卷组目录下,为/dev/VG_NAME/LV_NAME。LV中可以分配的最小存储单元称为LE(logical extend),在同一个卷组中,LE的大小和PE是一样的,且一一对应。这一阶段用到的命令有lvcreate、lvscan、lvdisplay、lvextend、lvreduce、lvresize
[root@localhost ~]# lvcreate -L 500M -n testlv testvg   # 创建大小为500M、名为testlv的逻辑卷
  Rounding up size to full physical extent 504.00 MiB
  Logical volume "testlv" created
[root@localhost ~]# lvscan
  ACTIVE            '/dev/testvg/testlv' [504.00 MiB] inherit
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                0fPpO3-gVaI-ZKqi-xHnc-uaHk-u6of-i5wds7
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-10-18 22:05:18 +0800
  LV Status              available
  # open                 0
  LV Size                504.00 MiB
  Current LE             63
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

------------

#格式化逻辑卷并挂载
[root@localhost ~]# mke2fs -t ext4 /dev/testvg/testlv
...
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
...
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/testvg/testlv /data
[root@localhost ~]# cp /etc/inittab /data
[root@localhost ~]# ls /data
inittab  lost+found
------------

#扩展文件系统
[root@localhost ~]# vgextend testvg /dev/sda7   # 假如卷组容量不够,扩展文件系统之前先扩展卷组
  Volume group "testvg" successfully extended
[root@localhost ~]# lvextend -L +300M /dev/testvg/testlv
  Rounding size to boundary between physical extents: 304.00 MiB
  Snapshot origin volumes can be resized only while inactive: try lvchange -an
  Run `lvextend --help` for more information.
[root@localhost ~]# umount /dev/testvg/testlv_snap
[root@localhost ~]# lvremove /dev/testvg/testlv_snap  # 要增减逻辑卷,需要先删除对对应的快照卷
Do you really want to remove active logical volume testlv_snap? [y/n]: y
  Logical volume "testlv_snap" successfully removed
[root@localhost ~]# lvextend -L +300M /dev/testvg/testlv   # 逻辑卷扩大300M
  Rounding size to boundary between physical extents: 304.00 MiB
  Extending logical volume testlv to 808.00 MiB
  Logical volume testlv successfully resized
[root@localhost ~]# resize2fs /dev/testvg/testlv   # 扩展文件系统
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/testvg/testlv is mounted on /data; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 4
Performing an on-line resize of /dev/testvg/testlv to 827392 (1k) blocks.
The filesystem on /dev/testvg/testlv is now 827392 blocks long.

[root@localhost ~]# df -h   # 显示容量确实已扩大
...
/dev/mapper/testvg-testlv  783M   11M  732M   2% /data

------------

#缩减文件系统(离线操作)
[root@localhost ~]# umount /dev/testvg/testlv   # 缩减文件系统之前要先卸载
[root@localhost ~]# e2fsck -f /dev/testvg/testlv   # 检测文件系统
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/testvg/testlv: 12/206848 files (0.0% non-contiguous), 36856/827392 blocks
[root@localhost ~]# resize2fs /dev/testvg/testlv 500M   # 缩减文件系统至500M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testvg/testlv to 512000 (1k) blocks.
The filesystem on /dev/testvg/testlv is now 512000 blocks long.
[root@localhost ~]# lvreduce -L 500M /dev/testvg/testlv   # 缩减逻辑卷至500M
  Rounding size to boundary between physical extents: 504.00 MiB
  WARNING: Reducing active and open logical volume to 504.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlv? [y/n]: y
  Reducing logical volume testlv to 504.00 MiB
  Logical volume testlv successfully resized
[root@localhost ~]# mount /dev/testvg/testlv /data   # 重新挂载
[root@localhost ~]# df -h   # 显示容量确实已减小
...
/dev/mapper/testvg-testlv  485M   11M  449M   3% /data

[root@localhost ~]# vgchange -an testvg   # 当我们一段时间内不再使用卷组时,可将其休眠
  Logical volume testvg/testlv contains a filesystem in use.
  Can\'t deactivate volume group "testvg" with 1 open logical volume(s)
[root@localhost ~]# umount /data    # 休眠之前先卸载逻辑卷
[root@localhost ~]# umount /mnt
[root@localhost ~]# vgchange -an testvg
  0 logical volume(s) in volume group "testvg" now active
[root@localhost ~]# vgchange -ay testvg   # 重新激活卷组
  1 logical volume(s) in volume group "testvg" now active
[root@localhost ~]# vgremove testvg   # 若打算以后都不再使用,可删除卷组
Do you really want to remove volume group "testvg" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume testlv? [y/n]: y
  Logical volume "testlv" successfully removed
  Volume group "testvg" successfully removed

------------

#创建快照卷
[root@localhost ~]# mount -o remount,ro /dev/testvg/testlv /data   # 创建快照卷之前先将对应的逻辑卷改为只读
[root@localhost ~]# lvcreate -s -L 512M -n testlv_snap /dev/testvg/testlv  # 创建大小为512M的快照
  Logical volume "testlv_snap" created
[root@localhost ~]# mount -o remount,rw /dev/testvg/testlv /data   # 将逻辑卷改回为读写
[root@localhost ~]# mount /dev/testvg/testlv_snap /mnt
[root@localhost ~]# df -h   # 可以看到快照和其对应的逻辑卷显示的参数值一样
...
/dev/mapper/testvg-testlv       489M   11M  453M   3% /data
/dev/mapper/testvg-testlv_snap  489M   11M  453M   3% /mnt
[root@localhost ~]# ls /mnt
inittab  lost+found
[root@localhost ~]# cp /etc/passwd /data   # 向原始卷中新增一些数据
[root@localhost ~]# ls /data
inittab  lost+found  passwd
[root@localhost ~]# ls /mnt   # 快照所显示的文件系统状态仍是创建那一刻的
inittab  lost+found

标签:文件,命令,指定,dev,备忘录,Linux,进程,root
From: https://www.cnblogs.com/mugetsukun/p/17303267.html

相关文章

  • nginx备忘录
    安装rpm(离线)直接进nginx下载包页面选择你要的版本连接wgethttps://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpmrpm-ivhnginx-1.20.2-1.el7.ngx.x86_64.rpmsystemctlstartnginxsystemctlstatusnginxnginx-Vyum(rhel/centos)......
  • 《企业级Linux高可用负载均衡集群实践真传》目录
    第1章关于负载均衡...21.1       负载均衡定义...21.2       负载均衡在生产环境中的基本要求...31.2.1在线可扩展性...31.2.2高可用性...31.2.3多服务性...41.3       负载均衡基本功能...41.3.1     负载均衡...41.3.2     健康......
  • 利用Linux系统生成随机密码的8种方法
    Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它。例如,你可以通过数十种方法来生成随机密码。本文将介绍生成随机密码的十种方法。1.使用SHA算法来加密日期,并输出结果的前10个字符:[root@kafka60shell]#date+%s|sha256sum|base64|head-c10......
  • Linux的IO模型
    一、基本概念五种IO模型包括:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。首先需要了解下系统调用的几个函数和基本概念。1.1简单介绍几个系统调用函数由于我对于C语言不熟悉,几个系统函数参考了一些文章,如果错误欢迎指出!recvfromLinux系统提供给用户用于接收网络IO的系统接......
  • Linux下如何启动、关闭Nginx?
    Linux下如何启动、关闭Nginx?Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势,下面为大家分享一下Linux下启动、关闭Nginx具体方法。Linux下启动、关闭Nginx先决条件:安装并配置了Nginx的系统访问终端窗口或命令行具有sudo或roo......
  • 解决Matlab在Linux下无法使用hardware OpenGL的问题
    解决Matlab在Linux下无法使用hardwareOpenGL的问题1报错信息在命令行使用命令matlab-nodesktop-nosplash启动Matlab时,出现如下报错:MATLABisselectingSOFTWAREOPENGLrendering.在查阅ArchWikiMatlabOpenGLAcceleration栏目后,发现这是因为Matlab未启用OpenGL硬件加......
  • linux安装jdk1.8
    为防止操作权限不足,建议切换root用户,当然如果你对Linux命令熟悉,能够自主完成权限更新操作,可以不考虑此推荐。环境:centos7.6ssh连接工具:tabby(自从用了这个工具,我再也不用xshell了,这个工具自带文件上传,还有网页版)创建目录mkdir/opt/jdk把jdk的压缩包上传到/opt/jdk......
  • Book-Linux/UNIX 系统编程手册-上册(部分章节)
    Book-Linux/UNIX系统编程手册-上册(部分章节)Linux的广受欢通只是原因之一,而有时出于性能方面的考虑,或是需要访问标准UNIX编程接口所不支持功能时,使用非标准扩展(正因如此,所有UNIX实现都提供有非标准扩展)就显得至为重要综上所述,在构思本书时,作者不但力图使其对在各种UNIX实现中......
  • 【Linux】云服务器搭建Linux环境
    目录......
  • 韦东山Linux快速入门笔记
    Linux操作基础1.git下载文档:在一个文件夹中右键点击GitBashhere,打开一个终端窗口:在窗口中输入:gitclonehttps://e.coding.net/weidongshan/01_all_series_quickstart.git 另外,可以用图中gitpullorigin拉取更新  2.$PATH有三种修改办法3.删除文件夹一......