文件管理
linux命令在线手册:
Linux命令大全(手册)_Linux常用命令行实例详解_Linux命令学习手册
Linux命令 - 在线工具
第 1 章 概述 | Red Hat Product Documentation
Linux命令离线手册:
《鸟哥私房菜》 鸟哥的Linux私房菜简体首页
《Linux常用命令》
man 命令
目录管理命令
新建目录: mkdir
查看目录: ls
切换目录: cd
修改目录: mv
删除目录: rmdir
路径查看: pwd
==============================================================================
打开终端后我们默认处于主目录(家目录) 标志就是: ~
Linux 中目录 类似与win的 文件夹。
mkdir :
mkdir命令来自英文词组make directories的缩写,其功能是创建目录文件。
该命令的使用简单,但需要注意,
若要创建的目标目录已经存在,则会提示已存在而不继续创建,不覆盖已有文件。
若目录不存在,则立即创建一个目录。
可以创建具有嵌套的依赖关系时,例如/Dir1/Dir2/Dir3/Dir4/Dir5,
要想一次性创建则需要加入-p参数,进行递归操作。
语法格式 : mkdir 参数 目录名
常用参数: -m 创建目录的同时设置权限
-v 显示执行过程详细信息
-p 递归创建多级目录
-z 设置目录安全上下文
mkdir Dir1 #建立一个目录文件,默认的目录权限是 0755 权限。 rwxr-xr-x
mkdir -m 700 Dir2 #创建一个目录文件并设置700权限,不让除属主以外的任何人读、写、执行它:
mkdir Dir3 Dir4 Dir5 #一次性创建多个目录文件
mkdir -p Dir1/Dir2/Dir3/Dir4/Dir5 #一次性创建多个有嵌套关系的目录文件
ls
ls命令来自英文单词list的缩写,中文译为“列出”,其功能是显示目录中的文件及其属性信息,
是最常使用的Linux命令之一。 默认不添加任何参数的情况下,ls命令会列出当前工作目录中的文件信息,
常与cd或pwd命令搭配使用,十分方便。
带上参数后,我们可以做更多的事情。作为最基础、最频繁使用的命令,有必要仔细了解其常用功能。
语法格式:ls 参数 文件名
常用参数:
-a 显示所有文件及目录 -r 依据首字母将文件以相反次序显示
-A 不显示当前目录和父目录 -R 递归显示所有子文件
-d 显示目录自身的属性信息 -S 依据内容大小将文件排序显示
-i 显示文件的inode属性信息 -t 依据最后修改时间将文件排序显示
-l 显示文件的详细属性信息 -X 依据扩展名将文件排序显示
-m 以逗号为间隔符,水平显示文件信息 -color 以彩色显示信息
参考示例:
ls #显示当前目录中的文件名(默认不含隐藏文件)
ls -l #以详细信息模式输出文件名及其属性信息, 简写 ll
ls -a #显示当前目录中的文件名(默认含隐藏文件,Linux中隐藏文件用 . 开头)
. 一个点的文件是当前路径
.. 两个点的文件是上级路径
.abc .开头的文件是Linux系统中的隐藏文件
ls /etc #显示指定目录中的文件列表,默认查看是当前工作目录。
ls / #指定查看根目录下有哪些文件
ls ./ #查看自己当前目录下有哪些文件 等价于 ls
ls ../ #查看当前目录的上级目录有哪些文件
ls ../abc #查看上级目录中abc目录中有哪些文件
ls ../../../ #查看上级的上级的上级目录有哪些文件,最多到根目录(/)位置截止
ls -i #显示当前目录中的文件名及inode属性信息
ls -Sl /etc #依据文件内容大小进行排序,显示指定目录中文件名及其属性详情信息
cd
cd命令来自英文词组change directory的缩写,
其功能是更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,
若省略不写则会跳转至当前使用者的家目录。
语法格式:cd 参数 目录名
常用参数:
-L 切换至符号链接所在的目录 ~ 切换至用户家目录
-P 切换至符号链接对应的实际目录 .. 切换至当前位置的上一级目录
- 切换至上次所在目录
参考示例
cd #就是直接改命令后enter键会回到自己的家目录
cd ~ #切换至当前用户的家目录,等价于 cd 回车 默认进入家目录
cd /Dir #切换到根目录下指定目录,注意如果没有这个目录,
#或者权限不足则提示不能切换。
cd ./Dir #切换到当前目录下的指定目录 等价cd Dir
cd ../Dir #切换到上级目录下的指定目录
cd ./Dir1/xxx/yyy #切换到当前位置下的多层级目录
cd .. #进入到上一级所在目录,如果不清楚位置,pwd命令可以看到绝对路径。
cd ../../../ #通过多次的上级目录,切换到上级的上级的上级目录。
cd - #返回到上一次所在目录
cd / #直接进入到根目录所在位置
mv
mv命令来自英文单词move的缩写,中文译为“移动”,其功能与英文含义相同,
能够对文件进行剪切和重命名操作。这是一个被高频使用的文件管理命令,
我们需要留意它与复制命令的区别。当前mv命令应理解成重命名操作.
语法格式:mv 参数 源文件名 目标文件名
常用参数:
-b 覆盖前为目标文件创建备份 -v 显示执行过程详细信息
-f 强制覆盖目标文件而不询问 -Z 设置文件安全上下文
-i 覆盖目标文件前询问用户是否确认 --help 显示帮助信息
-n 不要覆盖已有文件 --version 显示版本信息
-u 当源文件比目标文件更新时,才执行覆盖操作
参考示例:
mv File1.cfg File2.cfg #将File1.cfg文件重命名为 File2.cfg文件,注意源文件必须存在。
mv File2.cfg ./Dir1/ #将指定文件File2.cfg移动到当前Dir1目录中,保留文件原始名称:
mv Dir1 ./Dir11/Dir2/ #将指定目录移动到当前Dir11目录中,并定义新的目录名称为Dir2:
touch a b c d #在当前目录下创建四个普通文件a b c d
mv -f ./Dir11/* . #将当前Dir11目录中所有的文件都移动到当前工作目录中,
若遇到文件已存在则直接覆盖,Dir11中文件将全部移走变空目录。
注意:所有操作都限于当前家目录,不要在 / 目录下工作,有权限限制。
rmdir
rmdir命令来自英文词组remove directory的缩写,其功能是删除空目录文件。
rmdir命令仅能删除空内容的目录文件,如需删除非空目录时,需要使用带有-R参数的rm命令进行操作。
而rmdir命令的递归删除操作(-p参数使用)并不意味着能删除目录中已有的文件,而是要求每个子目录
都必须是空的。
语法格式:rmdir 参数 目录名
常用参数:
-p 递归处理所有子文件 --help 显示帮助信息
-v 显示执行过程详细信息 --version 显示版本信息
参考示例:
rmdir Dir #删除指定的空目录,非空目录删除失败。
#非空就是目录中有任意文件都不能删除。
rmidr -p Dir #删除指定的空目录及其内部的子空目录
mkdir -p Dir1/Dir2/Dir3/Dir4 递归嵌套创建
ls Dir1/Dir2/Dir3/Dir4/
rmdir -p Dir1/Dir2/Dir3/Dir4/ 递归嵌套删除
mkdir dir1 dir2 dir3 并列创建
ls
rmdir dir1 dir2 dir3 并列删除
rmdir -v Dir #删除指定的空目录并显示删除的过程
pwd
pwd命令来自英文词组print working directory的缩写,其功能是显示当前工作目录的路径,
即显示所在位置的绝对路径。 在实际工作中,我们经常会在不同目录之间进行切换,
为了防止“迷路”,可以使用pwd命令快速查看当前所处的工作目录路径,方便开展后续工作。
语法格式: pwd 参数
常用参数:
-L 显示逻辑路径 --version 显示版本信息
-P 显示实际物理地址 --help 显示帮助信息
参考示例:
pwd #查看当前工作目录路径
============================================================================
首先,mdir mycode
其次,ls 确认目录创建
再次,cd mycode 切换进入目录
然后,touch a.txt 创建普通文件
最后,cd ~ 返回家目录
如果目录问题,可以修改 mv
可以删除 rmdir
文件管理命令
普通文件:不支持 cd 指令
新建文件: touch、vim, gedit
编辑文件: vim 、 gedit
查看文件: cat 、more、head、 tail 、vim 、stat
删除文件: rm
普通文件和目录文件:
修改文件: chmod、 chown、chgrp
拷贝文件: cp
移动文件: mv
链接文件: ln
===============================================================
touch
touch命令的功能是创建空普通文件与修改时间戳。
如果文件不存在,则会创建一个空内容的文本文件;
如果文件已经存在,则会对文件的Atime(访问时间)和Ctime(修改时间)进行修改操作,
管理员可以完成此项工作,而普通用户只能管理主机的文件。
语法格式:touch 参数 文件名
常用参数:
-a 设置文件的读取时间记录 -t 设置文件的时间记录
-c 不创建新文件 --help 显示帮助信息
-d 设置时间与日期 --version 显示版本信息
-m 设置文件的修改时间记录
参考示例:
touch File.txt #创建出一个指定名称的空文件,建议文件名要符合规范。
#注意:linux中没有文件后缀的概念。
touch File{1..5}.txt #结合通配符,创建多个指定名称的空文件
#File属于文件前缀,.txt属于文件后缀,
#{1..5} 是文件创建编号边界
touch -d "2023-05-18 15:44" File.cfg
#修改指定文件的查看时间和修改时间
gedit: 编辑器只能在可视化界面操作
gedit命令来自英文词组“GNOME text editor”的缩写,其功能是用于编辑文本信息,
是GNOME桌面环境的文本编辑器。gedit命令拥有非常强大的通用文本编辑功能,
能够创建和编辑各类型文本文件,用户还可以向gedit中添加自主选择的插件,
让编辑器支持更多高级功能。
语法格式:gedit [参数] [文件名]
常用参数:
-f 忽略部分错误信息 -R 递归处理所有子文件
-s 使用独立模式 -v 显示执行过程详细信息
-w 使用独占方式打开文件 --encoding 设置字符编码
参考示例:
gedit File.cfg #打开并编辑指定的文件:
gedit --encoding=UTF-8 File #打开文件时使用的字符编码
编辑器: vim gedit emacs .....
cat
cat命令来自英文词组concatenate files and print的缩写,其功能是在终端设备上显示文件内容。
在Linux系统中有很多用于查看文件内容的命令,例如more、tail、head等,每个命令都有各自的特点。
cat命令适合查看内容较少的纯文本文件。 对于内容较多的文件,使用cat命令查看后会在屏幕上快速滚屏,
用户往往看不清所显示的具体内容,只好按Ctrl+C组合键中断命令执行,对于大文件干脆用more命令。
语法格式:cat 参数 文件名
常用参数:
-A 等价于-vET参数组合 -t 等价于-vT参数组合
-b 显示行数(空行不编号) -T 将TAB字符显示为^I符号
-e 等价于-vE参数组合 -v 使用^和M-引用,LFD和TAB除外
-E 每行结束处显示$符号 --help 显示帮助信息
-n 显示行数(空行也编号) --version 显示版本信息
-s 显示行数(多个空行算一个编号)
参考示例:
cat file #查看指定文件的内容
cat -n file #查看指定文件的内容并显示行号
cat /dev/null > file #搭配空设备文件和输出重定向操作符,清空指定文件的内容
cat /dev/cdrom > xxx.iso #搭配输出重定向操作符,将光盘设备制作成镜像文件:
more 查看大文件内容使用, 可以通过空格可以翻页和enter键翻行,默认在文件开头位置,q退出查看。
head 不论文件大小,默认查看前10行,可以通过 head -10 xxx 查看指定10行文件。
tail 不论文件大小,默认查看后10行,可以通过 tail -10 xxx 查看指定10行文件
stat 查看文件的属性信息,包括文件大小,权限,链接,时间,类型,属主 ......
==================================================================================
1、新建一个自己的目录: test
2、在自己的目录中新建普通文件: a.txt
3、在新建的普通文件中写入信息: 《静夜思》
4、使用不同的查看文件命令打印: a.txt
5、多写入一些内容,可以用more进行翻页输出。
==================================================================================
rm
rm命令来自英文单词remove的缩写,中文译为“消除”,其功能是删除文件或目录,
一次可以删除多个文件,或递归删除目录及其内的所有子文件。
rm也是一个很危险的命令,使用的时候要特别当心,尤其对于新手更要格外注意。
例如,执行 rm -rf /* 命令会清空系统中所有的文件,甚至无法恢复回来。
所以我们在执行之前一定要再次
确认在在哪个目录中、到底要删除什么文件,考虑好后再敲击Enter键,要时刻保持清醒的头脑。
语法格式:rm 参数 文件名
常用参数:
-d 仅删除无子文件的空目录 -v 显示执行过程详细信息
-f 强制删除文件而不询问 --help 显示帮助信息
-i 删除文件前询问用户是否确认 --version 显示版本信息
-r 递归删除目录及其内全部子文件
参考示例:
rm File.cfg #删除文件时默认会进行二次确认,敲击y进行确认
rm -i file.cfg #二次确认后删除,不确认文件保留。
rm -f File.cfg #强制删除文件而无须二次确认:
rm -rf Dir #删除指定目录及其内的全部子文件,一并强制删除:
rm -f *.txt #强制删除当前工作目录内所有以.txt为后缀的文件
rm -rf ./* #强制清空当前所在位置的文件,但是千万不要在根目录或者一级子目录执行。
rm -rf /* #强制清空服务器系统内的所有文件(慎用!!!):
chmod
chmod命令来自英文词组change mode的缩写,其功能是改变文件或目录权限的命令。
默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己文件的权限属性。
设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件,建议加入-R参数进行递归操作,
这意味着不仅对于目录本身,而且也对目录内的子文件/目录进行新权限的设定。
语法格式:chmod 参数 文件名
常用参数:
-c 改变权限成功后再输出成功信息 --no-preserve-root 不特殊对待根目录
-f 改变权限失败后不显示错误信息 --preserve-root 禁止对根目录进行递归操作
-R 递归处理所有子文件 --reference 使用指定参考文件的权限
-v 显示执行过程详细信息 --version 显示版本信息
--help 显示帮助信息
参考示例:
chmod 0775 File.cfg #设定某个文件的权限为0775
chmod -R a+r Dir #设定某个目录及其内部的子文件可被任何人读取
-R递归目录
a+r a ==》 all == u+g+o r ==>读
u g o ==>u 是拥有着权限 g 用户组权限 o 其他用户权限
rwx rwx rwx
chmod u+r a.txt # 所属用户增加可读权限
chmod u-r a.txt # 所属用户减少可读权限
chmod u=r a.txt # 所属用户设置可读权限
chmod a+r a.txt # 给所有人增加可读权限
chmod u+x,g+w a.txt # 同时修改多个权限
chmod ug+x a.txt # 同时修改多个权限
chmod u+s ./a.txt #为某个二进制命令文件新增SUID特殊权限位
chmod 777 a.txt # 给所有人增加读、写、执行权限
#小心使用,不是必须不要777权限。
chmod -R 777 目录 # 修改目录及目录下所有文件的权限
一般情况下,目录的默认权限是:0755
普通文件的权限是:0644
补充说明:
特殊权限位主要有三种,分别是 SUID(Set User ID)、SGID(Set Group ID)和 Sticky Bit(粘滞位)
SUID
作用:当一个可执行文件设置了 SUID 权限,那么在执行该文件时,该进程会以文件所有者的身份运行,而不是以执行该文件的用户身份运行。这意味着,即使普通用户执行这个文件,也能拥有文件所有者的权限。
数字表示:对应的数字是 4
SGID
作用:SGID 权限有两种不同的应用场景。
对于可执行文件:执行该文件时,进程会以文件所属组的身份运行。
对于目录:在该目录下创建的新文件和子目录会自动继承此目录的所属组。
数字表示:对应的数字是 2
sticky bit
作用:主要用于目录,通常应用于公共目录,如 /tmp
。当一个目录设置了粘滞位,那么只有该目录的所有者、文件的所有者或者 root
用户可以删除或重命名该目录下的文件,其他用户即使对该目录有写权限,也不能删除或重命名不属于自己的文件。
数字表示:对应的数字是 1

注意:
用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,
一旦匹配权限立即生效,不再向右查看其权限
r和w权限对root 用户无效
只要所有者,所属组或other三者之一有x权限,root就可以执行
chown:超级用户用来修改文件的属主和文件组权限。
只有文件主和超级用户才可以便用该命令。
sudo chown -R root /usr/123 #将目录/usr/123及其下子目录的文件主改成root
sudo chown root:root xxx.cfg #修改xxx.cfg 文件的用户和属主身份。
chgrp: chgrp命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。
如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
sudo chgrp root abc #把文件abc属组由caoqb更改为root
sudo chgrp -vR root test1/ #把目录test1及其目录下的所有文件一并由caoqb更改为root
chown :改变文件拥有者
chgrp :改变文件所属群组
chmod :改变文件的权限
cp
cp命令来自英文单词copy的缩写,中文译为“复制”,其功能是复制文件或目录。
cp命令能够将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。
-r参数用于递归操作,复制目录时若忘记添加则会直接报错;
-f参数则用于当目标文件已存在时会直接覆盖而不再询问。这两个参数尤为常用。
语法格式:cp 参数 源文件名 目标文件名
常用参数:
-a 功能等价于pdr参数组合 -l 对源文件建立硬链接,而非复制文件
-b 覆盖目标文件前先进行备份 -p 保留源文件或目录的所有属性信息
-d 复制链接文件时,将目标文件也建立为链接文件 -r 递归复制所有子文件
-f 若目标文件已存在,则会直接覆盖 -s 对源文件建立软链接,而非复制文件
-i 若目标文件已存在,则会询问是否覆盖 -v 显示执行过程详细信息
参考示例:
使用这些命令之前,建议ls 查看文件是否在,如果不在 cp/mv 会操作失败。
cp File1.cfg File2.cfg #复制指定的源文件,并定义新文件的名称,相当于文件备份:
cp -r Dir1 Dir2 #复制指定的源目录,并定义新目录的名称:
cp -f File1.cfg ./dir1/ #将指定文件复制到/dir1目录中,并覆盖已有文件,不进行询问
cp -a File1.cfg File2.cfg #复制文件时,保留其原始权限及用户归属信息
cp File1.cfg File2.cfg ./dir2 #将多个文件一同复制到/dir2目录中
注意:拷贝操作 会有新的一份文件生成,所以源文件依旧存在。
如果只需要一份文件,而是移动了文件的位置请用mv命令。
cp xxx.txt yyy.txt zzz.txt ./dir1 #拷贝文件到指定目录,源文件依旧存在
mv xxx.txt yyy.txt zzz.txt ./dir1 #移动文件到指定目录,源文件不存在
共享文件拷贝:
从共享中拷贝文件到虚拟机的家目录: cp /mnt/hgfs/share/???.txt ~
从家目录考别文件到共享文件目录: cp ~/xxx.txt /mnt/hgfs/share
从U盘拷贝东西到家目录: cp /run/media/caoqb/TOOL/a.txt ~
1、格式:fat32格式
2、usb控制器的兼容性选 3.1
ln
ln命令来自英文单词link的缩写,中文译为“链接”,其功能是为某个文件在另外一个位置建立同步的链接。
Linux系统中的链接文件有两种形式,一种是硬链接,另一种是软链接。
软链接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后,软链接文件也将无法使用;
硬链接则是将文件的inode属性块进行了复制,因此把原始文件移动或删除后,硬链接文件依然可以使用。
语法格式: ln 参数 源文件名 目标链接文件名
常用参数:
-b 为已存在的目标文件创建备份 -s 对源文件创建软链接
-d 允许管理员创建目录的硬链接 -S 设置备份文件的后缀
-f 强制创建链接而不询问 -t 设置链接文件存放于哪个目录
-i 若目标文件已存在,则需要用户二次确认 -v 显示执行过程详细信息
-L 若目标文件为软链接,找到其对应文件 --backup 备份已存在的文件
-n 将指向目录的软链接视为普通文件 --help 显示帮助信息
-P 若目标文件为软链接,直接链接它自身 --version 显示版本信息
-r 创建相对于文件位置的软链接
参考示例:
ln File1.cfg linkFile1.cfg #为指定的源文件创建快捷方式(默认为硬链接形式)
ln -s File1.cfg linkFile2.cfg #为指定的源文件创建快捷方式(设定为软链接形式)
ln -v File1.cfg File2.cfg #为指定的源文件创硬连接,并输出制作的过程信息
vim管理命令
vi/vim 命令:终端下编辑文件的首选工具,号称:编辑器之神
基本上vim可以分为三种模式,分别是
命令模式(command mode) ===>输入vi的命令和快捷键,默认打开文件时候的模式。
插入模式(Insert mode) ===>进入编辑模式,可以编辑文件
底行模式(last line mode) ===>调整文件内容
常规基本操作:
1、vim file #vim后跟文件名打开文件,默认进入命令行模式,不能编辑文件
2、按下 i 字符即可进入插入模式,注意文件左下角会出现 "--插入(粘贴)-- "
3、开始编辑文件内容
4、按下 ESC 键,切换到命令行模式,再按下 shift + : 组合键,进入底行模式,标志是
文件左下角出现不停闪烁的":"在":"之后写 wq 回车 保存退出
sudo 命令是提权命令,在没有权限执行的时候,
在命名最前面加上该命令就会用root身份执行。
但是会要求执行时候输入密码,看不见但是输入正确即可。
sudo vim xxx #以管理员方式编辑xxx文件
其他操作命令:
cd ~/03day/ #回家的特定目录
cp /usr/include/python3.9/pyconfig-64.h ./ #拷贝文件xxx.h到 当前目录
ls #查看
1、移动命令,所有操作在命令行模式执行
0)默认支持方向键移动
1)向前移动: l 、 空格、->
2)向后移动: h、 <-
3)移动到下一行: +、ENTER、j、ctrl+n、方向下键
4)移动到上一行: - 、 k、 ctrl+p 、 方向上键
向上
|
|
- | k
|
|
向前<---h----光标当前位置 ---l--->向后
|
+ | j
|
|
向下
其他快捷操作:
移动到行首:0 移动到行尾:$
屏幕滚动下: ctrl+f 屏幕滚动上: ctrl+b
zt 定位到屏幕顶端 zb 定位到屏幕底端
gg 定位到文件开头 G 定位到文件末尾
2、编辑命令
1) 插入 i/I i 在光标当前插入
I 在光标行开头插入
2) 附加 a/A a 在光标后增加
A 在光标行最后增加
3)新行 o/O o 在光标行下新起一行
O 在光标行上面新起一行
4)删除 x/X x 删除光标所在处字符
X 删除光标前面的字符,
可以 nx /nX 表示删除多少个字符
5)删除行 dd/D dd 删除光标所在行
D 从光标所在位置开始到行末位
dgg 删除光标所在行到文件开头的所有数据
dG 删除光标所在行到文件末尾的所有数据
u 用来插销刚才的操作
6)剪贴与粘贴:
dd 剪贴一行
p 粘贴一行
7)复制与粘贴:
yy 复制一行
p 粘贴一行
8)复制与移动: 底行模式下执行
:开始行,结束行 co 目标行
例如 :1,2 co 5 把第一行到第二行复制到第五行
:开始行,结束行 m 目标行
例如: :1,2 m 5 把第一行到第二行移动到第五行
9)移动到指定行: :行号 行号G
3、查找与替换命令
1) 查找 在命令模式使用 "/" 在其后直接写需要查询的
关键字 然后 回车 ==》n/N 来查询
n 表示从光标处开始往下找
N 表示从光标处开始往上找
/\<xx\> 表示严格匹配查找 xx 字符
比如:/\<printf\> ==>严格匹配,只查找该单词
/printf ==>模糊匹配,只要包含该单词都高亮显示
在当前文档中严格匹配查找单词printf
2) 替换 :g/s1/s//s2/g
将文件中所有的s1字符串都替换成s2,
s1和s2可以使字母也可以是字符串
比如::g/printf/s//PRINTF/g
将当前文档中所有的小写printf全部替换成大写的printf
4、其他常用操作
u 撤销刚才的操作 . 重复刚才的动作
挂起 ctrl+z 恢复 fg
关键字补齐 ctrl+n 自动缩进 "="
高亮显示 % :sp(:vsp) 文件名 横(纵)向窗口, ctrl+w 多窗口切换
显示不同 :set diff 去掉显示不同语法 :set nodiff
显示行号 :set nu
5、保存退出命令
: wq 保存退出
: q 不保存退出
: x 保存退出
: wq! 强制保存退出
: q! 强制不保存退出
:wq /home/linux/xxx.c 指定位置保存文件
自动框架: .vimrc 文件
1、将 .vimrc 拷贝到虚拟机中
2、修改 .vimrc 文件内容 为自己的版权信息
3、将 .virc 拷贝到自己的家目录下
4、vim xxx.c 或者 vim xxx 可以带语法高亮操作文件
压缩解压缩文件
打包解包指令: tar
压缩解压指令: zip, xz
打包压缩解压缩: tar
===============================================================================
tar 指令:
tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),
也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,
用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,
这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
语法
tar (选项) (参数)
选项:
-A或--catenate:新增文件到以存在的备份文件; -B:设置区块大小;
-c或--create:建立新的备份文件;
-C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-d:记录文件的差别; -x或--extract或--get:从备份文件中还原文件;
-t或--list:列出备份文件的内容; -z或--gzip或--ungzip:通过gzip指令处理备份文件;
-Z或--compress或--uncompress:通过compress指令处理备份文件;
-f<备份文件>或--file=<备份文件>:指定备份文件; -v或--verbose:显示指令执行过程;
-r:添加文件到已经压缩的文件; -u:添加改变了和现有的文件到已经存在的压缩文件;
-j:支持bzip2解压文件; -v:显示操作过程;
-l:文件系统边界设置; -k:保留原有文件不覆盖;
-m:保留文件不被覆盖; -w:确认压缩文件的正确性;
操作案例:
打包: tar -cvf xxx.tar xxx
将 xxx 文件/目录打包成为 xxx.tar 包文件
解包: tar -xvf xxx.tar
将 xxx.tar 包文件,释放到当前目录中
注意:如果要指定位置解包
tar -xvf xxx.tar -C path
压缩:
zip xxx.zip xxx
将 xxx 文件压缩为 xxx.zip 的压缩文件
如果是目录文件则为:
zip -r xxx.zip xxx
xz -z xxx.tar 将xxx.tar 压缩成 xxx.tar.xz压缩文件,源文件直接压缩
解压缩:
unzip xxx.zip
将xxx.zip压缩文件解压缩到当前目录
如果要指定目录解压缩必须:
unzip xxx.zip -d path
xz -d xxx.tar.xz 可以将后缀是xz的文件解压成tar包
打包压缩命令:
tar -zcvf xxx.tar.gz xxx
将xxx文件/目录 打包压缩为 xxx.tar.gz 文件
tar -jcvf xxx.tar.bz2 xxx
将xxx文件/目录 打包压缩为 xxx.tar.bz2 文件
解压缩解包命令:
tar -zxvf xxx.tar.gz
将压缩文件直接解压缩解包到当前目录
可以将文件用 -C 参数指定解压缩到目录,比如: tar -zxvf xxx.tar.gz -C /temp
tar -jxvf xxx.tar.bz2
将压缩文件直接接压缩解包到当前目录
课堂练习:
将03day中的测试文件进行如上打包压缩和解包解压缩指令测试。
清华大学内核下载地址:
Index of /kernel/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
包/源管理命令
Linux下的包/源管理命令:主要任务就是完成在Linux环境下安装/卸载/维护软件。
1、rpm 是最基础的rpm包的安装命令,需要提前下载相关安装包和依赖包。
2、yum/dnf 是基于rpm包的自动安装命令,可以自动在仓库中匹配安装软件和依赖包。
注意:以上是安装指令,以下是安装源。
3、光盘源 是指的 安装系统时候的操作系统光盘,它里面有很多自带的常用软件安装包,定位于当前主机。
4、局域网源 是指本地局域网不便连接互联网,而且客户机都在局域网内,定位于网内自建仓库局部使用。
5、互联网源 是指当前主机可以直接外接互联网,通过外网提供的的仓库完成在线安装软件。
6、源码安装 是指从互联网下载相关软件的源代码,在本机上进行配置,编译,安装 的过程。
离线管理命令
rpm 命令:
rpm命令来自英文词组redhat package manager的缩写,中文译为“红帽软件包管理器”,
其功能是在Linux系统下对软件包进行安装、卸载、查询、验证、升级等工作,
常见的主流系统(如RHEL、CentOS、Fedora等)都采用这种软件包管理器,
推荐用固定搭配“rpm -ivh 软件包名” 安装软件,而卸载软件则用
固定搭配“rpm -evh 软件包名”,
简单好记又好用。
语法格式:rpm 参数 软件包名
常用参数:
-a 显示所有软件包 -p 显示指定的软件包信息
-c 仅显示组态配置文件 -q 显示指定软件包是否已安装
-d 仅显示文本文件 -R 显示软件包的依赖关系
-e 卸载软件包 -s 显示文件状态信息
-f 显示文件或命令属于哪个软件包 -U 升级软件包
-h 安装软件包时显示标记信息 -v 显示执行过程信息
-i 安装软件包 -vv 显示执行过程详细信息
-l 显示软件包的文件列表
使用示例:
rpm -ivh telnet-0.17-85.el9.x86_64.rpm #直接安装不需要依赖
#正常安装软件包,需要提前下载rpm包文件
#https://rpmfind.net/linux/RPM/
#http://rpm.pbone.net/
rpm -ivh gthumb-3.12.4-1.1.x86_64.rpm #安装需要依赖
rpm -qa|grep telnet
telnet-0.17-85.el9.x86_64
rpm -qa #显示系统已安装过的全部RPM软件包
rpm -qa | grep ssh #过滤出其中某一个包
rpm -qa --last #列出所有已安装软件包,按照最近安装或更新时间排序
rpm -qa --last | head -20 #列出最近安装的20个软件
rpm -ql telnet #查询某个软件的安装路径
rpm -qi telnet #查看包的信息
whereis ifconfig ===》/sbin/ifconfig
rpm -qf /sbin/ifconfig #查看某一个程序来自哪个安装包
whereis ls ==》/usr/bin/ls
rpm -qf /usr/bin/ls
rpm -qd net-tools #查看安装包的帮助文档位置
rpm -qc rsync #查看安装的软件的配置文件位置
rpm -qR net-tools #查看安装软件的依赖包
rpm -qal net-tools-2.0-0.25.20131004git.1.al7.x86_64.rpm
#查看rpm包将要安装的文件
rpm -evh telnet #卸载通过RPM软件包安装的某个服务
rpm -e --nodeps telnet #卸载软件包,忽略其依赖项。
rpm -Uvh cockpit-185-2.el8.x86_64.rpm #升级某个软件包
rpm -Uvh --force cockpit-185-2.el8.x86_64.rpm
#强制安装软件包,即使存在版本冲突或其他问题
如果需要依赖,可以下载依赖并将依赖和程序一起安装
sudo rpm -ivh 主程序.rpm 依赖1.rpm 依赖2.rpm ......
课堂练习:
1、安装telnet工具,并确认安装成功。
2、测试telnet功能
^] 出现表示telnet连接目标服务器和端口成功。
^] 不是输入的信息,是按下 ctrl + ] 会自动输入这个符号并退出telnet连接
quit 整体退出当前控制环境。
3、卸载telnet工具
本地源管理命令
yum命令:
yum命令来自英文词组yellow dog updater modified的缩写,其功能是在Linux系统中基于RPM技术
进行软件包的管理工作。yum技术通用于RHEL、CentOS、Fedora、OpenSUSE等主流系统,可以
让系统管理人员交互式地自动化更新和管理软件包,实现从指定服务器自动下载、更新、删除软件包
的工作。 yum软件仓库及命令能够自动处理软件依赖关系,一次性安装所需的全部软件,无须烦琐的操作。
语法格式:yum 参数 动作 软件包
常用参数
install 安装软件包 clean 清理过期的缓存
update 更新软件包 shell 设置使用的shell提示符
check-update 检查是否有可用的更新软件包 resolvedep 显示软件包的依赖关系
remove 删除软件包 localinstall 安装本地软件包
list 显示软件包的信息 localupdate 更新本地软件包
search 搜索指定软件包 deplist 显示软件包的依赖关系
info 显示指定软件包的描述和概要信息
参考示例
yum clean all #清理原有的软件仓库信息缓存
yum makecache #建立最新的软件仓库信息缓存,默认连接原来的互联网源
默认源: /etc/yum.repo.d/redhat.repo
yum search httpd #使用YUM查找软件包
yum install httpd #安装指定的服务及相关软件包
yum -y install httpd
yum list installed |grep httpd
yum info httpd #显示指定服务的软件信息
yum update httpd #更新指定的服务及相关软件包
yum remove httpd #卸载指定的服务及相关软件包
yum grouplist #显示可安装的软件包组列表
yum list #列出所有可安裝的软件清单
yum check-update #列出所有可更新的软件清单
yum update #安装所有更新软件
yum list installed #列出所有已安装的软件包
yum info installed #出所有已安裝的软件包信息
yum本地源实现过程及原理:
先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,
以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行
安装时会自动下载repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中
找到相关包下载并安装。
yum需要依赖于环境,依赖于服务端和客户端,允许跨网络。
(1)服务端需要的两个文件:
RPM包(Packages文件夹中)
元数据(repodata文件夹:目录(软件的目录),软件的依赖关系,软件的位置)
(2)客户端的配置文件中 :
baseurl=地址一定要写到这两个文件夹repodata和packages的上级目录
最终形成两个文件夹Packages (包文件夹一般取名packages)和repodata(元数据文件夹)
(3)仓库类型:
光盘的仓库基本仓库:比较常用的
epel扩展仓库:比较新
==================================================================================
本地光盘仓库搭建过程:
1、虚拟机加载并连接系统安装光盘。
2、挂载光盘到本地临时目录
su root #切换工作身份,不受权限限制
cd /etc/yum.repo.d/ #要在配置目录下工作
mount /dev/sr0 /mnt/
mount 是挂载命令,也叫映射命令,可以将指定文件映射到另一个位置
/dev/sr0 / 是根目录 dev/ 是/目录下的一级子目录 dev sr0是dev目录下的光盘文件
/mnt/ / 是根目录 mnt/ 是/目录下的一级子目录 mnt 因为这是系统临时挂载目录
如果映射成功
如果映射不成功,根据实际错误找解决方案。
记着,mount可能会失效,1、关机重启 2、光盘断开
如果要主动断开,用 umount /mnt 会主动断开挂载。
umount /run/media/xxxx/xxxx 默认挂载的位置断开
mount /dev/sr0 /mnt 指定挂载的位置
3、如果有文件就备份本地原有配置,没有则跳过本操作
cd /etc/yum.repos.d/ 进入到本地配置目录
mkdir bak 创建一个备份目录
mv *.repo ./bak/ 将原来/默认的repo资源文件拷贝/备份到当前的bak目录中
4、创建新的本地配置文件
要注意文件权限问题, sudo vim 打开或者 su root 再打开 ,
注意文件名称任意,但是后缀必须是 repo
vim local.repo #写入如下内容,并将格式左对齐 靠边。
[RHEL9-BaseOS]
name=RHEL9-BaseOS
baseurl=file:///mnt/BaseOS
gpgcheck=0
[RHEL9-Appstream]
name=RHEL9-Appstream
baseurl=file:///mnt/AppStream
gpgcheck=0
主配置文件:cat /etc/yum.conf
默认的yum仓库 是centos官方的yum源,需要联网才可以使用。 ls /etc/yum.repos.d/
[main] #保存着yum的全局设置
gpgcheck=1 #检查来源是否合法,需要有制作者的公钥信息
installonly_limit=3 #同时可以安装3个软件包、最小为2,设置为0或者1则不限制
clean_requirements_on_remove=True #删除包时,是否将不再使用的包删除
best=True #升级时,自动选择安装最新版,即使缺少包的依赖
skip_if_unavailable=False #不解决依赖安装
5、刷新缓存
yum clean all
yum makecache
yum 本地光盘源仓库创建成功。
6、测试安装软件
yum install httpd
本地仓库搭建的源是光盘: /dev/sr0
本地仓库对应的配置文件: /etc/yum.repo.d/local.repo
本地仓库映射的包位置 : /mnt/BaseOS/Package/...rpm
/mnt/Appstream/Package/....rpm
一旦重启系统或者光盘断开,则需要将以上步骤再来一遍。
错误:
错误:为仓库 'RHEL9-BaseOS' 下载元数据失败 :
Cannot download repomd.xml: Cannot download repodata/repomd.xml:
All mirrors were tried
原因: 本地光盘与映射的关系断开了,所以配置文件指向的位置没有源。
解决: mount /dev/sr0 /mnt/
网络源管理命令
一、局域网yum源配置: 建设一个本地网络仓库给本地局域网用户提供下载安装。
二、互联网yum源配置: 在线获取最新安装文件的通道。
==============================================================================
1、局域网Web方式yum源配置:
服务器提供yum安装服务:
192.168.42.129 server 提供服务器功能
su root #切换管理员身份
yum install -y httpd #安装并启动httpd
setenforce 0 #关闭SELinux
#getenforce #查看当前状态
Permissive #关闭状态的效果
systemctl stop firewalld #临时关闭防火墙
systemctl status firewalld #查看防火墙状态,空圈表示关闭,绿点表示开启
q 按键退出查看状态命令
httpd服务的目录文件在 cd /var/www/html
进入该目录,创建文件夹:mkdir rhiso,挂载光盘到 rhiso
mount /dev/sr0 /var/www/html/rhiso
#挂载 光盘 httpd的工作目录
systemctl restart httpd #启动httpd
systemctl status httpd #查看httpd是否启动,查看完毕用q键退出。
在浏览器输入本机ip/rhiso,比如:http://127.0.0.1/rhiso/
http://192.168.42.129/rhiso/
出现下面页面代表配置完成
中文乱码解决方法 在 /etc/httpd/conf/httpd.conf
配置文件中加入 IndexOptions Charset=UTF-8
客户端访问服务器的yum源:
192.168.42.128 client
当在一台机器已经配置好httpd后,我们选择同一网段内网其他机器配置yum源去访问此台服务器
如果使用拿不到ip地址,是因为我们都是同一个虚拟机拷贝的,会出现地址冲突
mv /var/lib/NetworkManager /var/lib/NetworkManager.bak #网络接口备份
reboot #重启虚拟机机器,设备在重启阶段会自动创建一个新的接口。
有ip地址后,测试一下,当前客户机是否与服务器联通情况,
ping 192.168.x.x #测试当前主机是否与服务器连接畅通
测试客户端与服务器是否网络畅通
su root
cd /etc/yum.repos.d/
vim network.repo 加入如下内容:
[RHEL9-BaseOS]
name=RHEL9-BaseOS
baseurl=http://192.168.42.129/rhiso/BaseOS
gpgcheck=0
[RHEL9-Appstream]
name=RHEL9-Appstream
baseurl=http://192.168.42.129/rhiso/AppStream
gpgcheck=0
yum clean all #清理旧缓存
yum makecache #建立新缓存
yum repolist #查看仓库列表
测试安装:
yum install telnet #使用方法参考 离线安装环境中的telnet应用。
2、建立第三方互联网络源,要求互联网要畅通。
阿里云网络源,aliyun的镜像站点为
阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
redhat 9.0 版本是在 centos 里,点击centos
CSDN 收集的各个版本RHEL的镜像地址
Redhat系列系统在线镜像源_redhat镜像-CSDN博客
[root@master ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)
注:此处先查看自己的发行版本信息,选择相应的仓库。
#仓库文件可以自己写也可以从aliyun网站下载
su root
cd /etc/yum.repo.d/
mv *.repo ./bak #备份原有的所有镜像文件
[root@master ~]# vim /etc/yum.repos.d/aliyun.repo
[appstream]
name=appstream
#baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/AppStream/x86_64/os/
gpgcheck=0
[baseos]
name=baseos
#baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/os/
gpgcheck=0
自动排版操作:
1、先按下esc键退到命令行模式
2、按下v 键进入可视化模式
3、用方向键向上移动选中所有文件
4、按下 = 键自动排版
5、wq 保存退出。
#验证互联网源是否配置成功
[root@kongd ~]# yum clean all #删除旧缓存
[root@kongd ~]# yum makecache #创建新缓存
#验证能否装包成功
[root@master ~]# yum install gcc -y
gcc -v
最后显示如下表示编译器 gcc 安装成功
gcc 版本 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC)
vim hello.c 编写c源代码
gcc hello.c 编译c源代码 ===》自动生成 a.out 程序
./a.out 执行该程序
- 清华源镜像站点为 https://mirrors.tuna.tsinghua.edu.cn/
- 中国科技大学镜像站点 https://mirrors.ustc.edu.cn/
- 网易开源镜像站 http://mirrors.163.com/
- ……等等很多大学开源镜像站点……
yum install gthumb 安装失败,没有资源
扩展源EPEL是 yum 的一个软件源, 里面包含了许多基本源里没有的软件
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
然后可以安装其他扩展软件:
yum install sl
扩展内容:以下内容可以不装:
yum install tmux
yum install git
git clone https://github.com/dustinkirkland/hollywood.git
./hollywood/bin/hollywood &
收尾:
cd /etc/yum.repos.d
mkdir ./bak
mv local.repo ./bak
mv network.repo ./bak
mv redhat.repo ./bak
ls
源码管理命令
源码包的安装
编译需要编译环境,开发环境,开发库,开发工具。
常用的编译环境有c、c++、perl、java、python 5种
c环境的编译器: gcc(GNU C Complier)
c++环境的编译器:g++
make(进行编译的动作)编译命令:c、c++的统一项目管理工具,
编译时有可能调用gcc也有可能调用g++。
使用makefile文件定义make按何种次序去编译源程序文件中的源程序
源码安装三部曲(常见):
第一步: ./configure(定制组件)
1.指定安装路径,例如 –prefix=/opt/nginx-1.12
2.启用或禁用某项功能, 例如 --enable-ssl
3.和其它软件关联,例如–with-pcre
4.检查安装环境,例如是否有编译器 gcc,是否满足软件的依赖需求
5.检测通过后生成Makefile文件
第二步: make (生成程序)
1.执行make命令进行编译, 可以使用-j指定CPU核心数进行编译
2.按Makefile文件进行编译, 编译成可执行二进制文件
3.生成各类模块和主程序
第三步: make install
1.按Makefile定义好的路径拷贝至安装目录中
上面介绍的源码三部曲不能百分百通用于所有源码包, 也就是说源码包的安装并非存在标准安装步骤,
但是大部分源码安装都是类似的步骤
建议:
拿到源码包解压后,然后进入到目录找相关的帮助文档,通常会以INSTALL或者README为文件名
源码包编译实例1:
下面通过编译安装nginx来深入理解源码包安装
0、先停止以前的httpd服务
systemctl stop httpd.service
1.基础环境准备 [root@localhost ~]#
编译器:yum -y install gcc gcc-c++ make wget
依赖包:yum -y install zlib zlib-devel openssl pcre pcre-devel
2.下载源码包(源码包一定要上官方站点下载,其他站点不安全)
[root@localhost ~]# cd /usr/src
[root@localhost src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
//3.解压源码包,并进入相应目录
[root@localhost src]# tar -zxvf nginx-1.12.2.tar.gz
[root@localhost src]# cd nginx-1.12.2
//4.配置相关的选项,并生成Makefile
[root@localhost nginx-1.12.2]# ./configure --prefix=/opt/nginx-1.12.2 #配置编译环境
#以上结果就是Makefile文件生成,请检查,如果没有就是configure失败。
//5.编译并安装
[root@localhost nginx-1.12.2]# make #开始编译源码,成功就有程序在obj目录生成。
[root@localhost nginx-1.12.2]# make install #开始安装程序
//6.建立软链接
[root@localhost nginx-1.12.2]# ln -s /opt/nginx-1.12.2 /opt/nginx
cp /opt/ginx/sbin/nginx /usr/local/sbin
nginx &
//7.测试效果
systemctl stop httpd #停止Apache 的httpd
cd objs #进入当前生成的程序目录
./nginx & #启动nginx程序,它也是一个web服务器,可以通过浏览器访问。
打开浏览器,输入127.0.0.1
可能出现的错误:
1、not found ./configure: error: C compiler cc is not found
//解决方案
[root@localhost ~]# yum -y install gcc gcc-c++ make
2./configure: error: the HTTP rewrite module requires the PCRE library.
//解决方案
[root@localhost ~]# yum install -y pcre-devel
3./configure: error: the HTTP gzip module requires the zlib library.
//解决方案:
[root@localhost ~]# yum -y install zlib-devel
4./configure: error: SSL modules require the OpenSSL library.
//解决方案
[root@localhost ~]# yum -y install openssl-devel
5.error: ‘struct crypt_data’ has no member named ‘current_salt’
cd.current_salt[0] = ~salt[0];
//解决方案
vim src/os/unix/ngx_user.c
将36行 cd.current_salt[0] = ~salt[0]; 注释掉
6、ngx_http_script.c:698:18: error: cast between incompatible function
//解决方案
进入objs目录下修改Makefile文件
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g
将后面的 -Werror 选项去掉
源码包安装示例2:
linux-安装cmatrix(黑客帝国矩阵效果)
1、安装aalib
wget https://nchc.dl.sourceforge.net/project/aa-project/aa-lib/1.4rc5/aalib-1.4rc5.tar.gz
tar xf aalib-1.4rc5.tar.gz
cd aalib-1.4.0/
./configure
make
make install
2、安装aview
wget Download aview-1.3.0rc1.tar.gz (AA project)
tar xf aview-1.3.0rc1.tar.gz
cd aview-1.3.0
./configure
make
make install
3、安装ImageMagick
yum install ImageMagick
yum install ncurses-devel
4、安装cmatrix
wget https://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2a/cmatrix-1.2a.tar.gz
tar xf cmatrix-1.2a.tar.gz
cd cmatrix-1.2a
./configure
make
make install
验证程序是否可以执行:
cmatrix
cmatrix -b -u 3 -C blue 退出程序按q键
可能出现的错误:
1、cmatrix.c:86:对‘curs_set’未定义的引用
报错:致命错误:curses.h:没有那个文件或目录
原因:主要因为系统中没有找到ncurses-devel软件包
解决:yum install -y ncurses-devel
2、cmatrix.c:516:对‘LINES’未定义的引用
报错:make: *** [cmatrix] 错误 1
原因:需要的包都安装了,可能是软件配置时出现了问题
解决:删除该目录,重新解压,重新配置
============================================================
扩展:
在选择Web服务器时,Nginx和Apache都是备受推崇的选择。然而,对于许多开发者和管理员来说,
选择哪一个可能会成为一个难以解决的问题。因此,我们需要对两者进行比较,以确定哪一个更适
合我们的需求。
首先,Nginx以其高效的性能而闻名。它是一个轻量级的Web服务器,可以处理大量并发连接。
相比之下,Apache是一个成熟的Web服务器,但它在处理并发连接时可能会出现性能瓶颈。因此,
如果您需要处理大量并发连接,Nginx可能是更好的选择。
其次,Nginx具有更好的负载均衡功能。它可以在多个服务器之间均衡地分配流量,以提高性能和
可靠性。Apache也可以实现负载均衡,但相对来说要更为复杂。
最后,Nginx的配置文件比Apache更为简单和易于理解。这意味着您可以更快地配置服务器并更快
地上线。相比之下,Apache的配置可能会更加复杂,需要更多的时间和精力。
网络管理命令
接口管理命令
ip命令 字符终端,可以立即生效但系统重启后配置会丢失.
nmcli命令 字符终端,可以立即生效且系统重启后配置也不会丢失.
nmtui命令 可视化终端,立即生效,重启有效。
================================================================================
ip命令:
ip指令可以显示或操作路由、网路设备,设置路由策略和通道。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
ip [选项] OBJECT COMMAND [help]
OBJECT对象可以是:link,网络设备;addr,设备的协议地址;route,路由表;rule,策略;neigh,arp缓存;tunnel,ip通道;maddr,多播地址;mroute,多播路由
COMMAND是操作命令,不同的对象有不同的命令配置。
link对象支持的命令: set、show。
addr对象支持的命令: add、del、flush、show。
route对象支持的命令: list、flush、get、add、del、change、append、replace、monitor。
rule对象支持的命令: list、add、del、flush。
neigh对象支持的命令: add、del、change、replace、show、flush。
tunnel对象支持的命令: add、change、del、show。
maddr支持的命令: add、del。
mroute支持的命令: show
其中选项列表
-V | -Version 显示版本信息
--help 显示帮助信息
-s | -stats | -statistics 显示详细的信息
-f | -family 指定协议类型
-4 等同-family inet
-6 等同-family inet6
-0 等同-family link
-o | -oneline 每条记录输出一行
-r | -resove 使用系统名字解析DNS
使用 ip 命令可以配置临时网络的连接信息,相关命令示例如下:
ip link #显示网络设备运行状态
ip address #协议地址管理
ip route #路由表管理
ip -s link 显示更详细的设备link信息
ip link show [网络设备名] 仅显示指定的网络设备名的信息
ip link show ens160
ip link set [网络设备名] down 将指定的网络设备下线
ip link set ens160 down
ip link set [网络设备名] up 将指定的网络设备下线
ip link set ens160 up
ip addr|a show [网络设备名]:
查看指定网络设备(网卡名称)的配置信息,如果加了 -s 选项,
ip -s addr show #会添加相关的统计信息,如果接收到的或传送的数据包等
ip [-4] addr|a add IP地址[/掩码] dev [网络设备名]:
添加一个临时的 IPv4 的地址(重启后失效)
ip a add 192.168.72.120/24 dev ens160
添加完成查看效果
ip a show ens160
ip [-4] addr|a del IP地址[/掩码] dev [网络设备名]:删除网卡的临时IPv4地址
ip -4 a del 192.168.72.120/24 dev ens160
删除完成查看效果
ip a show ens160
也可以修改配置文件添加地址,但是
在 redhat9 中,已经不推荐修改配置文件了,而推荐使用命令的方式来进行配置。
要修改配置文件,
我们需要编辑 /etc/NetworkManager/system-connections
目录下的ens160.nmconnection 文件中。
注意:不同的电脑,这个文件的名称可能不同。
下面我们把这个文件编辑一下,把我们固定 IP 写到这个文件中,并指定 dns 和 网关。
#其他省略 保持不变
[ipv4]
address=192.168.72.121/24,192.168.72.2
dns=8.8.8.8;192.168.72.2;61.134.1.4;114.114.114.114
method=manual
#其他省略 保持不变
常用:
ip -s a show ens160
ip -4 a add 192.168.72.120/24 dev ens160
ip -4 a del 192.168.72.120/24 dev ens160
ip link set ens160 down
ip link set ens160 up
ip link show dev ens160
ip -s link
其他详见附件 ip 命令
nmcli 命令:
NetworkManager Client
自动把配置写到 /etc/NetworkManager/system-connections/ens160.nmconnection
接口(device)是物理设备,一个物理设备可以拥有多个配置文件,但只能有一个配置文件
属于使用(active)状态;配置文件的生成与使用状态均由NetworkManager控制。
查看网卡设备
语法: nmcli device 或者简写为 nmcli d
使用示例:
[root@]# nmcli device
[root@]# nmcli d
[root@]# nmcli d show | grep IP4
[root@]# nmcli d show ens160 #显示指定设备的详细信息
[root@]# nmcli d connect ens160 #连接网络,就是激活ens160设备
[root@]# nmcli d disconnect ens160 # 断开网络,也就是把网卡禁用了
查看网卡配置
语法: nmcli connectioin 或简写为 nmcli c
[root@localhost ~]# nmcli connection # 查看网卡信息
[root@localhost ~]# nmcli c show ens160 | grep -i gateway # 查看自动获取的网关地址
[root@localhost ~]# nmcli c show ens160 | grep -i dns # 查看当前网卡的dns配置
配置网卡IP:
1)非交互式
需求:修改 ens160 的 ip 地址为 192.168.72.128,并且是 ipv4,自动连接,
dns为 114.114.114.114,网关为 192.168.72.2,子网掩码为 255.255.255.0
然后再添加一个 ip 地址:192.168.72.125
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual autoconnect yes
ipv4.addresses 192.168.72.128/24 ipv4.gateway 192.168.72.2 ipv4.dns
114.114.114.114 +ipv4.addresses 192.168.72.125/24
如果没有立即生效,需要重启服务: systemctl restart NetworkManager
[root@localhost ~]# cat /etc/NetworkManager/systemconnections/ens160.nmconnection
Linux命令行修改dns
直接修改dns : echo "nameserver 202.202.202.20 ">> /etc/resolv.conf
nmcli connection modify ens160 +/-ipv4.dns/gateway/addresss ......
命令说明:
nmcli c modify ens160: 表示要修改的网卡
ipv4.method manual: 表示网络连接方式为手动配置
autoconnect yes: 表示自动连接,即系统一启动网络就可以用
ipv4.addresses 192.168.72.128/24:配置 ipv4 格式的 IP 地址和子网掩码
ipv4.gateway 192.168.72.2: 配置网关信息,就是路由指向下一跳
ipv4.dns 114.114.114.114: 配置dns服务,域名解析服务,8.8.8.8 ,61.134.1.4
+ipv4.addresses 192.168.72.125/24:表示再添加一个 IP 地址
-ipv4.addresses 192.168.72.125/24:表示删除一个 IP 地址
2)交互式
[root@localhost ~]# nmcli c edit ens160
nmcli>goto ipv4
nmcli ipv4> set dns 192.168.72.2
nmcli ipv4> save
nmcli ipv4> activate
nmcli ipv4> quit
nmcli c show ens160 | grep -i dns
nmcli c up ens160 # 连接网络,即让网卡可用并使设置立即生效
nmcli c down ens160 # 断开网络
nmcli c delete ens160 # 删除网络,注意这个命令不要执行
说明:
在NM里,有2个维度:连接(connection)和设备(device),
这是多对一的关系。想给某个网卡配ip,首先NM要能纳管这个网卡。
设备里存在的网卡(即 nmcli d可以看到的),就是NM纳管的。接着,可以为一个设备配置
多个连接(即 nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件。
同一时刻,一个设备只能有一个连接活跃。可以通过 nmcli c up切换连接。
nmcli d ==>device 是设备的意思,一般都是某个网卡设备
nmcli c ==>connect 是连接的意思,一般都是某个配置文件
一个d可以有多个c,但是一个c一定只有一个d
常用:
nmcli d show ens160
nmcli d connect ens160 #让命令立即生效
nmcli d disconnect ens160
nmcli d modify ens160 +ipv4.addresses 192.168.0.2/24
nmcli c show ens160 | grep -i gateway
nmcli c up ens160 # 连接网络,让命令立即生效
nmcli c down ens160 # 断开网络
nmcli c mod ens160 +ipv4.addresses 192.168.0.2/24
最后也可以通过如下方式让命令生效,需要重新取消激活/激活,或者重启网络服务才能使之生效。
systemctl restart NetworkManager
nmtui 命令:
NetworkManager Termial user interface
这个命令是用于可视化的方式来进行配置。
网络问题汇总:
1、连接激活失败 No suitable device found for this
解决方案:
mv /var/lib/NetworkManager /var/lib/NetworkManager.bak
reboot
IP命令
ip 是个命令, ip 命令的功能很多!基本上它整合了 ifconfig 与 route 这两个命令,
语法结构:
ip [ OPTIONS ] OBJECT [ COMMAND [ ARGUMENTS ]]
OPTIONS选项:
-V:显示指令版本信息;
-s:-stats, -statistics输出更详细的信息;可以使用多个-s来显示更多的信息
-f:-family {inet, inet6, link} 强制使用指定的协议族;
-4:-family inet的简写,指定使用的网络层协议是IPv4协议;
-6:-family inet6的简写,指定使用的网络层协议是IPv6协议;
-0:shortcut for -family link.
-o:-oneline,输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:-resolve,显示主机时,不使用IP地址,而使用主机的域名。
OBJECT对象:
link :网卡信息
address:IP地址信息
neighbour:邻居表
route:路由表
rule:IP策略
maddress:多播地址
mourte:组播路由缓存条目
tunnel:IP隧道
COMMAND命令
add, delete, and show 之类的操作指令
ARGUMENTS
ARGUMENTS是命令的一些参数,它们倚赖于对象和命令。
ip支持两种类型的参数:flag和parameter。
flag由一个关键词组成;parameter由一个关键词加一个数值组成。
为了方便,每个命令都有一个可以忽略的默认参数。
例如,参数dev 是ip link 命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。
ip addr
ip addr 的缩写是ip a ,可以查看网卡的ip、mac等,
增加ip
ip addr add ip/netmask dev 接口
比如给eth0增加一个172.25.21.1/24 地址
ip addr add 172.25.21.1/24 dev eth0
删除ip
ip addr del ip/netmask dev 接口
清空指定网卡的所有ip
ip addr flush dev 接口
给网卡起别名,起别名相当于给网卡多绑定了一个ip
用法: 比如给网卡eth0增加别名
ip addr add 172.25.21.1/32 dev eth0 label eth0:1
删除别名
ip addr del ip/netmask dev eth0
注意:
使用命令的方式设置别名,重启服务就没了
ip link
只能看链路层的状态,看不到ip地址
语法: ip link set 设备接口属性
ip link set dev eth0 promisc on #开启混杂模式
ip link set eth0 up #启用网卡
ip link set eth0 mtu 1500 #设置MTU值,即设置最大传输单元
ip link set eth0 name vbird #设置网卡名,需要在网卡down的时候进行设置,意义不是很大
#注意:在网卡设备关闭状态才能修改。修改后的设备ip默认dhcp获得
ip link set eth0 address aa:aa:aa:aa:aa:aa #设置MAC地址
ip route
设置路由信息
用法:路由条目保存在内核的路由表中,它们包含寻找到其它网络节点的路径信息。
路由表条目都包括一对网络地址/掩码长度以及可选的TOS值等信息。
ip route show
ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254
ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关
ip route del default # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由
===============================================================
net-tools和iproute工具包的命令比较
NET-TOOLS 命令 IPROUTE 命令
arp -a ip neigh
arp -v ip -s neigh
arp -s 192.168.1.1 1:2:3:4:5:6 ip neigh add 192.168.1.1 lladdr 1:2:3:4:5:6 dev eth1
arp -i eth1 -d 192.168.1.1 ip neigh del 192.168.1.1 dev eth1
ifconfig -a ip addr
ifconfig eth0 down ip link set eth0 down
ifconfig eth0 up ip link set eth0 up
ifconfig eth0 192.168.1.1 ip addr add 192.168.1.1/24 dev eth0
ifconfig eth0 netmask 255.255.255.0 ip addr add 192.168.1.1/24 dev eth0
ifconfig eth0 mtu 9000 ip link set eth0 mtu 9000
ifconfig eth0:0 192.168.1.2 ip addr add 192.168.1.2/24 dev eth0
netstat ss
netstat -neopa ss -neopa
netstat -g ip maddr
route ip route
route add -net 192.168.1.0 netmask ip route add 192.168.1.0/24 dev eth0
255.255.255.0 dev eth0
route add default gw 192.168.1.1 ip route add default via 192.168.1.1
==========================================================================
使用命令的方式配置,重启服务就没了,若要永久生效,需要写配置文件,步骤如下:
1、确保NetworkManager服务是停止的
systemctl status NetworkManager 查看服务状态
systemctl stop NetworkManager 临时停止
systemctl disable NetworkManager 下次开机即停止服务
2、编辑配置文件
cd /etc/sysconfig/network-scripts/
vim ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR= ==》ip地址
PREFIX= ==》掩码
GATEWAY= ==》网关
注意:设置别名时必须是静态ip,不能是自动获取
[root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet #网卡类型
BOOTPROTO=static #静态获取ip地址方式
NAME=ens33 #网卡的名称
DEVICE=ens33 #网卡的描述
ONBOOT=yes #开机自启
IPADDR=172.16.12.10 #设置ip地址
NETMASK=255.255.255.0 #设置子网掩码
GATEWAY=172.16.12.2 #设置网关
DNS1=8.8.8.8 #设置dns服务器1
DNS2=114.114.114.114 #设置dns服务器2
3、重启服务
systemctl restart network
如果不想要这个别名了,直接删除该文件,然后重启服务即可
同理:
使用命令的方式增加或者删除路由记录,都是临时的,如果重启network服务,那么操作就失效了。
想要永久生效可以编辑配置文件/etc/sysconfig/network-scripts/route-eth*
#永久添加路由
[root@localhost ~]#vim /etc/sysconfig/network-scipts/route-ens33
10.0.0.0/24 via 172.16.12.10
[root@localhost ~]#systemctl restart network
[root@localhost ~]#route -n
网络维护命令
ssh命令:
netstat命令:
dhclient命令:
ifconfig 命令:
ping 命令:
iptables命令:
===============================================================================
ssh命令:
ssh命令的功能是安全地远程连接服务器主机系统,作为OpenSSH套件中的客户端连接工具,
ssh命令可以让我们轻松地基于SSH加密协议进行远程主机访问,从而实现对远程服务器的管理工作。
rhel9 默认已经安装openssh-server软件包, systemctl status sshd 查看状态。
前提:
1、网络要畅通
2、服务器上要的ssh服务要启动
语法格式:ssh 参数 域名或IP地址
常用参数:
-1 使用SSH协议版本1 -i 设置密钥文件
-2 使用SSH协议版本2 -l 设置登录用户名
-4 基于IPv4网络协议 -N 不执行远程指令
-6 基于IPv6网络协议 -o 设置配置参数选项
-a 关闭认证代理连接转发功能 -p 设置远程服务器上的端口号
-A 开启认证代理连接转发功能 -q 静默执行模式
-b 设置本机对外提供服务的IP地址 -s 请求远程主机上的子系统调用
-c 设置会话的密码算法 -v 显示执行过程详细信息
-C 压缩所有数据 -V 显示版本信息
参考示例
基于SSH协议,远程访问服务器主机系统:
ssh 172.16.80.64 #用默认的root身份访问目标服务器
root@172.16.80.64's
password: #这里输入root的密码
ssh -l caoqb 172.16.80.64 #使用指定的用户身份登录远程服务器主机系统
ssh 172.16.80.64 "free -m" #登录远程服务器主机系统后执行一条命令,然后直接返回当前用户:
ssh -1 172.16.80.64 #强制使用v1版本的SSH加密协议连接远程服务器主机
也可以用xshell等可视化的工具直接通过ssh的22号端口连接访问。
netstat命令:
netstat命令来自英文词组network statistics的缩写,其功能是显示各种网络相关信息,
例如网络连接状态、路由表信息、接口状态、NAT、多播成员等。
netstat命令不仅应用于Linux系统,而且Windows XP、Windows 7、Windows 10及Windows 11均已默认支持,
并且可用参数也相同,有经验的运维人员可以直接上手。
语法格式:netstat 参数
常用参数:
-a 显示所有连接中的接口信息 -n 直接使用IP地址,而不是域名
-A 设置网络连接类型 -N 显示网络硬件外围设备的符号链接名称
-c 持续显示网络状态 -o 显示计时器数据信息
-C 显示路由配置信息 -p 显示正在使用接口的程序识别码和名称
-F 显示路由缓存信息 -r 显示路由表信息
-g 显示多重广播功能群组成员名单 -s 显示网络工作信息统计表信息
-h 显示帮助信息 -t 显示TCP传输协议的连线状态
-i 显示网络界面信息表单 -u 显示UDP传输协议的连线状态
-l 仅显示正在监听的服务状态 -V 显示版本信息
参考示例
netstat -a #显示系统网络状态中的所有连接信息:
netstat -nu #显示系统网络状态中的UDP连接信息
netstat -apu #显示系统网络状态中的UDP连接端口号使用信息:
netstat -i #显示网卡当前状态信息:
netstat -r #显示网络路由表状态信息
netstat -anp | grep ssh #找到某个服务对应的连接信息
对照学习:ss 指令
ss -a #显示所有套接字
ss -l #显示处于监听状态的套接字
ss -n #不解析服务名称,以数字形式显示
ss -p #显示使用套接字的进程
ss -t #显示TCP协议的套接字
ss -u #显示UDP协议的套接字
ss -tunl |grep 22 #参数输出(常用)
B/S 模型
C/S 模型
dhclient命令:
dhclient命令来自英文词组DHCP client的缩写,其功能是动态获取或释放IP地址。
使用dhclient命令前,需要将网卡模式设置成DHCP自动获取,
否则静态模式的网卡不会主动向服务器获取如IP地址等网卡信息。
1、redhat 默认没有安装这个命令,需要手动安装, yum install dhcp-client
2、命令在dhcp包中子模块,属于动态网络地址管理单元。
语法格式:dhclient 参数 网卡名
常用参数:
-4 基于IPv4网络协议 -r 释放IP地址
-6 基于IPv6网络协议 -s 在获取IP地址前指定DHCP服务器
-d 以前台方式运行 -v 显示执行过程详细信息
-F 设置向DHCP服务器发送的FQDN -V 设置要发送给DHCP服务器的厂商类标识符
-H 设置向DHCP服务器发送的主机名 -w 即使没有找到广播接口,也继续运行
-n 不配置任何接口 -x 停止DHCP客户端,而不释放当前租约
-p 设置DHCP客户端监听的端口号 --timeout 设置最大响应超时时间
-q 静默执行模式 --version 显示版本信息
参考用例:
dhclient ens160 #通过指定网卡发起DHCP请求,获取网卡参数
dhclient -r #释放系统中已获取的网卡参数
dhclient -s 192.168.10.10 #向指定的服务器请求获取网卡参数
dhclient -x #手动停止执行dhclient服务进程
ifconfig命令:
ifconfig命令来自英文词组network interfaces configuring的缩写,其功能是显示或设置网络设备参数信息。
在Windows系统中,与之类似的命令为ipconfig,同样的功能可以使用ifconfig去完成。 通常不建议使用
ifconfig命令配置网络设备的参数信息,因为一旦服务器重启,配置过的参数会自动失效,因此还是编写
到配置文件中更稳妥。
语法格式:ifconfig 参数 网卡名 动作
常用参数:
-a 显示所有网卡状态 -v 显示执行过程详细信息
-s 显示简短状态列表
常用动作:
add 设置网络设备的IP地址 down 关闭指定的网络设备
del 删除网络设备的IP地址 up 启动指定的网络设备
参考示例:
ifocnfig #显示系统网卡存活状态信息
ifconfig -a #显示系统的网络设备信息,包括down状态
ifconfig ens160 down
ifconfig ens160 up #对指定的网卡设备依次进行关闭和启动操作
ifconfig ens160 192.168.10.20 netmask 255.255.255.0 #对指定的网卡设备执行IP地址修改操作
ifconfig ens160 hw ether 00:aa:bb:cc:dd:ee #对指定的网卡设备执行MAC地址修改操作
ifconfig ens160 -arp
ifconfig ens160 arp #对指定的网卡设备依次进行ARP协议关闭和开启操作
arp:地址解析协议,即ARP(Address Resolution Protocol),
是根据IP地址获取物理地址的一个TCP/IP协议。
ifconfig ens160 192.168.42.129/24 up
ens160 就是实际网卡名称
192.168.42.129 你要配置的ip地址
24 配置给ip地址的子网掩码24就是24个1, 11111111 11111111 11111111 0000000
up 配置ip和mask后启动改网卡
ifconfig ens160 down 网卡停用
ifconfig ens160 192.168.42.129/24 网卡重新配置
ifconfig ens160 up 网卡启动
ifconfig ens160 0.0.0.0 up 网卡地址没有配置
对照学习:ip addr
ping命令:
ping命令的功能是测试主机间网络的连通性,它发送出基于ICMP传输协议的数据包,
要求对方主机予以回复。若对方主机的网络功能没有问题且防火墙放行流量,则就会回复该信息,
我们也就可得知对方主机系统在线并运行正常了。 不过值得注意的是,ping命令在Linux下与在Windows
下有一定差异,Windows系统下的ping命令会发送出去4个请求后自动结束该命令;而Linux系统则不会
自动终止,需要用户手动按下Ctrl+C组合键才能结束,或是发起命令时加入-c参数限定发送数据包的个数。
语法格式:ping 参数 域名或IP地址
常用参数:
-4 基于IPv4网络协议 -I 使用指定的网络接口送出数据包
-6 基于IPv6网络协议 -n 仅输出数值
-a 发送数据时发出鸣响声 -p 设置填满数据包的范本样式
-b 允许ping一个广播地址 -q 静默执行模式
-c 设置发送数据包的次数 -R 记录路由过程信息
参考示例:
ping www.baidu.com #测试与指定域名之间的网络连通性(需手动按下Ctrl+C组合键结束命令)
ping -c 4 172.16.80.64 #测试与指定主机之间的网络连通性,发送请求包限定为4个
ping -c 4 www.baidu.com #测试与指定域名之间的网络连通性,发送请求包限定为4个
ping -c 3 -i 0.2 -W 3 192.168.10.10
#测试与指定主机之间的网络连通性,发送3个请求包,每次间隔0.2s,最长等待时间为3s
互联网出故障的解决流程:
1、ping 自己的网卡 ,确认网卡工作正常。 ping 192.168.42.128 《=== ifconfig == ens160的ip
2、ping 自己的网关, 确认下一跳工作正常。ping 192.168.42.2 《==nmcli d show ens160 == gateway
3、ping dns服务器,确认互联网能工作组成。ping 114.114.114.114 国内域名解析服务器
/etc/resolv.conf ping 8.8.8.8 国外域名解析服务器
ping 61.134.1.4 陕西省的域名解析服务器
4、ping 公共网站,比如 www.xxx.com ping www.sina.com 测试与外网服务器的联通
添加网关(路由)指令:
route add default gw 192.168.42.1
route del deault gw 192.168.42.1
ip route add default via 192.168.0.254 dev eth0
ip route del default via 192.168.0.254 dev eth0
iptables命令:
iptables是一个防火墙策略管理工具的命令,同时也是一个基于内核级别的防火墙服务,
用户可以基于它来对数据包进行过滤操作,拒绝掉危险的外部请求流量,保护内网的安全。
iptables命令默认仅支持ipv4协议,如需ipv6协议支持需使用ip6tables命令。
语法格式:iptables [参数] [对象]
常用参数:
-A 向规则链中追加条目 -c 初始化包计数器和字节计数器
-D 从规则链中删除条目 -E 重命名指定的用户自定链
-F 清除规则链中的现有条目 -t 设置要管理的表
-h 显示帮助信息 -i 设置数据包进入本机的网络接口
-j 设置要跳转的目标 -I 向规则链中插入条目
-L 显示规则链中的已有条目 -N 创建新的用户自定义规则链
-o 设置数据包离开本机所使用的网络接口 -p 设置要匹配数据包的协议类型
-P 设置规则链中的默认目标策略 -R 替换规则链中的指定条目
-s 设置要匹配数据包的源IP地址 -v 显示执行过程详细信息
-X 删除指定的用户自定链 -Z 清空规则链中的包计数器和字节计数器
参考示例:
iptables -L #显示当前防火墙策略中全部的过滤表信息:
iptables -L -t nat #显示当前防火墙策略中指定的NAT表信息
iptables -I INPUT -s 192.168.10.10 -j DROP #禁止指定的远程主机访问本地全部的服务,通通禁止
iptables -I INPUT -s 192.168.10.10 -p tcp --dport 22 -j DROP
#禁止指定的远程主机访问本地的某个端口,其余允许
iptables -L --line-number #带行号显示规则
iptables -D INPUT 2 #根据行号删除规则
iptables -F 清理后全部放开同行
系统维护命令
进程管理命令
ps 命令
pstree命令
top 命令
kill 命令
===============================================================================
ps命令:
ps命令来自英文单词process的缩写,中文译为“进程”,其功能是显示当前系统的进程状态。
使用ps命令可以查看到进程的所有信息,例如进程的号码、发起者、系统资源、使用占比、
运行状态等。ps命令可帮助我们及时发现哪些进程出现“僵死”或“不可中断”等异常情况。
ps命令经常会与kill命令搭配使用,以中断和删除不必要的服务进程,避免服务器的资源浪费。
语法格式:ps 参数
常用参数:
-a 显示所有进程信息 -t 显示属于指定终端主机的程序状态
-c 不显示程序路径 -T 显示当前终端主机下的所有程序
-d 不显示阶段作业程序 -u 使用用户为主的格式来显示程序状态
-e 显示环境变量信息 -U 显示属于指定用户的程序状态
-f 用ASCII字符显示树状结构 -v 使用虚拟内存的格式显示程序状态
-g 显示所有程序及其所属组的程序 -w 使用宽阔的格式显示程序状态
参考示例:
ps aux #显示系统中全部的进程信息,含详细信息 CPU,MEM占用率
ps -ef #显示系统中全部的进程信息,含详细信息 PID,PPID
ps -ef | grep ssh #结合管道操作符,将当前系统运行状态中指定的进程信息过滤出来
ps -u root #将当前系统运行状态中指定用户的进程信息过滤出来
ps aux | sort -rnk 3 #结合管道操作符与sort命令,依据处理器使用量(第三列)情况降序排序
ps -aux --sort -pcpu | less #通过cpu和内存使用来查看占用资源的进程
ps -aux --sort -pcpu,+pmem | head -n 10
#根据 CPU 使用来升序、内存使用 来升序 排序 并通过管道显示前10个结果
man ps
pstree命令:
pstree命令来自英文词组“display a tree of processes”的缩写,
其功能是用于以树状图形式显示进程信息,
帮助管理员更好地了解进程间的关系。Linux系统中常用ps命令查看进程状态信息,
但是却无法了解进程之间的依赖关系,哪个是父进程,哪个是子进程?
这些信息则可通过pstree命令进行查看。
语法格式: pstree [参数]
常用参数:
-a 显示完整信息 -A 使用ASCII字符绘制树
-c 不使用精简标示法 -g 显示进程组ID
-G 使用VT100终端机的列绘图字符 -h 特别标明现在执行的程序
-I 使用长格式显示树状图 -n 依据PID排序上下级进程
参考示例:
pstree #以树状图的形式显示当前系统中全部进程(默认)
pstree -p #以树状图的形式显示当前系统中全部进程(带有进程号)
pstree -a #以更完整、更丰富的信息样式显示每个进程:
top命令:
top 是一个在 Linux 和其他类 Unix 系统上常用的实时系统监控工具。
它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。
语法格式:
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
参数说明:
-d <秒数>:指定 top 命令的刷新时间间隔,单位为秒。
-n <次数>:指定 top 命令运行的次数后自动退出。
-p <进程ID>:仅显示指定进程ID的信息。
-u <用户名>:仅显示指定用户名的进程信息。
-H:在进程信息中显示线程详细信息。
-i:不显示闲置(idle)或无用的进程。
-b:以批处理(batch)模式运行,直接将结果输出到文件。
-c:显示完整的命令行而不截断。
-S:累计显示进程的 CPU 使用时间
参考示例:
top #显示进程信息
top -c #显示完整命令
top -d 3 #设置信息更新时间为3秒
top -p 139 #显示进程号为139的进程信息,CPU、内存占用率等
补充:
在top命令下 按以下大写字母,分别按不同的维度进行排序
M 根据内存使用情况排序
P 根据CPU使用情况排序
N 根据进程ID排序
T 根据进程使用CPU的时间排序
当然你也可以在命令启动时,直接对top加参数。比如以cpu使用情况排序
top -o %CPU
kill 命令:
kill命令的功能是杀死(结束)进程。Linux系统中如需结束某个进程,
既可以使用如service或systemctl这样的管理命令来结束服务,
也可以使用kill命令直接结束进程信息。
如使用kill命令后进程并没有结束,则可以使用信号9进行强制杀死动作。
语法格式:kill 参数 进程号
常用参数:
-a 不限制命令名与进程号的对应关系 -p 不发送任何信号
-l 显示系统支持的信号列表 -s 设置向进程发送的信号
参考示例
kill 518 #结束某个指定的进程(数字为对应的PID值)
kill -9 518 #强制结束某个指定的进程(数字为对应的PID值):
kill -l #列出系统支持的全部信号列表
扩展:killall 命令
该命令非常强大,它通过支持进程名而不是PID来结束进程。Killall命令也支持通配符。
使用时候要小心,有可能结束的重要的系统进程,也可以批量结束进程。
killall mysql*
killall mysqld
系统管理命令
find命令
whereis命令
which命令
uname命令
history命令
重定向符号 > >> < <<
管道符号 |
关机重启
===============================================================================
find命令:
find命令的功能是根据给定的路径和条件查找相关文件或目录,其参数灵活方便,且支持正则表达式,
结合管道符后能够实现更加复杂的功能,是Linux系统运维人员必须掌握的命令之一。
find命令通常进行的是从根目录(/)开始的全盘搜索,
有别于whereis、which、locate等有条件或部分 文件的搜索。
对于服务器负载较高的情况,建议不要在高峰时期用find命令的模糊搜索,这会消耗较多的系统资源。
语法格式:find 路径 条件 文件名
常用参数:
-name 匹配文件名 -nouser 匹配无所属主的文件
-perm 匹配文件权限 -nogroup 匹配无所属组的文件
-user 匹配文件所属主 -newer 匹配比指定文件更新的文件
-group 匹配文件所属组 -type 匹配文件类型
-mtime 匹配最后修改文件内容时间 -size 匹配文件大小
操作示例:
find / -name sshd.conf #全盘搜索系统中所有以.conf结尾的文件
find / -name *conf | grep ssh #全盘搜索并从结果中展示有关ssh相关的内容
find /etc -size +1M #在/etc目录中搜索所有大于1MB的文件
find /home -user caoqb #在/home目录中搜索所有属于指定用户的文件:
find . #列出当前工作目录中的所有文件、目录以及子文件信息
find /var/log -name "*.log" #在/var/log目录下搜索所有指定后缀的文件
find . -mtime -7 #搜索当前工作目录中所有近7天被修改过的文件
+7 超过7天 被修改的文件
-7 最近7天 被修改的文件
7 恰好在第7天被修改的文件
find / -type d -perm 1777 #全盘搜索系统中所有类型为目录,且权限为1777的目录文件
find / -type f -perm /a=x #全盘搜索系统中所有类型为普通文件,且可以执行的文件信息
find / -name "*.mp4" -exec rm -rf {} \;
#全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件:
whereis命令:
whereis命令来自英文词组“Where is”的拼写,其功能是用于显示命令及相关文件的路径位置信息,
能够找到命令(二进制程序)、命令源代码、man帮助手册等相关的文件路径位置信息,帮助我们
更好地管理这些文件。 有别于find命令进行的全盘搜索,whereis命令查找速度非常快,因为它不是
在磁盘中乱找,而是在指定数据库中查询,该数据库是Linux系统自动创建的,包含有本地所有文件
的信息,每天自动更新一次。但正因为这样,whereis命令的搜索结果会不及时,比如刚添加的文件
可能搜不到,原因就是该数据库文件没有被更新,管理人员则手动执行updatedb命令进行更新即可。
语法格式:whereis [参数] 命令名
常用参数:
-b 查找二进制程序或命令文件 -m 查找man帮助手册文件
-s 仅查找源代码文件 -u 查找可执行文件、源代码及帮助文档
参考示例:
whereis poweroff #查找指定命令程序及相关文件所在位置:
whereis -b poweroff #仅查找指定命令程序文件所在位置
whereis -m poweroff #仅查找指定命令的帮助文件所在位置
which命令:
which命令的功能是用于查找命令文件,能够快速搜索二进制程序所对应的位置。
如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),
仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。
语法格式:which [参数] 文件名
常用参数:
-a 显示PATH变量中所有匹配的可执行文件 -n 设置文件名长度(不含路径)
-p 设置文件名长度(含路径) -V 显示版本信息
-w 设置输出时栏位的宽度
参考示例:
which reboot #查找某个指定命令文件所在位置
which shutdown poweroff #查找多个指定命令文件所在位置
uname命令:
Linux uname(英文全拼:unix name)命令用于显示操作系统信息,
例如内核版本、主机名、处理器类型等。。
uname 可显示电脑以及操作系统的相关信息
语法: uname [-amnrsv][--help][--version]
参数说明:
-a 或--all 显示全部的信息,包括内核名称、主机名、操作系统版本、处理器类型等。
-m 或--machine 显示处理器类型。
-n 或--nodename 显示主机名。
-r 或--release 显示内核版本号。
-s 或--sysname 显示操作系统名称。
-v 显示操作系统的版本。
--help 显示帮助。
操作示例:
uname -a #显示系统信息:
uname -m #显示计算机类型:
uname -n #显示计算机名:
uname -r #显示操作系统发行编号:
uname -s #显示操作系统名称:
注意区别:发行版版本号
cat /etc/redhat-release 或者 cat /etc/issue
Red Hat Enterprise Linux release 9.3 (Plow)
history命令:
history命令的功能是显示与管理历史命令记录。Linux系统默认会记录用户执行过的有命令,
可以使用history命令查阅它们,也可以对其记录进行修改和删除操作。
语法格式: history 参数
常用参数:
-a 保存命令记录 -r 读取命令记录到缓冲区
-c 清空命令记录 -s 添加命令记录到缓冲区
-d 删除指定序号的命令记录 -w 将缓冲区信息写入历史文件
-n 读取命令记录
操作示例:
history #显示执行过的全部命令记录
history 5 #显示最近执行过的5条命令
history -w #将本次缓存区信息写入历史文件(~/.bash_history)
history -c #清空本次缓冲区及历史文件中的信息
history -r #将历史文件中的信息读入当前缓冲区:
重定向符号 > >> < <<
“>”、“>>” 称为输出重定向操作符,一般属于写操作
“<”、 “<<” 称为输入重定向操作符,一般属于读操作
1、输出重定向(覆盖): date > date.txt
2、输出重定向(追加): date >> date.txt
3、错误输出重定向: ls /home/ /aaaaa > list.txt #把正常输出信息存储到list.txt文件
4、重定向到空设备: ls /home/ /aaaaaaaaa 2>error.txt #把异常输出信息存储到list2.txt
ls /home/ /aaaaaaaaa 2>/dev/null #空设备,即将产生的输出丢掉
0 ===>stdin ===>标准输入设备 ==》键盘
1 ===>stdout ==>标准输出设备 ==》显示器
2 ===>stderr ==>标准错误输出 ==》显示器
5、输入重定向:grep 'root' < /etc/passwd #将/etc/passwd文件内容中包含root的行高亮显示
wc -l < /etc/passwd #将/etc/passwd文件中的数据行书统计并打印输出
6、输入重定向结束符:
cat << 0
>c.biancheng.net
>Linux
>0
c.biancheng.net
Linux
可以看到,当指定了 0 作为分界符之后,只要不输入 0,就可以一直输入数据。
课堂练习题:
1、获取一个文件的前/后 10 行内容并写入新文件
head -10 anaconda-ks.cfg > a10.txt
2、将ping 的结果信息存储指定文件
ping -c 5 www.baidu.com > ping.txt
3、将sshd 的服务器运行情况存储到指定文件
systemctl status sshd > ssh.log
管道符号 |
"|" ,竖线 作用:管道是一种通信机制,通常用于进程间的通信。
它表现出来的形式将
| 前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin) 。
例1:
# ls / | grep y
解析:
| :管道符号,作用=>把ls /的正确的执行结果作为参数传递给grep命令
ls / :管道左边的命令
grep y :管道右边的命令
例2:检索系统中的已安装文件,只筛选mariadb软件信息
# rpm -qa | grep ssh
-q :query,查询
-a :all,所有
将rpm -qa 的所有结果内容通过管道送给grep来过滤查看包含ssh单词的行
例3:
统计/根目录下一共有多少个文件
# ls / | wc -l
例4:
统计当前计算机中一共有多少个用户个信息(一个用户一行)
# cat /etc/passwd | wc -l
关机重启命令:
重启命令:
1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)
如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
关机命令:
1、halt 立刻关机
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机
如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启
磁盘管理命令
lsblk (英文全称:list block devices) :其功能是查看系统的磁盘使用情况
df (英文全称:disk free):列出文件系统的整体磁盘使用量
du (英文全称:disk used):检查磁盘空间使用量
fdisk:用于磁盘分区
mkfs: 创建并构建一个文件系统
mount: 挂载分区
=============================================================
lsblk
lsblk命令来自英文词组list block devices的缩写,其功能是查看系统的磁盘使用情况。
语法格式:lsblk 参数
常用参数:
-a 显示所有设备信息 -m 显示权限信息
-b 显示以字节为单位的设备大小 -n 不显示标题
-e 排除指定设备 -o 输出列信息
参考示例:
lsblk #查看磁盘信息
#添加一个 20G 的 Sata 类型的磁盘一个 30G 的 NVME 类型的磁盘。
#注意:要添加磁盘,我们先关闭虚拟机。添加好上面的两个磁盘后,然后再查看磁盘信息:
# sda:表示第一块 Sata 硬盘,如果是第二块则名称为 sdb,第三块为 sdc,依次类推
sr0:表示第一块光盘,如果是 sr1 则表示第二块光盘
nvme0n1:表示第一块 nvme 类型的硬盘,nvme0n2 表示第二块 nvme 类型的硬盘
lsblk -m #显示系统中磁盘设备的归属及权限信息:
lsblk -nl #以列表格式显示磁盘设备信息,并且不显示标题:
df
df命令参数功能:检查文件系统的磁盘空间占用情况。
可以利用该命令来获取硬盘被占用了多少空间,
目前还剩下多少空间等信息。
语法:df [-ahikHTm] [目录或文件名]
选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
参考示例:
df #将系统内所有的文件系统列出来!
df -h #将容量结果以易读的容量格式显示出来
df -aT #将系统内的所有特殊文件格式及名称都列出来
df -h /etc #将 /etc 底下的可用的磁盘容量以易读的容量格式显示
df -T #查看文件系统类型
扩展:
xfs是一个全64-bit的文件系统,可以支持上百万T字节的存储空间。对于特大文件及小尺寸文件的
支持都表现很出众,支持特大数量的目录。最大可支持的文件大小为263=9x1018=9exabytes,
最大文件系统尺寸为18exabytes。
xfs支持大文件和大分区。读写文件速度快。其中的ext4和xfs文件系统的区别:xfs的使用比ext4好。
硬盘文件系统:
xfs(主流)
ext4---centos6
ext3---centos5
tmpfs --- 基于内核的虚拟内存的动态文件系统,断电易失 速度快
网络文件系统
nfs:network file system
tfs:taobao file system;淘宝内部使用的专门用来存放淘宝的图片和文件的文件系统,分布式的
gfs:google存放搜索数据存放的文件系统。分布式
hdfs:Hadoop file system
Linux中分区的查看:
scsi接口盘一般是以sd开头的。
ide接口的盘:hd开头。
虚拟云磁盘:vd开头。
du
Linux du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘
使用的空间的查看,还是和df命令有一些区别的,这里介绍 Linux du 命令。
语法:du [-ahskm] 文件或目录名称
选项与参数:
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :仅显示指定目录或文件的总大小,而不显示其子目录的大小。
-S :包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
参考示例
du #只列出当前目录下的所有文件夹容量(包括隐藏文件夹)
du -h test #方便阅读的格式显示test目录所占空间情况
du -a #将文件的容量也列出来
du -sm /* #检查根目录底下每个目录所占用的容量
du log2012.log #显示指定文件所占空间
df与du的区别:
fdisk
fdisk 是 Linux 的磁盘分区表操作工具。
语法: fdisk [-l] 装置名称
选项与参数:
-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时,
则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
-b 指定每个硬盘分区的大小,可用数值为512, 1024, 2048 or 4096
-c 兼容模式:'dos'或'nondos'(默认)
-h 显示帮助信息
-u 搭配”-l”参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址
-v 显示版本信息
-s 将指定的分区大小输出到标准输出上,以块(block)为单位
-C [cyls]:指定硬盘的柱面数(number of cylinders);
参考示例:
fdisk -lu #列出所有分区信息
fdisk /dev/sda #找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息
一般常规选项:
* d 删除一个分区
* g 将分区格式转化为GPT
* o 将分区格式转化为[DOS|MBR]
* n 添加一个分区
* p 打印分区表信息
* w 保存并退出
* q 退出
比如:
1.运行以下命令对数据盘进行分区。
fdisk -lu
我们看到有一个/dev/sda的设备信息如下:
接下来,我们给这个设备进行分区:
fdisk -u /dev/sda
2.输入p查看数据盘的分区情况。
本示例中,数据盘没有分区。
3.输入n创建一个新分区。
4.输入p选择分区类型为主分区。
说明 创建一个单分区数据盘可以只创建主分区。如果要创建四个以上分区,
您应该至少选择一次e(extended),创建至少一个扩展分区。
5.输入分区编号,按回车键。
本示例中,仅创建一个分区,直接按回车键,采用默认值1。
6.输入第一个可用的扇区编号,按回车键。
本示例中,直接按回车键,采用默认值2048。
7.输入最后一个扇区编号,按回车键。
本示例中,仅创建一个分区,直接按回车键,采用默认值。
8.输入p查看该数据盘的规划分区情况。
9.输入w开始分区,并在完成分区后退出。
执行 fdisk -l /dev/sda命令后发现这个分区已经建好
注意:
在Linux中,扩展分区不能直接格式化,必须先将扩展分区转换为一个逻辑分区,
然后才能对逻辑分区进行格式化。
如果要将扩展分区转换为逻辑分区,只要再次创建分区选择逻辑分区即可。
mkfs
mkfs 磁盘格式化
磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,
使用 mkfs(make filesystem) 命令。
语法:mkfs [-t 文件系统格式] 装置文件名
选项与参数:
-t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)
参考示例:
mkfs -t ext3 /dev/hdc6
#将分区 /dev/hdc6(可指定你自己的分区) 格式化为 ext3 文件系统:
我们继续以上分区后的操作:
然后开始格式化系统,使用mkfs:
mkfs -t ext4 /dev/sda1
file -s /dev/sda1 查看分区后的文件系统类型
扩展:
mkfs.ext4 -c /dev/sdb #检查指定的磁盘设备并进行ext4格式化操作
mkfs.xfs -f /dev/sda #强制修改文件系统类型并覆盖
mkfs.ext4 -m 5 /dev/sdb #对指定的磁盘设备进行格式化操作,保留5%容量给管理员:
mkfs.ext4 -L 'Linuxflag' -b 2048 /dev/sdb
#对磁盘设备进行格式化操作,添加卷标识,并修改块大小,e2label /dev/sda1 查看卷标
使用ls -l /dev/sda* 这个命令查询时,发现所有的分区实际上还是一个块设备:
需要将它挂载到linux文件系统的某个已存在的目录下,这个时候就需要使用mount命令
mount 命令:
Linux 的磁盘挂载使用 mount 命令,卸载使用 umount 命令。
磁盘挂载语法:
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
磁盘卸载命令
umount 语法:umount [-fn] 装置文件名或挂载点
-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
-n :不升级 /etc/mtab 情况下卸除。
操作示例:
mount /dev/sda1 /mnt/linux
上述命令将/dev/sda1挂载到了/mnt/linux这个目录下并且
/mnt/linux这个目录占用的空间是在/dev/sda1上面的。(所有写入/mnt/linux的文件就相当于写入/dev/sda1上
mount /dev/hdc6 /mnt/hdc6 #用默认的方式,将 /dev/hdc6 挂载到 /mnt/hdc6 上面
umount /dev/hdc6 #卸载/dev/hdc6
mount #查看当前系统中已有的文件系统信息
mount -a #挂载/etc/fstab文件中所有已定义的设备文件
mount -t xfs /dev/sdb /Dir #强制以XFS文件系统挂载硬盘设备到指定目录
以上mount都是临时一次性操作,如果需要永久挂载(永久mount)
方案一
这这个目录下自动挂载 系统启动文件
#这个目录下
vim /etc/fstab
#写入挂载信息
/dev/sdb1 /mnt/disk1 ext4 defaults 0 0
#一定要检查自己有没有写错
mount -a
#注意:/etc/fstab这个文件一旦写错 则服务器将无法启动,一定要谨慎使用这个操作
#第二种写法,
使用
blkid /dev/sdc1
可以查看到UUID号
/dev/sdc1: UUID="e225854f-0677-496b-8000-2a59dd8043bd" TYPE="ext4"
使用 UUID 号写入
UUID=f5cc6554-74fa-48bb-972d-5dd371496ced /boot xfs defaults 0 0
方案二 (最优)
在/etc/rc.local 文件中写入 挂载命令,加上执行权限,每次启动系统就会进行自动挂载
# 这两个目录随便修改一个 即可
vim /etc/rc.local
vim /etc/rc.d/rc.local
# 写入挂载命令
mount -t ext4 /dev/sdc1 /mnt/diskc1
# 给文件/etc/rc.d/rc.local 加上执行权限 这样每次系统在启动的时候都会执行这个文件的命令
chmod +x /etc/rc.d/rc.local
方案三
在文件/root/.bashrc 加入挂载命令
启动的时候就可以自动加载文件中的挂载命令
#手动挂载
vim /root/.bashrc
#把手动挂载写入到开机启动的文件中
mount -t ext4 /dev/sdc1 /mnt/diskc1
卸载分区挂载点(umount)
umount {挂载点}
#强行卸载
umount -l {挂载点}
练习题:
1、关掉虚拟机 并添加一块新的硬盘
2、在linux系统中对新硬盘分区操作
3、对分区的内容进行 ext4 格式化
4、使用mount指令挂载分区并创建文件
磁盘知识点
硬盘按接口分类:
IDE (Integrated Drive Electronics)接口是一种较早的硬盘接口类型,
它通常用于连接IDE接口的硬盘、光驱、DVD/CD读写器等设备。
IDE接口在台式机中广泛使用,但现在已经被SATA接口所取代。
优势在于其兼容性强,它可以支持多个设备的连接。
但是,IDE接口的传输速率较慢,通常为133Mbps,这使得其难以与更快的硬盘接口竞争。
SATA是一种早期为机械硬盘(HDD)设计的技术,又叫串口硬盘(Serial ATA),
最初的SATA接口传输速率为1.5Gbps,而SATA 2.0的传输速率为3.0Gbps,
SATA 3.0的传输速率则提高到了6.0Gbps。这种接口类型可以用于连接硬盘、
光驱、DVD/CD读写器等设备,因此广泛用于台式机和笔记本电脑中。
SATA接口的优势在于其传输速率较快,而且支持热插拔。
此外,SATA接口还具有较小的接口尺寸,这使得硬盘的安装变得更加简便。
SCSI(Small Computer System Interface)接口是一种较为专业的硬盘接口类型,
通常用于连接服务器或其他高端计算机系统。SCSI接口的传输速率可以达到320Mbps。
而且可以同时连接多个硬盘或其他外围设备,
因此非常适用于需要大量数据处理和存储的应用场景。
缺点在于其复杂性较高,需要专业知识进行配置和安装。
SAS(Serial Attached SCSI)接口是一种新型的硬盘接口类型,
它是SCSI接口的一种变体。SAS接口支持多个设备的连接,并且可以实现热插拔功能。
此外,SAS接口的传输速率可以达到6Gbps,比SATA接口更快。
SAS接口的优势在于其可靠性和性能较高。由于SAS接口支持多个设备的连接,
因此它通常用于数据中心和服务器等需要高可靠性和高性能的场合。
M.2接口:
M.2(以前称为NGFF)是一种新型的固态硬盘接口标准,旨在取代mSATA和传统的SATA接口。
M.2接口支持更高的数据传输速率和更低的功耗,同时提供了更为紧凑的设计。
M.2固态硬盘分为多种规格(如M.2 2242、M.2 2260、M.2 2280等),
以适应不同设备的空间需求。此外,M.2接口还支持NVMe协议,能够进一步提升固态硬盘
的性能表现。
硬盘本身是不具备FC接口的, 插硬盘的机柜上带有FC接口, 通过光纤与光纤交换机互联.
IDE/SATA 主要应用在PC和笔记本电脑
SCSI/SAS 主要应用于服务器
NVMe是一种专为SSD设计的新技术,通俗理解就是 固态硬盘
它利用PCIe总线直接与CPU通信,从而实现更高的速度、更低的延迟和更多的并行性。
============================================================================
分区格式
MBR(Master Boot Record,主引导分区),
支持 4 个主分区或者 3 个主分区 1 个扩展分区,分区的空间最大支持 2.2 TB。
硬盘的第一个扇区也就是第0扇区是用来存放主引导记录(MBR)的,
因此也称MBR扇区。一个扇区是512字节,因此MBR的大小也是512字节,
其具体数据结构是:446个字节的引导代码、64个字节的分区表及2个字节的签名值"55AA"。
每个分区信息需要16个字节,由于MBR的分区表只有64个字节,
这决定了它只能存储4个分区记录。这就是为什么一块硬盘最多只能有4个“主分区"的原因。
GPT(GUID Partition Table,全局唯一标识分区表),
最多可支持 128 个分区,且大小支持 2.2TB 到 18 EB,并向后兼容 MBR。
它是EFI(可扩展固件接口标准)的一部分,用来替代BIOS中的主引导记录分区表。
但因为MBR分区表不支持容量大于2.2TB(2.2 × 1012字节)的分区,
所以也有一些BIOS系统为了支持大容量硬盘而用GPT分区表取代MBR分区表。
EFI
可扩展固件接口(英文名Extensible Firmware Interface 或EFI)
是一种个人电脑系统规格,用来定义操作系统与系统韧体之间的软件界面,
为替代BIOS的升级方案。可扩展固件接口负责加电自检(POST)、
连系操作系统以及提供连接操作系统与硬件的接口。
EFI最初由英特尔开发,现时由UEFI论坛来推广与发展。
硬盘分区有三种,
主磁盘分区、扩展磁盘分区、逻辑分区。
一个硬盘可以有一个主分区,一个扩展分区,
也可以只有一个主分区没有扩展分区。逻辑分区可以若干。
主分区是硬盘的启动分区,他是独立的,也是硬盘的第一个分区,正常分的话就是C驱。
主分区也可成为“引导分区”,会被操作系统和主板认定为这个硬盘的第一个分区。
所以C盘永远都是排在所有磁盘分区的第一的位置上。
扩展分区:分出主分区后,其余的部分可以分成扩展分区,
一般是剩下的部分全部分成扩展分区,也可以不全分,那剩的部分就浪费了。
扩展分区是不能直接用的,他是以逻辑分区的方式来使用的,所以说扩展分区可分成若干逻辑分区。
他们的关系是包含的关系,所有的逻辑分区都是扩展分区的一部分。
扩展分区的容量=各个逻辑分区的容量之和。
扩展分区内最多建立23个逻辑分区,其中的每个分区都单独分配一个盘符,
可以被计算机作为独立的 物理设备使用。逻辑分区的信息都被保存在扩展分区内,
而主分区和扩展分区的信息被保存在硬盘的MBR内。
这也就是说无论 硬盘有多少个分区,其主启动记录中只包含主分区(也就是启动分区)
和扩展分区两个分区的信息。
逻辑分区:扩展分区如果不再进行分区了,那么扩展分区就是逻辑分区了。
如果还需要进行分区操作的话,则所谓的逻辑分区只能从扩展分区上操作。
就相当于在仆人中(扩展分区上)进行细分类,
分成接电话的(D盘)、扫地的(E盘)、做饭的(F盘)等等。
硬盘的容量=主分区的容量+扩展分区的容量(硬盘=C盘+X)
扩展分区的容量=各个逻辑分区的容量之和(X=D盘+E盘+F盘)
在使用磁盘之前,我们需要对磁盘进行分区然后格式化
格式化是针对主分区和逻辑分区的。
要格式化是因为这和操作系统管理文件系统有关系。
没有格式化的分区就像一张白纸,要写入数据,必须对白纸打上“格子”,
每个格子里面写一块。而操作系统只认这些格子。
=====================================================================
1、首先我们对 Sata 磁盘进行MBR分区,分为 3 主分区,1 个扩展分区,1 个逻辑分区。
fdisk /dev/sda
2、我们对磁盘一个 30G 的 NVME 类型的磁盘做 GPT 格式分区。
fdisk /dev/nvme0n2 # 对 nvme0n2 硬盘进行分区
3、分区格式化
对磁盘进行格式化的目的:是为了形成文件系统,
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构。
对于不同的操作系统,对磁盘进行格式化后所体现的文件系统类型不一样:
windowns:fat(这种格式不支持大于 4G 的文件)、NTFS(这是从 window7的默认格式)
linux: ext系统格式(ext3、ext4)、xfs
我们把 /dev/sda1 格式化为 ext4,把另外两个格式化为 xfs。
4、分区挂载
挂载就是将一个分区或者设备挂载到指定的挂载目录。简单来说就是使用这个分区。
我们把 /dev/sda1 挂载到 /guazai 目录。注意挂载的目录必须存在。
============================================================================
逻辑卷管理
逻辑卷由以下几个部分组成:
物理设备,一般指的是系统存储设备,如:/dev/sda1、/dev/sda2等
物理卷(physical volume, PV),它是由多个分区或整个硬盘组成
卷组 (Volume Group VG), 它可以看成单独的逻辑磁盘,一个卷组中至少包括一个 PV,
在卷组创建好后,可以动态添加 PV 到卷组中。
逻辑卷(Logical Volume LV),相当于物理分区,它是建立在卷组之上。
1、# 创建物理卷的命令为 `pvcreate 要创建物理卷的设备或分区`
2、# 查看 pv
# 如果希望查看详细的物理卷信息,我们使用 pvdisplay
3、 卷组管理(VG)
# 卷组创建的命令是:`vgcreage 物理卷名称`
4、逻辑卷管理(LV)
# 逻辑卷的创建命令为:lvcreate -n 逻辑卷名称 -L 逻辑卷大小 卷组名称
5、查看逻辑卷 lvs
如果希望查看 lvtest 的详细信息
6、格式化逻辑卷
# 我们将 /dev/vgtest/lvtest 逻辑卷格式化为 xfs 类型的文件系统
7、挂载逻辑卷
# 我们将格式化好的 /dev/vgtest/lvtest 逻辑卷挂载到 /mnt/mount1 目录上
8、删除逻辑卷,卷组和物理卷
# 查看
[root@bogon /]# df -h
# 卸载
[root@bogon /]# umount /dev/mapper/vgtest-lvtest
# 验证是否卸载成功
[root@bogon /]# df -h
# 删除逻辑卷,命令的格式为:lvremove 逻辑卷路径
[root@bogon /]# lvremove /dev/vgtest/lvtest
# 删除卷组,命令的格式为:vgremove 卷组名称
[root@bogon /]# vgremove vgtest
# 删除物理卷
[root@bogon /]# pvremove /dev/sdb
交换分区管理也有相应的命令:
mkswap 分区设备名: 将指定的分区格式化为 swap 交换文件系统(交换分区)
swapon 交换分区设备名: 启用指定的交换分区
swapoff 交换分区设备名: 禁用指定的交换分区
swapon -s: 查看交换分区的使用情况
free -m: 以兆字节为单位显示物理内存、交换分区的使用情况
用户管理命令
用户
useradd 用户增加命令
usermod 用户修改命令
passwd 密码修改命令
userdel 用户删除命令
su 用户提权命令
==========================================================================
useradd 命令:
useradd命令的功能是创建并设置用户信息。使用useradd命令可以自动完成用户信息、基本组、
家目录等的创建工作,并在创建过程中对用户初始信息进行定制。
语法格式:useradd 参数 用户名
常用参数:
-c 添加备注文字 -M 不建立用户家目录
-d 设置新用户登录时所使用的家目录 -n 不建立以用户名称为名的组
-D 设置新用户的预设值 -o 允许创建重复UID的用户
-e 设置用户的终止日期 -p 设置用户的密码
-f 设置用户过期几日后永久停权 -r 建立系统用户
-g 设置用户对应的基本用户组 -R 设置根目录
-G 设置用户对应的扩展用户组 -s 设置新用户的默认Shell终端
-h 显示帮助信息 -u 设置用户ID
参考示例:
useradd test1 #创建指定的用户信息
useradd -M -s /sbin/nologin test2 #创建指定的用户信息,但不创建家目录,亦不让登录系统
useradd -u 6688 test3 #创建指定的用户信息,并自定义UID值
useradd -G root test4 #创建指定的用户信息,并追加指定组为该用户的扩展组
useradd -e "2025/01/01" test5 #创建指定的用户信息,并指定过期时间
注意:正在创建信箱文件: 文件已存在
文件已存在,无法创建,这是为什么?
因为在创建用户时会默认生成用户的家目录,密码文件,用户组(不指定用户组的情况下),
以及邮箱文件,而使用userdel命令删除时仅仅是删除了这个用户,
而这个用户的文件还在,那么就需要完全删除这些文件。大概有四个地方需要处理。
在/home目录下的文件
在/etc/passwd下的用户
在/etc/group下的用户组
在/var/spool/mail下的邮箱文件
passwd 命令:
passwd命令来自英文单词password的缩写,其功能是修改用户的密码值;
同时也可以对用户进行锁定等操作,但需要管理员身份才可以执行。
当使用 useradd 命令来添加用户后,默认该用户还不能登录,因为没有为该用户设置密码。
只有设置了密码后,才可以登录。而设置密码的命令是 passwd,
常用格式:passwd 参数 用户名
常用参数:
-d 清除已有密码 -S 显示当前密码状态
-e 下次登录时强制修改密码 -u 解锁用户的密码值,允许修改
-f 强制执行操作而不询问 -w 设置密码到期前几天收到警告信息
-k 设置用户在期满后能仍能正常使用 -x 设置最大密码有效期
-l 锁定用户的密码值,不允许修改 --help 显示帮助信息
参考示例:
passwd #修改当前登录用户的密码值,注意输入过程中密码不可见。
passwd test1 #修改指定用户的密码值
passwd -l test1 #锁定指定用户的密码值,不允许其进行修改:
passwd -u test1 #解锁指定用户的密码值,允许其进行修改
passwd -e test2 #强制指定的用户在下次登录时必须重置其密码
passwd -d test2 #删除指定用户的密码值
passwd -S test3 #查看指定用户的密码状态
扩展:重置root密码方法:
1、首先重新启动系统,然后快速按下 e 键进入GRUB界面.
2、然后再最后一行之前输入 rd.break ,如图:
3、输入好后,按 ctrl + x 来重启系统。
重启启动后,按任意键继续,然后在第一个命令提示符下输入
mount -o remount,rw /sysroot #重新挂载文件系统
输入好后回车,再输入
mount | grep sysroot
然后回车。如下图所示
然后在命令提示符下输入如下命令:
chroot /sysroot/ #改变系统目录为临时目录
echo 123 | passwd --stdin root #修改root密码为123
touch /.autorelabel #重新标记SElinux环境值文件
然后再后面的命令提示符下输入两次 exit 来退出。
然后系统会自动重新启动。启动好后输入 root 和 123 后就可以登录了。
Linux救援模式 ===》单用户模式
usermod 命令:
usermod命令来自英文词组user modify的缩写,其功能是修改用户信息中的各项参数。
在创建用户后如果发现信息错误,可以不用删除,而是用usermod命令直接修改用户信息,
并且参数会立即生效。
语法格式:usermod 参数 用户名
常用参数:
-a 将用户添加至扩展组中 -L 锁定用户密码,使密码立即失效
-c 修改用户的备注文字 -m 将用户家目录内容移动到新位置
-d 修改用户登录时的家目录 -o 允许重复的用户ID
-e 修改用户的有效期限 -p 设置用户的新密码
-f 设置在密码过期多少天后关闭该用户 -s 修改用户登录后使用的Shell终端
-g 修改用户所属的基本群 -u 修改用户的ID
参考示例:
useradd testA ⇒ /home/testA 错误的
mkdir /home/testA 正确的
usermod -d /home/testA test1 #修改指定用户的家目录路径,注意:不能有用户正在使用该账号
usermod -u 6690 test1 #修改指定用户的ID
usermod -l newname test1 #修改指定用户的名称为newname
usermod -L test1 #锁定指定的用户,临时不允许登录系统
usermod -U test1 #解锁指定的用户,再次允许登录系统
usedel 命令:
userdel命令来自英文词组user delete的缩写,其功能是删除用户信息。
在Linux系统中,一切都是文件,用户信息被保存到了/etc/passwd、
/etc/shadow以及/etc/group文件中,
因此使用userdel命令实际上就是删除指定用户在上述3个文件中的对应信息。
语法格式:userdel 参数 用户名
常用参数:
-f 强制删除用户而不询问 -r 删除用户的家目录及其内全部子文件
-h 显示帮助信息 -Z 删除用户的SELinux映射用户
参考示例:
userdel test1 #删除指定的用户信息
userdel -r test2 #删除指定的用户信息及家目录,注意:删除的时候要慎重
扩展:
#将用户从该用户的附属组中删除
gpasswd -d <用户名称> <用户组名称>
su 命令:
su命令来自英文单词switch user的缩写,其功能是切换用户身份。
将管理员切换至任意用户身份时无须密码验证,而将普通用户切换至任意用户身份时均需密码验证。
另外,添加单个减号(-)参数表示完全的身份变更,不保留之前用户的任何环境变量信息。
语法格式:su 参数 用户名
常用参数:
— 完全地切换身份,会变更环境变量 -m 切换身份时,不变更环境变量
-c 执行完命令后,自动恢复原来的身份 -s 设置要执行的Shell终端
-f 不读取启动文件(适用于csh和tsch) --help 显示帮助信息
-l 切换身份时,同时变更工作目录 --version 显示版本信息
参考示例
su root #变更至指定的用户身份
su - root #完全变更至指定的用户身份
提权操作有两种方式:
1、su root #切换进入root身份,再操作
2、sudo xxxx #直接用sudo 来执行操作
有部分用户提示,
xxx 不在 sudoers 文件中。此事将被报告。
修改如下文件即可。
1、切换到root身份: su root
2、修改文件权限: chmod 777 /etc/sudoers
3、修改文件内容: vim /etc/sudoers
在root 那行添加:xxx ALL=(ALL) ALL
4、保存退出后,恢复文件权限: chmod 440 /etc/sudoers
5、返回自己的身份: exit
6、再次执行 sudo xxx 指令验证效果。
sudo 权限在 /etc/sudoers 文件中,该文件默认权限是440
练习:
1、新建一个普通用户并可以在自己家目录下创建文件
su root #到root用户身份才可以创建其他用户
useradd def #新建一个名称为def的用户
su - def #切换到目标用的家里
touch x #在目标家目录新建x文件
2、修改用户密码
su - root #切换到root身份准备修改用户密码
passwd def #修改目标用户密码
3、切换用户身份 使用当前身份在根目录创建文件失败,提示如上
su - def #切换到目标身份
sudo touch /x #尝试在根目录下创建文件,
#失败提示:def 不在 sudoers 文件中。此事将被报告。
4、修改 /etc/sudoers 文件
su - root
chmod 777 /etc/sudoers
vim /etc/sudoers
找到root开头的那一行,添加
def ALL=(ALL) ALL
保存退出
chmod 440 /etc/sudoers
5、切换用户身份,可以在根目录下用 sudo touch xxx 来创建文件
su - def #切换到目标用户
sudo touch /x #在根目录下用sudo可以创建文件
Root 重置
各个linux版本的本地root密码修改的方法,
(一)RedHat/CentOS/Fedora 系统密码破解
1.在grub选项菜单按E进入编辑模式
2.编辑kernel 那行最后加上S (或者Single)
3.按B,启动到single-user mode
4.进入后执行下列命令
# mount -t proc proc /proc
# mount -o remount,rw /
#passwd
#sync
#reboot
(二)Debian linux 系统密码破解
1.在grub选项菜单'Debian GNU/Linux,...(recovery mode)',按e进入编辑模式
2.编辑kernel那行最后面的 ro single 改成 rw single init=/bin/bash,按b执行重启
3.进入后执行下列命令
root@(none)#mount -a
root@(none)#passwd root
root@(none)#reboot
(三)Freebsd 系统密码破解
1.开机进入引导菜单
2.选择每项(按4)进入单用户模式
3.进入之后输入一列命令
root@#mount -a
root@#fsck -y
root@#passwd(修改密码命令)
root@#root(要破解密码的用户名)
Enter new unix password:
root@#init 6 (重启)
(四)Solaris 系统密码破解
1.在grub选项菜中选择solaris failasfe 项
2.系统提示Do you wish to have it mounted read-write on /a ?[y,n,?] 选择y
3.就进入单用户模式
4.输入下列命令:passwd
root@#init 6 (重启)
(五)NetBsd 系统密码破解
1.开机:当出现提示符号并开始倒数五秒时, 键入以下指令:
> boot -s (进入单用户模式命令)
2.在以下的提示符号中
Enter pathname of shell or RETURN for sh:
按下 Enter。
3.键入以下指令:
# mount -a
# fsck -y
4.使用 passwd 更改 root 的密码。
5.使用 exit 指令进入多人模式。
(六)SUSE 系统密码破解
1.重新启动机器,在出现grub引导界面后,在启动linux的选项里加上init=/bin/bash,通过给内核传递init=/bin/bash参数使得OS在运行login程序之前运行bash,出现命令行。
2.稍等片刻出现(none)#:命令行。
3.这时输入mount -n / -o remount,rw 表示将根文件系统重新mount为可读写,有了读写权限后就可以通过passwd命令修改密码了。
4.这时输入passwd命令就可以重置密码了
5.修改完成后记得用mount -n / -o remount,ro将根文件系统置为原来的状态。
用户组
groupadd 用户组添加命令
groupmod 用户组修改命令
gpasswd 用户组密码设置命令
groupdel 用户组删除命令
======================================================================
groupadd 命令:
groupadd命令的功能是创建新的用户组。每个用户在创建时都有一个与其同名的基本组,
后期可以使用groupadd命令创建出新的用户组信息,让多个用户加入指定的扩展组,
从而为后续的工作提供了良好的文档共享环境。
语法格式:groupadd 参数 用户组
常用参数:
-f 若用户组已存在,则以成功状态退出 -o 允许创建重复ID的用户组
-g 设置用户组ID -p 设置用户组密码
-h 显示帮助信息 -r 创建系统用户组
参考示例:
groupadd newgroup1 #创建一个新的用户组
groupadd -g 6688 newgroup2 #创建一个新的用户组,并指定用户组ID
groupadd -r newgroup3 #创建一个新的用户组,设定为系统工作组
#1000以内的编号是系统组,1000普通用户组
扩展:
#新建用户并将其加入指定用户组,作为其主用户组(每个用户有且只有一个主用户组)
useradd -g <用户组名称> <用户名称>
useradd -g xxx yyy # -g 是加入主要组
#或者新建用户并将其加入指定附属用户组,附属用户组可以有多个,多个附属组名称用逗号分隔即可
useradd -G <用户组名称> <用户名称>
useradd -G xxx zzz # -G 是加入附属组
1.主要群组:
每个文件都必须有一个组所有者,因此必须有个与每个用户相关的默认组,
这个默认组成为新建文件的组所有者,被称作用户的主要群组,、
用户的主要群组在passwd文件中的第四个字段中定义。
2.次要群组:
除了主要群组,用户也可以根据需要在隶属于其他群组,
这些群组被称为次要群组,在group文件中第四个字段中定义
#将已有用户添加到指定用户组
#将已有用户添加到指定用户组,作为其附属用户组
# -a 代表append,和 -G 一起使用,将用户添加到新用户组中而不必来开原有的其他用户组
usermod -a -G <已有用户组名称> <已有用户名称>
#将已有用户的主用户组改为其他新的用户组
usermod -g <新用户组名称> <旧用户组名称>
通过: id username 可以查看用户id和组id
比如:
[caoab@localhost ~]$ id caoqb
用户id=1000(caoqb) 组id=1000(caoqb) 组=1000(caoqb),10(wheel)
[test1@localhost ~]$ id test1
用户id=1004(test1) 组id=6694(mytest) 组=6694(mytest)
[root@localhost ~]# usermod -g caoqb test1
[root@localhost ~]# id test1
用户id=1004(test1) 组id=1000(caoqb) 组=1000(caoqb)
目录的t权限:
t权限一般只用在目录上,用在文档上起不到什么作用。
在一个目录上设了t权限位后,(如/home,权限为1777)任何的用户都能够在
这个目录下创建文档,但只能删除自己创建的文档(root除外),这就对任何用
户能写的目录下的用户文档 启到了保护的作用。
可以通过chmod +t filename 来设置t权限
groupmod命令
groupmod命令来自英文词组“group modify”的缩写,其功能是用于更改群组属性。
Linux系统中的群组信息一般不建议更改,因为涉及已加入用户的归属问题,
尤其是群组名称、组GID,一定要确认好后再操作。
语法格式:groupmod 参数 群组名
常用参数:
-g 设置群组识别码 -h 显示帮助信息
-n 设置群组名称 -o 允许重复使用群组识别码
-p 设置群组密码
参考示例:
groupmod -n newgroupA oldgroupB #更改指定用户组的名称(原名oldgroupB):
groupmod -g 8888 newgroupA #更改指定用户组的识别码
groupdel 命令:
groupdel命令来自英文词组“delete a group”的缩写,其功能是用于删除用户组。
Linux系统中的用户组信息被保存在/ect/group和/ect/gshadow文件中,
手动删除对应信息即可,亦可以用groupdel命令删除。
语法格式:groupdel [参数] 群组名
常用参数:
-f 强制删除而不询问 -h 显示帮助信息
参考实例
groupdel newgroup #删除指定名称的用户组:
groupdel -f newgroup #强制删除指定名称的用户组
用户配置文件
在 Linux 中,用户名、密码、用户组和用户组密码都是在保存在不同的文件配置文件中。
/etc/passwd: 用于保存用户账号文件
/etc/shadow: 用户保存用户的密码文件 ==》useradd,passwd
/etc/group: 用于保存用户组的文件
/etc/gshadow: 用于保存用户组密码的文件 ==》groupadd,gpasswd
/etc/skel: 保存用户家目录文件隐藏文件的模板文件
/etc/default/useradd:用户定义添加用户的信息文件 ==》用户配置文件
================================================================================
/etc/passwd:
passwd 是一个文本文件,用于定义系统的用户账号,由于这个文件是所有用户都对需要读取的权限,
所以文件中只定义用户的账号,而不保存用户密码。
在这个文件中,每一行记录了一个用户信息,而用户信息是以 : 英文冒号来进行分隔的 7 个部分组成,
这 7 个部分的意义说明如下:
root : x : 0 : 0 : root : /root : /bin/bash
redhat : x : 1000 : 1000 : redhat : /home/redhat :/bin/bash
1 2 3 4 5 6 7
1 用户名
2 用户登录密码的占位符,如果为 x 表示有密码,如果为空或 * 表示没有密码
3 用户的 ID,即 uid
4 用户所属组 ID,即 gid
5 用户的个人信息,包含用户的完整名称、地址、办公电话、家庭住址等个人信息
6 用户的家目录
7 用户的默认登录所能使用的 shell类型
Linux中每个用户是通过 User Id (UID)来唯一标识的
管理员:root, 0
普通用户:1-60000 自动分配
系统用户:1-499 (CentOS 6以前), 1-999 (CentOS 7以后)
对守护进程获取资源进行权限分配
登录用户:500+ (CentOS6以前), 1000+(CentOS7以后)
给用户进行交互式登录使用
/etc/shadow:
这个文件是用户保存用户密码的文件,我们可以通过如下的命令来查看这个文件:
tail -2 /etc/shadow
这个文件每一行记录了一个用户的密码信息,它们共有 9 个字段,分别表示如下:
root:$6$hS4yqJu7WQfGlk0M$Xj/SCS5z4BWSZKN0raNncu6VMuWdUVbDScMYxOgB7mX
Uj./dXJN0zADAXQUMg0CuWVRyZUu6npPLWoyv8eXPA.::0:99999:7::: ftp:*:16659
:0:99999:7::: nobody:*:16659:0:99999:7::: longshuai:$6$8LGe6Eh6$vox9.
OF3J9nD0KtOYj2hE9DjfU3iRN.v3up4PbKKGWLOy3k1Up50bbo7Xii/Uti05hlqhktAf/
dZFy2RrGp5W/:17323:0:99999:7:::
第一列:用户名。
第二列:加密后的密码。但是这一列是有玄机的,有些特殊的字符表示特殊的意义。
①.该列留空,即"::",表示该用户没有密码。
②.该列为"!",即":!:",表示该用户被锁,被锁将无法登陆,但是可能其他的登录方式是不受限制的
③.该列为"*",即":*:",也表示该用户被锁,和"!"效果是一样的。
④.该列以"!"或"!!"开头,则也表示该用户被锁。
⑤.该列为"!!",即":!!:",表示该用户从来没设置过密码。
⑥.如果格式为"$id$salt$hashed",则表示该用户密码正常。其中$id$的id表示密码的加密算法,
$1$表示使用MD5算法,$2a$表示使用Blowfish算法,"$2y$"是另一算法长度的Blowfish,
"$5$"表示SHA-256算法,而"$6$"表示SHA-512算法,可见上面的结果中都是使用sha-512算法的。
$5$和$6$这两种算法的破解难度远高于MD5。$salt$是加密时使用的salt,
$hashed才是真正的密码部分。
第三列:从1970年1月1日到上次密码修改经过的时间(天数)。通过计算现在离1970年1月1日的天数减去
这个值,结果就是上次修改密码到现在已经经过了多少天,即现在的密码已经使用了多少天。
第四列:密码最少使用期限(天数)。省略或者0表示不设置期限。
例如,刚修改完密码又想修改,可以限制多久才能再次修改
第五列:密码最大使用期限(天数)。超过了它不一定密码就失效,可能下一个字段设置了过期后的
宽限天数。设置为空时将永不过期,后面设置的提醒和警告将失效。root等一些用户的
已经默认设置为了99999,表示永不过期。如果值设置小于最短使用期限,
用户将不能修改密码。
第六列:密码过期前多少天就开始提醒用户密码将要过期。空或0将不提醒。
第七列:密码过期后宽限的天数,在宽限时间内用户无法使用原密码登录,必须改密码或者联系管理员。
设置为空表示没有强制的宽限时间,可以过期后的任意时间内修改密码。
第八列:帐号过期时间。从1970年1月1日开始计算天数。设置为空帐号将永不过期,不能设置为0。
不同于密码过期,密码过期后账户还有效,改密码后还能登录;帐号过期后帐号失效,
修改密码重设密码都无法使用该帐号。
第九列:保留字段。
/etc/group:
这个文件中存储是用户组信息,我们可以通过如下的命令来进行查看:
tail -3 /etc/group
dnsmasq:x:977:
tcpdump:x:72:
redhat:x:1000:
在这文件中每一行记录了一个组信息,使用英文冒号分隔成 4 个字段,分别代表如下:
redhat : x : 1000 :
1 2 3 4
1 表示组名称
2 表示组的密码占位符,真正的密码保存在 /etc/gshadow 文件中
3 表示组的 id 值
4 表示附加组中的用户列表,以英文逗号分隔,如果为空表示没有附加用户
/etc/gshadow:
这个文件是用于保存组的密码信息,通过如下命令来查看:
tail -3 /etc/gshadow
dnsmasq:!::
tcpdump:!::
redhat:!::
在这个文件中每一行代表一个组的密码信息,通过英文冒号分隔为 4 段,分别表示如下:
redhat : ! : :
1 2 3 4
1 组名称,与 /etc/group 文件中第一列相同
2 组密码,如果值为 ! 表示没有密码
3 组管理的用户名,很少使用
4 组中附加用户,也 /etc/group 中第 4 列相同
/etc/skel:
这个文件中记录是用户家目录下的相关隐藏文件。默认情况下,当新创建好一个用户后,
会在这个用户的家目录下新建一个隐藏文件,而这些隐藏文件就是从这个文件中拷贝过来的
ls -a /etc/skel
../
./
.mozilla/
.bash_logout
.bash_profile
.bashrc
/etc/default/useradd:
在这个文件中记录了创建用户的相关信息。
vim /etc/default/useradd
# useradd defaults file
GROUP=100 这个选项用于建立用户的默认组,它是公有组,而目录使用的是私有组,
所以它无效
HOME=/home 用于指定所创建的用户所在的家目录,它是创建普通用户的家目录
INACTIVE=-1 用于指定密码过期的宽限时间,如果值为 -1 表示不限制,
它与/etc/shadow 文件中第 7 个字段对应
EXPIRE= 用于指定密码的过期时间,它与 /etc/shadow 文件中的第 8 个字段对应,
如果值为空表示永久有效
SHELL=/bin/bash 用于指定用户登录后的操作,它与 /etc/passwd 文件中第 7 个字段对应
SKEL=/etc/skel 用于指定用户所在家目录下的隐藏文件的拷贝来源
CREATE_MAIL_SPOOL=yes 用于给新建的用户指定邮箱地址,
它与 /etc/login.defs 文件中MAIL_DIR 指向的地址相同
搭建FTP文件共享服务器
一、实验目的及要求
1、掌握vsftpd服务器的配置方法。
2、熟悉FTP客户端工具的使用。
3、掌握常见的FTP服务器的故障排除。
二、实验项目背景
某企业想构建一台FTP服务器,为企业局域网中的计算机提供文件传送任务,
为财务部门、销售部门和OA系统提供异地数据备份。
要求能够对FTP服务器设置连接限制、日志记录、消息、验证客户端身份等属性,
并能创建用户隔离的FTP站点。
三、实验的环境:
1、Window系统版本: Windows 10 或者 Window11 系统;
2、VMware软件版本: VMware® Workstation 17 Pro ;
3、Linux 系统版本: Red Hat Enterprise Linux 9.3 64 位
四、实验方法和步骤:
(1)安装ftp服务器:
离线安装:rpm -ivh vsftpd-1.1.3-8.i386.rpm
在线安装:yum install vsftpd
卸载程序:yum remove vsftpd
(2)修改配置文件,匿名账户具有访问 查看共享目录的权限
cd /etc/vsftpd #进入vsftp的配置目录
cp vsftpd.conf vsftpd.conf_bak #将原始配置文件备份
vim /etc/vsftpd/vsftpd.conf #修改配置文件
以下配置OK ,rhel9.3
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
以下是配置项的说明,不一定修改:
local_enable=NO|YES #本地登陆控制,NO表示禁止,YES表示允许
anonymous_enable=yes/no #是否允许匿名用户访问 。 yes表示允许,no表示不允许
anon_upload_enable=YES/NO #上传控制 YES表示同意,NO表示否定
anon_world_readable_only=NO/YES #下载控制,NO表示可以下载不可读文件,YES表示不能下载
anon_mkdir_write_enable=YES|NO #目录创建控制
max_clients=2 #表示最大同时访问数为2
#local_root=/mnt #家目录控制,默认进入的家目录是进入登录用户的家目录
write_enable=NO|YES #写权限控制,NO表示不允许写,YES表示允许
chroot_local_user=YES #锁定用户到自己的家目录中
vsftpd.conf 配置文件里可以写入此参数:
userlist_deny=NO 表示允许user_list的用户登录,则user_list变白名单。
/etc/vsftpd/ftpusers ##放入的用户永久黑名单
/etc/vsftpd/user_list ##放入的用户默认黑名单
(3) 修改本地上传目录权限
cd /var/ftp/pub
mkdir /var/ftp/pub/upload
chmod 777 /var/ftp/pub/upload -R
chmod 777 /var/ftp/pub -R
(4)重启FTP服务
systemctl restart vsftpd.service
systemctl status vsftpd.service
(5)测试
在win10 的地址栏输入: ftp://服务器ip地址
可以看到默认的共享文件 pub。
(6)如果无法访问,权限不足 请检查以下两项是否关闭。
1、关闭 SELinux
setenforce 0
getenfoce 查看是否关闭:Permissive 是关闭状态
或者:vim /etc/sysconfig/selinux 将 SELINUX=enforcing 改为 SELINUX=disabled 然后重启
2、关闭 防火墙
systemctl stop firewalld #关闭防火墙
systemctl status firewalled
systemctl disable firewalld #关闭防火墙开机启动
========================================================================
扩展:虚拟用户访问:
1、建立认证文件模板
建立模板需要在/etc/vsftp/的目录下完成
我们建立 “vim /etc/vsftpd/ftp_auth_file”
我们写了3个虚拟用户和密码,注意写的时候注意后面的空格,
在这里空格也是会被计算在内的。
2、加密认证文件
然后我们把写出的文件,转换成系统可识别的认证文件
cd /etc/vsftpd/
“db_load -T -t hash -f ftp_auth_file ftp_auth_file.db”
转换出的就是一串加密字符
3、建立pam认证文件
pam是我们系统中的一个插件程序,用来确认配对信息,
例如我们用ftp登录主机用户获取信息是,
需要先输入用户名,然后输入密码才可以进入,
可以来查看pam 的配置目录里的文件内容。
在pam.d目录里是有vsftp的认证文件的,文件内容我们列出来了,
所以我们建立的虚拟用户也
需要建立这样的认证文件才可以让别人访问
建立文件 vim /etc/pam.d/test ,test这个文件名可以自定义
[root@localhost pam.d]# cat test
account required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
auth required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
我们来分析一下这个文件内容:
account:账户
auth:认证,也就是密码
required:必须通过,强制认证
pam_userdb.so:pam的插件名称
db=/etc/vsftpd/ftp_auth_file:
指定pam插件认证的文件,注意的是我们刚转换的格式ftp_auth_file.db,
但是这里默认找的就是后缀为 .db 的文件,所以不需要加 .db
4、编辑vsftp主配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO :不允许匿名
pam_service_name=test:指定认证的文件,之前用的是/etc/pam.d/vsftp
guest_enable=YES:指定虚拟用户功能开启
guest_username=ftp:指定虚拟用户在ftp服务器上的用户身份,
ftp的家目录就是/var/ftp/pub 目录
可以查看/etc/passwd里的内容找到
完成这些设定后就完成了虚拟用户的建立, 重启服务
systemctl restart vsftpd
就可以测试登录查看。
5、测试登录
我们使用另一台主机登录这些虚拟用户。
参考来源:vsftpd服务程序的三种认证模式(匿名开放模式、本地用户模式、虚拟用户模式)
redhat 8中vsftpd服务安装及部署 - 润新知
RedHat Linux 8 中 vsftp服务部署_redhat8安装配置vsftp-CSDN博客
redhat8配置vsftpd服务_redhat ftp-CSDN博客
===========================================================================
再延伸:
虚拟用户家目录的独立设定
默认的虚拟用户我们登录的家目录都在/var/ftp里,那他们创建的目录上传的东西都会在一起,
如果要删除某个虚拟用户的文件,找起来就很麻烦了,所以为了方便管理我们将这些虚拟用户
建立分开的家目录。
首先我们去给每个虚拟用户建立他们的家目录
mkdir /home/test{1..3}
touch /home/test1/abc1
touch /home/test2/abc2
touch /home/test3/abc3
编辑配置文件:vim /etc/vsftpd/vsftpd.conf
写入两条配置
local_root=/home/$USER: 指定用户的登录的家目录,
$USER是系统对于用户的一个变量指代
user_sub_token=$USER: 指定上面写的 $USER是我们系统中的,否则vsftp无法识别
完成后,依然是重启服务
systemctl restart vsftpd
就可以测试登录查看。
配置文件内容
扩展1 配置文件如下:
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
#pam_service_name=vsftpd
pam_service_name=myftptest
guest_enable=YES
guest_username=ftp
userlist_enable=YES
[root@localhost ~]# cat /etc/vsftpd/ftp_auth_file
ftp1
123
ftp2
456
ftp3
789
[root@localhost vsftpd]# ls
ftp_auth_file ftpusers vsftpd.conf vsftpd_conf_migrate.sh
ftp_auth_file.db user_list vsftpd.conf_3
[root@localhost vsftpd]# cd /etc/pam.d/
[root@localhost pam.d]# cat myftptest
account required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
auth required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
=========================================================================
扩展2 配置文件内容如下:
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
#pam_service_name=vsftpd
pam_service_name=myftptest
guest_enable=YES
#guest_username=ftp
userlist_enable=YES
local_root=/home/$USER
user_sub_token=$USER