Linux常用命令整理(适合初学)

关机、重启操作、帮助文档

1、帮助命令

1.1 help

help cd				#查看cd命令的帮助信息
vim --help			#查看vim命令的帮助信息<--help仅支持查看linux外部命令>

内建命令:是shell程序的一部分,在linux系统加载运行时shell就被加载并驻留在系统内存中
外部命令:是linux系统中的实用程序部分,并不随系统一起被加载到内存中,而是在需要时才将其调用内存
查看方法:type command

1.2 man command

man stat			#查看stat命令帮助手册

1.3 info command

info reboot			#查看reboot命令的详细信息

2、关机、重启

2.1 重启shutdown、reboot、init

shutdown -r 10		#10分钟后重启
shutdown -r now		#立即重启
init 1				#立即重启
reboot				#立即重启

2.2 关机shutdown、poweroff、init、halt

shutdown -h 10		#10分钟后关机
shutdown -h 12:00	#12点关机<如果时间大于12:00则第二日相同时间关机>
shutdown -h now		#立即关机
poweroff			#立即关机
init 0				#立即关机
halt				#立即关机<不理会目前系统状况下,进行硬件关机,不建议使用>

目录、文件操作

1、目录切换 cd

命令:cd

cd ~				#切换到当前登录用户家目录
cd ~username		#切换到username用户家目录
cd -				#切换到上次访问目录
cd /				#切换到根目录
cd ..				#切换到上一级目录
cd /home			#切换到根下的home目录

ESC+. 表示引用上一个命令的最后一个参数(等价于!$)

2、目录、文件查看 pwd、tree、ls、stat

pwd					#显示当前工作目录路径
tree /home/			#树状显示目录结构
ls					#查看当前目录下的所有目录和文件<不包含隐藏文件>
ls -a				#查看当前目录下的所有目录和文件<包含隐藏文件>
ll					#列表查看当前目录下的所有目录和文件<不包含隐藏文件>
ls -l				#列表查看当前目录下的所有目录和文件<不包含隐藏文件>
ll -d /home/		#列表查看home目录本身的信息
ll file.txt			#查看file.txt文件的信息<包含文件类型、权限、属主、属组、修改时间等信息>
stat /home/			#查看home目录本身的详细信息
stat /home/file.txt	#或查看文件的详细信息

3、目录、文件操作[创建、删除、修改、查找]

3.1 创建目录 mkdir

用法:mkdir [选项]… 目录…

mkdir dir					#在当前目录下创建dir目录
mkdir /home/dir1 			#在/home目录下创建dir1目录
mkdir -p dir/dir2/dir3		#在当前目录下递归创建dir2、dir3目录
mkdir -m 761 /home/dir4		#创建dir5是指定目录权限为rwxrw---x
mkdir -v dir{1..10}			#一次创建dir1-dir10十个目录并显示创建过程

3.2 创建空文件 touch

用法:touch [选项]… 文件…
linux中的touch命令不常用,一般用来修改文件时间戳,或者新建一个不存在的文件。

touch file.txt						#创建空文件file.txt,如果文件已存在则修改文件时间戳

touch -a file.txt					#只更改文件的存取时间
touch -m file.txt					#只更改变动时间

touch -r file.txt log.txt			#将file.txt文件的时间戳修改为log.txt的时间戳
touch -t 201910101212.30 file.txt	#按照[[CC]YY]MMDDhhmm[.SS]格式修改文件时间戳

3.3 删除目录、文件 rmdir、rm

mkdir用法:rmdir [选项]… 目录…<只能删除空目录>

rmdir dir10					#删除当前目录下的空目录dir10
rmdir -p dir/dir2			#递归删除目录,当子目录dir2删除后其父目录dir为空时,也一同被删除

rm用法:rm [选项]… 文件…

rm file						#删除文件
rm -r dir					#删除目录

rm -f file					#强制删除文件不提示
rm -rf dir					#强制删除目录下所有内容不提示

rm -rfv dir					#强制删除目录下所有内容不提示并显示删除过程

3.4 目录、文件修改 mv、cp、scp

mv用法: mv [选项]… 源文件或目录 目标文件或目录

mv old-file new-file		#将文件old-file重命名为new-file
mv old-dir new-dir			#将目录old-dir重命名为new-dir

mv old-file /home			#将文件old-file移动到/home目录下
mv old-dir /home			#将目录old-dir移动到/home目录下

mv file1 file2 /home		#将多个文件移动到/home目录下
mv dir1 dir2 dir3 /home		#将多个目录移动到/home目录下

mv -f file1 file2			#重命名file1为file2时如果file2已存在,直接强制覆盖不提示
mv file1 -b file2			#文件被覆盖前做简单备份

cp用法: cp [选项]… 源文件或目录 目标文件或目录

cp file.log file.txt		#拷贝file.log文件并命名为file.txt
cp file	/home				#将file文件拷贝到/home目录
cp -r dir1 dir2				#拷贝dir1目录并命名为dir2<如果dir2已存在,就会将dir1拷贝到dir2目录内>

cp -a dir3 dir4				#拷贝dir3目录为dir4时不改变时间戳
cp -r dir5 dir6				#将目录dir5的所有文件及其子目录复制到目录dir6中

scp用法: scp [选项]… 源文件或目录 [远程主机用户名]@[远程主机IP地址]:目标文件或目录

scp /home/centos/ll.txt 192.168.189.130:/home/centos/				#将文件拷贝到远程主机不改变文件名<未指定用户名,默认root>
scp /home/centos/ll.txt [email protected]:/home/centos/			#将文件拷贝到远程主机不改变文件名

scp /home/centos/ll.txt 192.168.189.130:/home/centos/cc.txt			#将文件拷贝到远程主机并改变文件名<未指定用户名,默认root>
scp /home/centos/ll.txt [email protected]:/home/centos/cc.txt	#将文件拷贝到远程主机并改变文件名

scp -r /home/centos/ 192.168.189.130:/home/centos/					#将目录拷贝到远程主机不改变目录名<未指定用户名,默认root>
scp -r /home/centos/ [email protected]:/home/centos/				#将目录拷贝到远程主机不改变目录名
scp -r /home/centos/ [email protected]:/home/tt/					#将目录拷贝到远程主机并改变目录名

3.5 文件查看 nl、cat、more、less、head、tail、wc

用法:nl [选项]… [文件]…

nl file.txt					#查看文件并显示行号<空白行不加行号>
nl -b a file.txt			#查看文件并显示行号<空白行加行号>

用法:cat [选项]… [文件]…

cat file.txt						#一次显示整个文件
cat -n file.txt						#查看文件并显示行号<空白行加行号>
cat -b file.txt						#查看文件并显示行号<空白行不加行号>

cat > cat.txt <<EOF					#从键盘创建一个新文件,不能编辑已有文件
cat file1.txt file2.txt >file.txt	#将多个文件合并为一个文件

用法:more [选项]… [文件]…
仅支持向下翻页

more file.txt				#会以一页一页的显示文件内容

more +10 file.txt			#从第10行开始显示文件内容
more -10 file.txt			#自定义屏幕大小为10行显示

用法:less [选项]… [文件]…
less功能与more类似,但是支持上下翻页,比more用户更多的搜索功能,而且less 在查看之前不会加载整个文件

less file.txt				#会以一页一页的显示文件内容
less file1.txt file2.txt	#同时查看多个文件 
less -N file.txt			#查看文件并显示行号

用法:head [选项]… [文件]…

head log.txt				#查看文件的开头<默认显示10行>

head -n 30 log.txt			#查看文件的前30行
head -n -30 log.txt			#查看文件除了最后30行以外的内容

head -c 100 log.txt			#查看文件前100个字节
head -c -100 log.txt		#查看文件除了最后100个字节以外的内容

用法:tail [选项]… [文件]…

tail log.txt				#查看文件的末尾<默认显示10行>

tail -n 20 log.txt			#查看文件的后20行
tail -n +10 log.txt			#从第10行开始显示文件

tail -c 200 log.txt			#查看文件最后200个字节
tail -c +200 log.txt		#从第200个字节开始显示文件

用法:wc [选项]… [文件]…
wc命令可以计算文件的Byte数、字数、或是列数

wc file.txt					#依次显示文件的行数、字数、Byte数
wc file1.txt file2.txt		#同时计算多个文件的文件信息

wc -l file.txt				#只显示文件的行数
wc -w file.txt				#只显示文件的字数
wc -c file.txt				#只显示文件的Byte数<字节数>

3.6 文件查找 which、whereis、locate、find

用法:which [选项]… [命令]…

which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果

which which					#用which找出which命令的位置
which vim					#用which找出vim命令的位置

用法:whereis [选项]… 程序名…
whereis命令只能从数据库中查找程序名,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。但是该数据库文件默认情况下时一星期更新一次,因此,在用whereis 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

whereis python				#将python相关的文件都查找出来
whereis -b python			#将python相关的二进制文件查找出来
whereis -m python			#将python相关的man说明文件查找出来
whereis -s python			#将python相关的源代码文件查找出
whereis -u python			#将python除可执行文件、源代码文件、帮助文件以外的其它文件

用法:locate [选项]… 搜索模式…

locate vim					#查找和vim相关的所有文件
locate /home/l				#在/home目录下查找以l开头的文件
locate /home/*txt			#在/home目录下查找以txt结尾的文件

Find 查找文件

用法:find 搜索路径… [选项]…搜索内容…[执行操作]…
find 是比较特殊的命令,它有两个参数:
第一个参数用来指定搜索路径
第二个参数用来指定搜索内容

按照文件名搜索

选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小
-inum: 按照 inode 号搜索

find / -name yum.conf		#在根目录下査找文件名是yum.conf的文件

find 命令是完全匹配的,必须和搜索关键字一模一样才会列出

touch yum.conf.bak			#在/root/目录下建立一个文件yum.conf.bak
find /-name yum.conf		#搜索只能找到yum.conf文件,而不能找到 yum.conf.bak 文件
/etc/yum.conf

按照 inode 号搜索

是区分硬链接文件的重要手段,因为硬链接文件的 inode 号是一致的

ls -i file					#查询文件的inode
ls -id /home				#查询目录的inode
stat 目录名/文件名			#查询目录或者文件的inode

find / -inum 64				#在根目录下查找inode号是64的文件

按照文件大小搜索

选项:-size [±]大小
“+“的意思是搜索比指定大小还要大的文件,”-” 的意思是搜索比指定大小还要小的文件。

find -size 25k				#当前目录下查找大小刚好是25k的文件
find -size -25k				#当前目录下查找小于25k的文件
find -size +25k				#当前目录下查找大于25的文件

按照修改时间搜索

选项:
-atime [±] 时间:按照文件访问时间搜索
-mtian [±] 时间:按照文件数据修改时间搜索
-ctime [±] 时间:按照文件状态修改时间搜索

find -atime -10				#查找十天内访问过的文件
find -mtime 10				#查找前十至十一天修改过数据的文件
find -ctime +10				#查找11天前修改过状态的文件

Find 时间轴如下图:
Linux常用命令整理(适合初学)_第1张图片

按照文件权限搜索

选项:
-perm 权限模式:査找文件权限刚好等于"权限模式"的文件
-perm -权限模式:査找文件权限全部包含"权限模式"的文件
-perm +权限模式:査找文件权限包含"权限模式"的任意一个权限的文件

find -perm 444				#查找权限等于444的文件<査找的文件权限必须和指定的权限模式一模一样才可以找到>
find -perm -200				#查找权限全部包含200的文件<文件的权限必须全部包含搜索命令指定的权限模式才可以找到>
find -perm +200				#查找权限只要包含200任意一个权限的文件<只要包含任意一个指定权限就可以找到>

按照文件属主和属组搜索

选项:
-uid 用户: ID按照用户 ID 査找所有者是指定 ID 的文件
-gid 组 ID:照用户组 ID 査找所属组是指定 ID 的文件
-user 用户名:按照用户名査找所有者是指定用户的文件
-group 组名:按照组名査找所属组是指定用户组的文件
-nouser:査找没有所有者的文件

find -uid 1000				#查找属主uid是1000的全部文件
find -gid 1001				#查找属组uid是1001的全部文件
find -user centos			#查找属主是centos用户的全部文件
find -group centos			#查找属组是centos组的全部文件
find -nouser				#查找没有所有者的文件,主要用于査找垃圾文件

按照文件类型搜索

选项:
-type d :查找目录
-type f :查找普通文件
-type l :查找软链接文件

find /etc -type d			#查找 /etc目录下有哪些子目录
find /etc -type f			#查找 /etc目录下有哪些普通文件
find /etx -type l			#查找 /etc目录下有哪些软链接文件

查看文件类型:file 文件名

—普通文件(文本文件,二进制文件,压缩文件,电影,图片…)
d 目录文件(蓝色)
b 设备文件(块设备)存储设备硬盘,U盘 /dev/sda, /dev/sda1
c 设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero
s 套接字文件
p 管道文件
I 链接文件(淡蓝色)

逻辑运算符

-a :and逻辑与
-o :or逻辑或
-not :not逻辑非

find -size +2k -a -type f		#在当前目录下查找大于2k的普通文件
find -name cangls -o -name bols	#在当前目录下查找文件名要么是cangls,要么是bols的文件
find -not -name cangls			#在当前目录下查找文件名不是cangls的文件

-exec、-ok选项

find 搜索路径 [选项] 搜索内容 -exec 命令2{} ;
首先,这里的"{}“和”;“是标准格式,只要执行”-exec"选项,这两个符号必须完整输入
其次,这个选项的作用其实是把 find 命令的结果交给由"-exec"调用的命令来处理。"{}"就代表 find 命令的査找结果。

find -perm 444 -exec ls -l {} \;		#查找权限等于444的文件并且查看文件信息
find -name ll.txt -exec rm -rf {} \;	#查找文件名为ll.txt的文件并强制删除

find 搜索路径 [选项] 搜索内容 -ok 命令2{} ;
“-ok"选项和”-exec"选项的作用基本一致,区别在于:"-exec"的命令会直接处理,而不询问;"-ok"的命令 2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行

find .-perm 444 -ok rm -rf{} \;
<rm…./test2>?y  <-需要用户输入y,才会执行

4、文件编辑 vim

vim支持同时编辑两个文件,ctrl+ww进行切换,q退出、qall全部退出

vim -O /etc/hosts /etc/hostname

vimdiff将两个相似文件不同的地方特别标识出来(用于两个相同的文件进行对比改错)

vimdiff /etc/host /etc/host1

4.1、命令模式

命令模式里面使用ZZ<大写Z>保存退出

光标定位

h			#左
j			#下
k			#上
l			#右
0			#定位到光标所在行首
$			#定位到光标所在行尾
gg			#定位到第一行第一个
G			#定位到最后一行第一个
3G			#定位到第3(n)行第一个
/字符		#以搜索的方式进行定位(n--向下循环移动,N--向上循环移动)
/^d			#定位以d开头行的内容
/txt$		#定位以txt结尾行的内容

文本编辑

y			#复制(yy-复制1行,3yy-复制3行,ygg--从光标处一直复制到第一行,yG--从光标出一直复制到最后一行)
d			#删除(dd-删除1行,3dd-删除3行,dgg--从光标处一直删除到第一行,dG--从光标出一直删除到最后一行)
p			#粘贴

x			#删除光标所在字符
D			#从光标处删除到行尾

u			#undo撤销
^r			#redo重做(反撤销)
r			#用来修改光标处的一个字符(r--单字符替换;R--多字符替换)

4.2、编辑模式

进入到编辑模式

a			#从光标后插入
i			#从光标前插入
o			#从光标所在行另起一行插入
A			#从光标所在行尾插入

4.3、 扩展模式

保存退出

:10			#进入第10行
:w			#保存
:q			#退出
:wq			#保存并退出
:w!			#强制保存
:q!			#强制退出
:wq!		#强制保存退出
:x			#保存并退出(X--保存并加密码)

查找替换:

:范围 s/old/new/选项

:1,5 s/old/new/		#从1-5行将old替换为new(只会替换掉1-5行含old的第一列)
:1,5 s/old/new/g	#从1-5行将old替换为new,g代表全局,1-5行所有含old都会进行替换
:5,$ s/old/new/		# $表示最后一行
:1,$ s/old/new/		#等价于% s/old/new/g   %表示全文,g表示全局
: ,8 s/old/new/		#从当前行到第8行将old替换为new
:4,9 s/^#//			#将4-9行的开头#替换为空
:5,10 s/.*/#&/		# 5-10行前插入#(.*表示整行,&引用查找的内容)

保存、另存、读取

:w						#保存到当前文件
:w /new/aaa.txt			#另存为/new/aaa.txt
:1,3 w /new/bbb.txt		#将1-3行另存为/new/bbb.txt
:r /etc/old				#读入文件到当前行后
:5 r /etc/old			#读入文件到第5行后

临时环境设置

:set nu				#设置行号
:set nonu			#取消行号设置
:set ic				#不区分大小写
:set noic			#区分大小写
:set ai				#自动缩进
:set list			#显示控制字符

永久环境设置–修改vim环境配置文件

/etc/vimrc			#影响所有用户
~/.vimrc			#影响某一个用户
[centos@centos ~]$ vim ~/.cimrc
set ic
set nu
#在文件最后添加即可

4.4、可视模式

v				#进入可视模式
^v				#进入可视块模式
V				#进入可是行模式
r				#单字符替换
R				#进入替换模式,可多字符替换
块插入			#选择块,I (大写的i),在块前插入字符,ESC
块替换			#选择块,r,输入替换字符
块删除			#选择块,d、x
块复制			#选择块,Y

5、目录、文件权限查看修改

Linux常用命令整理(适合初学)_第2张图片
Linux常用命令整理(适合初学)_第3张图片
用户获取文件权限的顺序: 先看是否为所有者,如果是,则后面权限不看;再看是否为所属组,如果是,则后面权限不看。

针对目录加执行权限,文件不加执行权限(因文件具备执行权限有安全隐患)
root账户不受文件权限的读写限制,执行权限受限制

查看目录、文件权限

ll file						#查看文件权限<包含文件类型、属主、属组、对应权限、修改时间等>
ll dir						#查看目录下面的文件权限
ll-d dir					#查看目录本身的权限

修改目录、文件属主、属组 chown、chgrp

用法:chown [选项]… [所有者][:[组] 文件…

chown root /var/run/httpd.pid			#将 /var/run/httpd.pid 的属主修改为 root
chown :ubuntu /home/centos/file.txt		#将 /home/centos/file.txt的属组修改为ubuntu
chown runoob:runoobgroup file1.txt		#将文件 file1.txt 的属主修改为 runoob,属组 runoobgroup 

chown 1000 /var/run/httpd.pid			#将 /var/run/httpd.pid 的属主修改为1000<用户ID>
chown :1001 /home/centos/file.txt		#将 /home/centos/file.txt的属组修改为1001<组ID>

用法:chgrp [选项]… 用户组 文件…

chgrp groupname /home/centos/file.txt	#将/home/centos/file.txt的属组修改为groupname

更改文件/目录的属主/属组相当于将文件的所有权转移给新的属主/属组

修改目录、文件权限 chmod

mode法格式:chmod who opt per file
在这里插入图片描述

chmod u+x file				#给文件属主添加执行权限
chmod u-x file				#将文件属主去掉执行权限
chmod u=rwx file			#将文件属主权限更改为读/写/执行
chmod u=rwx,o=r file		#文件所有者拥有读写执行权限,其他人只有读权限
chmod u=r file1 file2		#同时修改2个文件的权限

数字法格式:chmod XXX file

chmod 777 file				#将文件file的属主、属组、其他人权限都更改成读写执行
chmod 764 file				#将文件file的属主、属组、其他人权限更改成读写执行、读写、读
chmod 7 file				#等价于chmod 007 file
chmod 7 file1 file2			#同时修改两个文件的权限
chmod 777 dir				#给目录dir本身设置权限
chmod -R 777 dir			#递归设置目录dir的权限

ACL权限管理 getfacl、setfacl

查看文件acl权限

getfacl /home/centos			#查看/home/centos目录本身的acl权限

给文件添加acl权限

setfacl -m u:username:0 file	#使username账户对指定file文件无权限
setfacl -m u:username:rw file	#使username账户对指定file文件有读写权限
setfacl -m g:group:rw file		#使group组对指定file文件有读写权限

删除文件acl权限

setfacl -x u:username file		#删除username账户对指定file文件的ACL权限
setfacl -x g:group file			#删除group组对指定file文件的ACL权限

ACL权限执行顺序类似于用户获取文件权限的顺序,getfacl顺序从上到下执行,一旦生效,下面的将不再生效(如果属于多个组,权限累加)

acl权限下的mask
设置用户对指定文件所能拥有的最大权限(限高作用)

setfacl -m mask::r file			#使指定文件file所拥有的最大权限位读r
setfacl -x mask::r file			#取消指定文件file的最大权限限制mask
setfacl -b file					#取消file文件所有的ACL权限

ACL生效顺序:所有者、自定义用户、自定义组、其他人

acl权限的继承:default

setfacl -m  d:u:centos:rwx dir	#d等同于default,赋予用户centos以后在目录dir下新建的文件有读写执行的权限

继承是针对于之后的,继承之前(现在)不起作用

备份和恢复ACL权限

getfacl -R /tmp/dir>acl.txt					#将dir目录下ACL权限备份
setfacl -R --restore=acl.txt				#恢复dir目录下ACL权限restore(前提是先进入到dir的上层目录)
getfacl file1 | setfacl --set-file1=- file2	#将file1文件的acl权限设置给file2文件

特殊权限suid、sgid、sticky

suid
作用:给一个用户继承二进制程序属主拥有的权限
suid权限位 位于所有者的执行权限位上,如果一个文件具有suid权限,则所有者执行位为s(如果一个文件属主本身具有执行权限的同时再附加suid权限,则所有者执行位为s),文件表现为红色背景

chmod u+s ll.txt			#给ll.txt文件增加suid权限
ll ll.txt					#查看文件信息
-rwSrwxr--+ 1 ubuntu ubuntu 1175 11月  3 12:29 ll.txt

chmod 4755 ll.txt			#suid数字法表示为4
ll ll.txt 					#查看文件信息
-rwsr-xr-x+ 1 ubuntu ubuntu 1175 11月  3 12:29 ll.txt

sgid
作用1:给一个用户继承二进制程序属组拥有的权限
作用2:作用在目录上时,使一个目录下的新建的文件继承目录的所属组拥有的权限
sgid权限位 位于所有组的执行权限位,如果一个文件具有sgid权限,则所有组的执行位为s(如果一个文件属组具有执行权限的同时再附加sgid权限,则所有者执行位为s),文件表现为黄色背景

chmod g+s ll.txt			#给ll.txt文件增加sgid权限
ll ll.txt 					#查看文件信息
-rwsr-Sr-x. 1 ubuntu ubuntu 1175 11月  3 12:29 ll.txt

chmod 2775 ll.txt			#sgid数字法表示为2
ll ll.txt 					#查看文件信息
-rwxrwsr-x. 1 ubuntu ubuntu 1175 11月  3 12:29 ll.txt

sticky
作用:作用于目录上,此目录的文件只能被所有者删除(root、文件所有者、目录的所有则可以删除)
sticky权限位 位于其他的执行权限位上,如果一个文件具有sticky权限,则其他的执行位为t,目录表现为绿色背景

chmod o+t dir/				#给dir目录增加sticky权限(添加之后目录其他的执行位为t)
ll -d dir/					#查看目录本身信息
drwxr-xr-t. 2 root root 6 11月  4 11:18 dir/

chmod 1777 dir/				#sticky数字表示法为1(添加之后目录其他的执行位为t)
ll -d dir/					#查看目录本身信息
drwxrwxrwt. 2 root root 6 11月  4 11:18 dir/

目录、文件隐藏属性 chattr、lsattr

lsattr 命令,专门用来查看文件或目录的隐藏属性

chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。添加隐藏属性之后即使是root也无法进行删除、修改操作.
基本格式:
chattr [±=][属性] 文件或目录名

  • 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性
    Linux常用命令整理(适合初学)_第4张图片
    注意:通常情况下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目录的隐藏属性,很容易导致系统无法启动。另外,chattr 命令常与 lsattr 命令合用,前者修改文件或目录的隐藏属性,后者用于查看是否修改成功
chattr +i dir/			#给目录赋予隐藏属性
lsattr -d dir/			#查看目录隐藏属性
----i----------- dir/	
touch dir/file			#在目录下创建文件报错
touch: 无法创建"dir/file": 权限不够

chattr +a file			#给文件赋予隐藏属性
lsattr file				#查看文件隐藏属性
-----a---------- file

chattr -a file			#删除文件隐藏属性
chattr -i dir/			#删除目录隐藏属性

Linux权限管理之进程掩码 mask umask

新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限。默认情况下,文件夹的umask值为022,文件的umask值为133(在文件夹权限的基础上减去执行权限)。
umask:表示查看减掉的权限
umask -S:表示查看减掉之后该有的权限

umask 000				#临时设置新建的文件夹的权限为读写执行全给,同时影响新建文件的权限
mkdir dir900
touch file900
ll -d dir900 file900
drwxrwxrwx. 2 root root 4096 3月 11 19:44 dir900
-rw-rw-rw-. 1 root root 0 3月 11 19:44 file900
vim /etc/profile		#永久修改shell umask值
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002    #影响文件夹的权限
else
umask 022    #影响文件的权限
fi
source /etc/profile		#立即在当前shell中生效
vim /etc/login.defs		#通过umask决定新建用户HOME目录的权限
UMASK 077
useradd gougou			#新建用户
ll -d /home/gougou/		#查看用户家目录权限
drwx------. 4 gougou gougou 4096 3月 11 19:50 /home/gougou/

vim /etc/login.defs		#通过umask决定新建用户HOME目录的权限
UMASK 000
useradd yangyang		#新建用户
ll -d /home/yangyang/	#查看用户家目录权限
drwxrwxrwx. 4 yangyang yangyang 4096 3月 11 19:53 /home/yangyang/
umask 777;touch file	#修改mask值并创建文件(修改的mask值在重启前都有效)
(umask 777;touch file)	#修改mask值并创建文件(修改的mask值只针对新建的file文件有效)

给命令添加()表示在子进程subshell中执行

6、文件压缩及解压 tar

打包:目的就是为了管理方便
压缩:目的就是为了节省空间
用法: tar 选项… 文件…

tar -czf ll.tar.gz ll.txt			#打包并调用gzip压缩到当前位置
tar -xzf ll.tar.gz					#解压到当前位置<其中z可以不写让系统自动判断压缩包类型>
tar -xf ll.tar.gz -C /home/centos	#-C重定向到/home/centos目录

扩展:将A机器上 /etc(海量小文件)拷贝到B机器 /tmp(快速拷贝大量文件)

[root@centos home]# firewall-cmd --permanent --add-port=8888/tcp	#开放8888端口
[root@centos home]# firewall-cmd --reload							#关闭防火墙
或者
[root@centos home]# systemctl stop firewalld.service				#关闭防火墙

[root@centosjobs home]# nc -l 8888 |tar -xzf - -C /tmp				#在B机器上执行
[root@centos home]# tar -czf - /etc |nc 192.168.6.130 8888			#在A机器上执行

用户、组管理

1、创建用户 useradd

用法:useradd [选项] 用户名

useradd tt			#创建tt用户
#未指定用户的主组、附加组、家目录、shell、UID;系统会自动创建一个和用户名相同的组作为它的主组、家目录
useradd -g root tt			#创建用户tt并指定tt用户的主组为root
useradd -d /home/myd cc		#创建用户cc并指定家目录
useradd -t xx				#创建一个系统用户xx
useradd -u 544 zz			#创建用户zz并指定ID
useradd aa -s /sbin/nologin	#创建用户aa并指定shell

用户的主组有且只有一个,使用-g可以进行指定或者系统自动创建;附加组可以有多个也可以没有,创建时使用-G进行指定或者使用usermod、gpasswd进行修改
注意:-g,-G仅在创建新用户时才可以使用,指定的组必须事先存在

/sbin/nologin 用户无法登陆系统实现管理、仅作为运行进程的的用户
/bin/bash 登陆系统实现管理

2、查看用户信息 id

id						#查看当前用户信息
id tt					#查看tt用户信息

用户信息配置文件/etc/passwd

root	:x			:0		:0		:root	:/root	:/bin/bash
用户名	:密码占位符	:uid	:gid	:描述	:home	:shell

密码信息配置文件/etc/shadow

root:$6$anuXmRiOlc2YJHqo$L5EojaibMiK1J7P/TyKK5BFpJlomzVD0YyuGjuR8qzdElx3CrRQw.8GfQOEsB1Gtc.7qfnvaxdCnJmyK0RJbp.::0:99999:7:::
第一个字段为:用户名					#root
第二个字段为:加密的密码				#$6$anuXmRiOlc2YJHqo$L5EojaibMiK1J7P/TyKK5BFpJlomzVD0YyuGjuR8qzdElx3CrRQw.8GfQOEsB1Gtc.7qfnvaxdCnJmyK0RJbp.
第三个字段为:密码最后一次修改的时间		#(chage -d)--空(代表从未修改)
第四个字段为:密码最小修改间隔时间		#(chage -m)--0
第五个字段为:密码最大修改间隔时间		#(chage -M)--99999
第六个字段为:密码需要变更前的警告天数	#(chage -W)--7
第七个字段为:密码过期后的宽限天数		#(chage -I)--空
第八个字段为:账号失效时间				#(chage -E)--空
第九个字段为:保留

密码:
$6			$anuXmRiOlc2YJHqo				$L5EojaibMiK1J7P/TyKK5BFpJlomzVD0YyuGjuR8qzdElx3CrRQw.8GfQOEsB1Gtc.7qfnvaxdCnJmyK0RJbp.
加密算法		盐(用于区分开同密码)的密码串		密码字符串
三块组合成为用户密码哈希值

加密算法:$1:MD5		$5:SHA-256		$6:SHA-512

组配置文件 /etc/group

wheel	:x				:10		:centos
组名		:密码占位符		:GID	:组成员

3、设置密码 passwd、chage

用法:passwd [选项] 用户名

passwd							#给当前用户设置密码
passwd aa						#给aa用户设置密码,只有root用户才可以给其他用户修改密码

更改用户账户、密码的过期信息:chage
用法:chage [选项] 用户

chage -l root					#查看用户密码的有效期
chage -E 0 ubuntu				#设置密码过期时间为立即过期
chage -d 0 ubuntu				#设置登陆必须修改密码
chage -M 60 -m 7 -W 7 ubuntu	#设置ubuntu用户密码60天后过期,至少7天后才能修改密码,密码过期前7天开始收到告警信息

编辑 /etc/login.defs 来设定几个参数,以后设置口令默认就按照参数设定为准:

PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7

编辑 /etc/default/useradd 可以找到如下2个参数进行设置:

useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

通过修改配置文件,能对之后新建用户起作用,而目前系统已经存在的用户,则直接用chage来配置。

4、修改用户 usermod

用法:usermod [选项] 用户名

usermod -d /home/hnlinux xx		#修改用户家目录
usermod -u 777 cc				#修改用户UID

5、删除用户 userdel

用法:userdel [选项] 用户名

userdel hnlinux					#删除用户账户
userdel -r hnlinux				#删除用户时同时删除用户家目录、邮件、spool

6、切换用户 su、sudo

su用于用户之间的切换,切换前的用户依然保持登录状态

su					#切换至root用户,需要输入root用户密码,切换后家目录任然是原用户家目录<等同于su root>
su -				#切换至root用户,需要输入root用户密码,切换后家目录变成root用户家目录<等同于su -root>

ctrl+d				#退出当前用户登陆状态,返回至切换前用户登陆状态

使用su切换到root账户就需要知道root账户密码,非常不安全。sudo则可以使普通用户临时具有root权限,使用sudo时只需要输入自己的密码即可。

使用root账户编辑 /etc/sudoers文件或者visudo可以修改配置文件,使用户具有sudo权限

gpasswd -a centos wheel					#将centos用户添加到wheel组
visudo									#修改配置文件

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
centos  ALL=(ALL)       ALL				#添加此行

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL		

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL	#将此行去掉注释,代表在使用sudo执行命令时无需输入密码
less /etc/sudoers			#普通用户查看/etc/sudoers提示权限不够
/etc/sudoers: 权限不够
sudo less /etc/sudoers		#在命令前加上sudo就可以了

7、创建组 groupadd

用法:groupadd [选项] 组

groupadd runoob				#创建一个新组
groupadd -g 333 runoob		#创建新组并指定GID
/etc/group					#组信息
wheel	:x              :10		:centos
组名		:密码占位符		:GID	:组成员

8、删除组 groupdel

用法:groupdel [选项] 组

groupdel linuxcool					#使用groupdel命令删除linuxcool工作组
cat /etc/group | grep linuxcool		#查看linuxcool组是否删除成功

9、添加到组中 gpasswd

用法:gpasswd [选项] 组

gpasswd -a user group				#将user添加到group组当中 
gpasswd -d user group               #将user从group组删除
gpasswd -a user wheel               #将user添加到wheel(类似于管理员组),加sudo即可以管理员身份执行命令

网络管理

1、主机管理uname、hostname

用法:uname [选项]…

-a, --all 以如下次序输出所有信息。其中若-p 和-i 的探测结果不可知则被省略
-s – 输出内核名称
-n – 输出网络节点上的主机名
-r – 输出内核发行号
-v – 输出内核版本
-m – 输出主机的硬件架构名称
-p – 输出处理器类型或"unknown"
-i – 输出硬件平台或"unknown"
-o – 输出操作系统名称

uname				#输出内核名称,相当于uname -s
uname -a			#输出一组系统信息
uname -n			#查看系统主机名

用法:hostname [选项]…

hostname			#查看系统主机名
hostname linux		#将系统主机名临时设置成linux,立即生效。重启后失效

hostnamectl							#查看系统主机信息
hostnamectl set-hostname linux		#永久修改主机名
cat /etc/hostname					#查看是否修改
reboot								#重启生效

2、查看网卡信息 ip、nmcli

用法:ip [选项] 常用对象 { 命令 | 帮助 }
常用对象: { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | | fou | macsec | tcp_metrics | token | netconf | ila | vrf }

ip addr show												#显示网卡IP信息
ip link show												#显示网络接口信息

ip route show												#显示系统路由
ip route list												#查看路由信息

用法:nmcli [选项] 常用对象 { 命令 | 帮助 }

nmcli				#查看所有网络设备的完整信息
nmcli device		#查看所有网络设备的状态
nmcli device show	#查看所有网络设备的连接信息
nmcli connection	#查看已连接的网络设备信息

常用查看ip的命令

ip a				#ip addr show的简写

nmcli				#效果与ip a 类似

hostname -I			#只显示IP地址,其余不显示

3、修改网卡配置 nmtui

用法:nmtui [选项]…
图形模式配置网卡信息

nmtui				#修改网卡配置
nmtui hostname		#修改主机名
ip addr add 192.168.1.10/24 dev ens33						#设置ens33网卡IP地址192.168.1.10(临时生效,重启失效)
ip addr del 192.168.1.10/24 dev ens33						#删除ens33网卡IP地址
ip link set ens33 up										#开启网卡
ip link set ens33 down										#关闭网卡
ip link set ens33 promisc on								#开启网卡的混合模式
ip link set ens33 promisc offi								#关闭网卡的混个模式
ip link set ens33 txqueuelen 1000							#设置网卡队列长度
ip link set ens33 mtu 1500									#设置网卡最大传输单元
ip route add default via 192.168.1.254						#设置系统默认路由
ip route add 192.168.10.0/24  via  192.168.0.254 dev ens33	#设置192.168.10.0网段的网关为192.168.0.254,数据走ens33接口
ip route add default via  192.168.0.254  dev ens33			#设置默认网关为192.168.0.254
ip route del 192.168.10.0/24								#删除192.168.10.0网段的网关
ip route del default										#删除默认路由
ip route delete 192.168.10.0/24 dev ens33					#删除路由

centos 7 修改网卡名
对已经装好系统的机器修改网卡配置文件:

cd /etc/sysconfig/network-scripts/
mv ifcfg-ens33 ifcfg-eth0
vim ifcfg-ens33
NAME="ens33"改为NAME="eth0"
DEVICE="ens33"改为DEVICE="eth0"

vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
#添加
net.ifnames=0

grub2-mkconfig -o /boot/grub2/grub.cfg
rebbot

对未安装的机器在安装时修改:
选中安装centos7之后按tab键
Linux常用命令整理(适合初学)_第5张图片在下面输入net.ifnames=0
Linux常用命令整理(适合初学)_第6张图片

其他命令

1、bash基本特性

bash输入自动补全

bash快捷键

^C		#终止前台运行的程序
^		#退出、等价于exit
^L		#清屏
^A		#光标移动到命令行的最前端
^E		#光标移动到命令行的最后端
^U		#删除光标前所有字符
^K		#删除光标后所有字符

bash历史命令

history		#查看所有历史命令(history -c	#临时清除终端上的历史命令。rm -rf ~/.bash.history;history -c	#永久清除)
光标上下键	#依次查看上一个命令
^R			#利用关键字搜索历史命令
!220		#使用第220条命令(!表示引用)
!字符串		#搜索历史命令中最近一个以xxxx字符开头的命令
!$			#引用上一个命令的最后一个参数
ESC.		#应用上一个命令的最后一个参数

命令别名

alias										#查看当前系统的别名

alias bieming='cd /home/ubuntu2204/'		#建立别名(临时的,仅在当前shell生效)
unalias bieming								#取消别名
type -a ls									#查看命令类型(是什么的别名)
\ls											#使用过程中别名优先,如果需要跳过别名可以在前面加‘\’

永久别名

vim /etc/bashrc								#bashrc为shell配置文件之一
alias bieming='cd /home/ubuntu2204/'

2、Linux进程管理

2.1、查看进程 /proc 、ps aux 、top

第一种方式:在/proc这个目录下保存着所有进程的信息

ls /proc/

第二种方式:可以使用命令ps静态查看进程

ps aux					#查看系统中所有的进程信息
ps aux --sort rss		#按照进程rss升序进行排列
ps aux --sort -rss		#按照进程rss降序进行排列
ps axo 字段				#按照自定义字段的顺序显示进程
ps axo user,pid,rss,vsz				#按照user/pid/rss/vsz的顺序显示进程
ps axo user,pid,rss,vsz --sort rss	#按照user/pid/rss/vsz的顺序显示进程并且按照rss升序排列
ps -ef								#简洁显示进程
ps aux |grep sshd					#查看指定进程sshd
pstree								#查看进程树(层级关系)
ps axj								#可以查看进程的父进程号

pgrep 是一个命令行实用程序,可让您根据给定的条件查找正在运行的程序的进程PID

用法:pgrep [选项] [模式] 进程名/用户名

pgrep ssh				#查看ssh进程的PID
pgrep -l ssh			#查看ssh进程的PID和进程名
pgrep -u root			#查看root用户的所有进程
pgrep -u root,centos	#同时查看root、centos用户的进程

第三种方式:使用top命令动态查看进程

top						#动态的查看进程的信息,其中的信息默认3秒会更新
进程命令:
h	#帮助
M	#按内存的使用排序
P	#按cpu的使用排序
N	#以PID的大小排序
R	#对排序进行反转
f	#自定义显示字段  空格选中,右键选中,上下键移动,回车确定,Q退出(未保存)/W保存
1	#显示所有CPU的负载
<	#向前
>	#向后
z	#彩色
w	#保存top环境设置,保存到~/.toprc中
top -d 1 -p 进程号 -u 进程名     

-d 1		#进程刷新时间为1秒
-p 进程号	#查看指定进程
-u 进程名	#查看指定用户运行的进程
-b -n 2		#查看2次

2.2、信号控制进程 kill、killall、pkill

kill -l				#查看全部进程信号(后面只能跟PID或者作业编号)
1)、SIGHUP			#重新加载配置  PID不变
2)、SIGINT			#键盘中断^C
3)、SIGQUIT			#键盘退出
9)、SIGKILL			#强制终止
15)、SIGTERM		#终止(正常结束 )
18)、SIGCONT		#继续
19)、SIGSTOP		#停止
20)、SIGTSTP		#暂停^Z
ps aux |grep sshd			#查看指定进程sshd的信息
kill -1 XXXX(进程PID)		#重载sshd进程
kill -15 XXXX(进程PID)		#正常结束sshd进程
kill -9 XXXX(进程PID)		#强制结束sshd进程

killall 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程。后面可以跟进程的名字或者用户名

用法:killall [选项] 进程名/用户名

killall -1 sshd			#重新加载sshd进程
killall -1 -u centos	#重新加载ubuntu用户的所有进程

pkill 命令和 killall 命令的用法相同,pkill可以按终端号踢出用户

用法:killall [选项] 进程名/终端号

pkill -15 vim			#按名称结束进程

w						#查看当前在线终端
pkill  -t tty2			#终止终端tty2上所有进程
pkill  -9 -t tty2		#终止终端tty2上所有进程并结束终端tty2

2.3、进程优先级 nice

相对优先级 sched_other
nice值越高:表示优先级越低,例如+19,该进程容易将CPU使用量让给其他进程
nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU

NI:实际nice级别
PR:将nice级别显示为映射到更大优先级列队,-20映射到0,+19映射到39

ps查看进程TS表示该进程使用的调度策略是相对优先级sched_other

nice -n -20 sleep 8000							#指定进程的nice值
nice -n -20 sleep 1000 systemctl start httpd	#进程启动时就指定nice值
renice -20 10089								#使用shell更改进程的nice值

2.4、作业控制 jobs

sleep		#sleep命令可以用来将目前动作延迟一段时间

sleep 2		#延迟2秒显示结果,等同于sleep 2s
sleep 2m	#延迟2分钟显示结果
sleep 2h	#延迟2小时显示结果
sleep 2d	#延迟2天显示结果

sleep 100	#前台运行sleep
sleep 100&	#后台运行sleep
ps aux |grep sleep		#查看sleep进程
root        7591  0.0  0.0  11460   996 pts/0    T    20:54   0:00 sleep 100
root        7593  0.0  0.0  11460  1004 pts/0    S    20:55   0:00 sleep 1000
root        7596  0.0  0.1  12184  2372 pts/0    S+   20:58   0:00 grep --color=auto sleep
jobs					#查看当前终端放入后台的工作
[1]+  已停止               sleep 100
[2]-  运行中                sleep 1000 &

^Z 暂时停止进程运行

符号T 表示停止
符号S 表示后台运行

& 表示后台符(只有放在最后才是后台符)

bg %1		#将进程转入后台运行,1表示作业号,作业号前面可以不加%
fg  %1		#将进程转入前台运行,1表示作业号,作业号前面可以不加%
kill %1		#将后台运行的进程关闭,1表示作业号,作业号前面需要加%

扩展:screen;screen --list;screen -r 进程号
xshell 远程连接后先使用screen(或者screen -S 命名),突然断网后再次连接使用screen --list查看进> 程号,再使用screen -r 进程号恢复进程

3、I/O重定向

标准输入:文件描述符0 对应键盘 只能读
标准输出:文件描述符1 对应屏幕 只能写
标准错误:文件描述符2 对应屏幕 只能写

ll /proc/$$/fd
总用量 0
lrwx------. 1 root root 64 11月  8 13:19 0 -> /dev/pts/0
lrwx------. 1 root root 64 11月  8 13:19 1 -> /dev/pts/0
lrwx------. 1 root root 64 11月  8 13:19 2 -> /dev/pts/0
lrwx------. 1 root root 64 11月  8 13:19 255 -> /dev/pts/0

3.1、输出重定向

>覆盖        >>追加

正确输出:1>(等价于>)、1>>(等价于>>)
错误输出:2>、2>>

date > date.txt								#输出重定向(覆盖)
date >> date.txt							#输出重定向(追加)
ls /jgjhgjg 2>error.txt						#错误输出重定向

ls /home/ /jgjhgjg &>list.txt				#正确和错误都输出到相同位置
ls /home/ /jgjhgjg >list.txt 2>&1			#正确和错误都输出到相同位置

ls /home/ /jgjhgjg >list.tt 2>/dev/null		#正确输出到list.txt,错误输出到空设备/dev/null
ls /home/ /jgjhgjg &>/dev/null				#正确和错误都输出到空设备/dev/null

利用重定向建立多行文件示例:
手动shell创建多行文件

cat >file <<EOF				#EOF 表示结束符
> 111
> 222
> 333
> 444
> EOF

脚本script创建多行文件

vim create_file.sh			#编辑脚本文件内容
cat >file.txt <<-EOF
111
222
333
444
555
EOF
[centos@centos ~]$ bash create_file.sh		#执行脚本
[centos@centos ~]$ cat file.txt				#查看文件内容
111
222
333
444
555

如果/dev/null设备被删除:
1、mknod -m 666 /dev/null c 1 3
“-m 666”表示增加权限 “c”表示设备类型 “1”代表主设备号 “3”代表从设备号
2、重启系统自动创建

3.2、输入重定向

标准输入:< 等价于 0<

mail					#查看当前用户邮件

mail centos				#给centos用户发送邮件
Subject:hello			#邮件主题
111						#邮件内容
222
333
.						#在新的一行输入.表示结束输入
EOT
mail -s "hello" centos < /etc/hostname		#将/etc/hostname里面的内容作为数据以邮件的方式发送给centos用户
cat < file.txt >cat.txt						#通过重定向file.txt作为输入设备,并输出重定向到cat.txt,最终实现了将 file.txt 文件中内容复制到 cat.txt 中。
vim at.txt					#创建并编辑新的文件
date						#文件内容:时间查看

at now +5 min <at.txt		#输入重定向:将文件内容作为数据输入至at now +5 min命令,结果显示时间为当前时间加5分钟

3.3、进程管道

将/etc/passwd中的用户按UID进行排序
sort -t":" -k3 -n /etc/passwd			#以:分隔,将第三列按数字升序
sort -t":" -k3 -n /etc/passwd -r		#降序
sort -t":" -k3 -n /etc/passwd |head		#只显示前10个

> -t:指定字段分隔符
> -k:指定列
> -n:按数值
> -r:降序
ps aux --sort=-%cpu |head -6					#统计出最占CPU的5个进程(前6行,首行为标签)
ps aux --sort=-%cpu |head -6 |grep -v '%cpu'    #过滤掉首行
awk -F:'{print $7}' /etc/passwd |sort |uniq -c	#统计出当前/etc/passwd中用户使用的shell类型

> -F:指定字段分隔符
> $7:第7个字段
ip a |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}'		#打印当前所有IP

df -P |grep '/$' |awk '{print $5}' |awk -F"%" '{print $1}'			#打印根分区已用空间百分比(仅打印数字)

tee 管道
tee命令可以在标准输出将数据输出到屏幕的同时重定向到文件中

ip a |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}' |tee -a ip.txt		#打印根分区已用空间百分比(仅打印数字)并且重定向到ip.txt
date |tee date.txt							#显示当前日期并重定向到date.txt
cat /etc/passwd | tee –a /passwd.txt		#查看文件的同时将文件重定向到另一个文件末尾(-a 表示追加)

4、磁盘分区 fdisk

Linux安装环境:minimal install(最小安装)
系统分区-添加挂载点:
1./				//系统根目录
2./swap			//交换分区/虚拟内存/当系统内存耗尽时将硬盘当内存使用防止程序随机杀死进程
3./boot			//存放linux系统启动文件,例如系统内核等
4./home			//用户家目录

主分区主要是用来启动操作系统的,它主要放的是操作系统的启动或引导程序,/boot分区最好放在主分区上;

扩展分区是不能使用的,它只是作为逻辑分区的容器存在的,先创建一个扩展分区,在扩展分区之上创建逻辑分区;

真正存放数据的是主分区和逻辑分区,大量数据都放在逻辑分区中。

fdisk -l /dev/sda		#查看磁盘是否被分区、分区是否满

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000e594d

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
[centos@centos ~]$ lsblk 		#查看分区
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1 1024M  0 rom

4.1、创建主分区

fdisk /dev/sdb															#创建分区
n		add a new partition												#新建分区
p		print the partition table										#显示分区信息
1		分区号 (1-4,默认 1)#设置分区号
Enter	起始 扇区 (2048-2097151,默认为 2048):							#起始扇区
        将使用默认值 2048    
+200M   Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151)#分区大小
		分区 1 已设置为 Linux 类型,大小设为 200 MiB
w		write table to disk and exit									#保存修改

4.2、创建扩展分区

fdisk /dev/sdb创建分区
n		add a new partition													#新建分区
e		print the partition table											#显示分区信息
3		分区号 (3-4,默认 3)#设置分区号
Enter	起始 扇区 (1026048-2097151,默认为 1026048)#起始扇区
		将使用默认值 1026048    
Enter	Last 扇区, +扇区 or +size{K,M,G} (1026048-2097151,默认为 2097151):	#分区大小
		分区 3 已设置为 Extended 类型,大小设为 523 MiB
w		write table to disk and exit										#保存修改

4.3、创建逻辑分区

fdisk /dev/sdb																#创建分区
n		add a new partition													#新建分区
l		print the partition table											#显示分区信息
Enter	起始 扇区 (1028096-2097151,默认为 1028096)#起始扇区
		将使用默认值 1028096    
+200M   Last 扇区, +扇区 or +size{K,M,G} (1028096-2097151,默认为 2097151)#分区大小
		分区 5 已设置为 Linux 类型,大小设为 200 MiB
w		write table to disk and exit										#保存修改

partprobe /dev/sdb: 手动更新分区表,为新设备创建设备文件

fdisk /dev/sdb: MBR分区,建议硬盘小于2T时使用
gdisk /dev/sdc: GPT分区,建议硬盘大于2T时使用(GPT分区只有主分区)

Disk label type:dos: MBR分区表(只有4个主分区,扩展分区,逻辑分区,例如:3主1扩展n逻辑)
Disk label type:gpt: GPT分区表(128个主分区)

4.4、创建文件系统(格式化)

mkfs.xfs /dev/sdb		#将sdb分区格化式为xfs文件系统
mkfs.ext4 /dev/sdc		#将sdc分区格化式为ext4文件系统

4.5、挂载 mount

临时挂载

mount -t ext4 -o acl /dev/sdb1 /mnt/sdk1	#挂载时指定文件系统类型为etx4,指定acl权限
mount -o noexec /dev/sdb1 /mnt/sdk1			#挂载时指定权限为无执行权限
mount -t xfs -o ro /dev/dsb1 /vm			#挂载时指定权限为只读

-o noexec:不允许二进制文件执行
-o nouser:禁止普通用户mount与umount
-o remount:重新挂载
-o ro:只读
-o rw:允许读写
-o user: 允许普通用户mount与umount
-o acl:访问控制列表
vim /etc/fastab			#通过编辑 /etc/fstab文件挂载

Linux常用命令整理(适合初学)_第7张图片
Linux常用命令整理(适合初学)_第8张图片

建议使用UUID进行挂载,尽量不使用设备名挂载(设备名是有可能会改变的)

blkid /dev/sdb1		#查看分区UUID
mount -a			#读取 /etc/fstab文件,将未挂载的文件进行挂载。相当于添加挂载点之后的重启

umount /dev/sdb1	#将sdb1的挂载点进行卸载(卸载时可以跟设备名也可以跟挂载点)

5、逻辑卷lvm管理

查看命令:

pvs		pvscan		pvdisplay

vgs		vgscan		vgdisplay

lvs		lvscan		lvdiisplay

5.1、创建逻辑卷

pvcreate /dev/sdd					#创建pv
pvs									#查看pv

vgcreate datevg /dev/sdd			#创建vg,指定vg名称
vgs									#查看vg

lvcreate -L 100M -n lv1 datevg		#创建lv1(-L后面跟空间大小100M),指定lv大小、名称
lvcreate -l 25 -n lv2 datevg		#创建lv2(-l后面跟LE数量,未指定的情况下默认1PE=4M),指定lv大小、名称
lvs									#查看lv
```bash
lvdisplay /dev/datevg/lv2			#查看lv2详细信息
  --- Logical volume ---
  LV Path                /dev/datevg/lv2
  LV Name                lv2
  VG Name                datevg
  LV UUID                1dHKZ8-VXEE-TgBs-0Wp0-yZU1-ZgO8-NZB3n1
  LV Write Access        read/write
  LV Creation host, time centos, 2022-10-09 19:51:28 +0800
  LV Status              available
  # open                 0
  LV Size                100.00 MiB	#LV大小
  Current LE             25			#LV占用的LE数量
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
lvremove /dev/datevg/lv2			#删除lv
vgremove datevg						#删除vg
pvremove /dev/sdd					#删除pv

5.2、为lv创建文件系统

mkfs.xfs /dev/datevg/lv1	#为lv1创建xfs文件系统

meta-data=/dev/vmvg/lv1		isize=512    agcount=4, agsize=6400 blks
			=				sectsz=512   attr=2, projid32bit=1
			=				crc=1        finobt=0, sparse=0
data		=				bsize=4096   blocks=25600, imaxpct=25
			=				sunit=0      swidth=0 blks
naming  =version 2			bsize=4096   ascii-ci=0 ftype=1
log			=internal log	bsize=4096   blocks=855, version=2
			=				sectsz=512   sunit=0 blks, lazy-count=1
realtime	=none			extsz=4096   blocks=0, rtextents=0
mkfs.ext4 /dev/datevg/lv2	#为lv2创建ext4文件系统

mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
    8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

5.3、挂载

mkdir /mnt/lv1		#创建挂载目录
mkdir /mnt/lv2

vim /etc/fstab		#编辑/etc/fstab文件挂载

mount -a			#/读取 /etc/fstab文件,将未挂载的文件进行挂载。相当于添加挂载点之后的重启
df -Th				#查看分区

5.4、vg管理

扩大vg

pvcreate /dev/sde			#创建pv
vgextend datevg /dev/sde	#将新建的pv加入到vg
vgs							#查看vg

减小vg,通常先做数据迁移

pvmove /dev/sdd /dev/sde    #将sdd的数据迁移到sde        
pvs							#查看pv
vgreduce datevg /dev/sdd	#将datevg下的sdd移除                           
pvs							#查看pv

lv扩容

lvscan								#查看lv
lvextend -L 800M /dev/datevg/lv1	#扩容到800M
lvscan								#查看lv
lvextend -L +100M /dev/datevg/lv2	#扩容100M(再加100M)
lvscan								#查看lv

vim /etc/fstab						#编辑/etc/fstab文件挂载
mount -a							#/读取 /etc/fstab文件,将未挂载的文件进行挂载。相当于添加挂载点之后的重启
xfs_growfs /dev/datevg/lv1			#将xfs类型的文件系统添加到逻辑卷
resize2fs /dev/datevg/lv2			#将ext4类型的文件系统添加到逻辑卷
df -Th

lv快照

lvcreate -L 5M -n lv2-snap -s /dev/datevg/lv2				#在/dev/datevg/lv2创建一个5M名叫lv2-snap的快照

lvscan														#查看lv

ACTIVE            '/dev/centos/root' [15.00 GiB] inherit
ACTIVE            '/dev/centos/swap' [<3.00 GiB] inherit
ACTIVE            '/dev/datevg/lv1' [800.00 MiB] inherit
ACTIVE   Original '/dev/datevg/lv2' [200.00 MiB] inherit	#原始卷
ACTIVE   Snapshot '/dev/datevg/lv2-snap' [8.00 MiB] inherit	#快照卷

mkdir /mnt/lv2-snap											#新建快照目录                                          
mount -o ro /dev/datevg/lv2-snap /mnt/lv2-snap				#临时进行挂载(ext4文件系统)

mount -o nouuid,ro /dev/datevg/lv2-snap /mnt/lv2-snap		#临时进行挂载(xfs文件系统,原因是xfs文件系统在挂载时不支持uuid)

6、交换分区swap管理

交换分区可以是基本分区、LVM、文件

free -m			#查看交换分区
swapon -s		#查看交换分区

6.1、使用分区作为交换分区

lsblk				#查看分区                                                              
fdisk /dev/sdd		#创建分区                                               
partprobe /dev/sdd	#手动更新分区表                                      
ll /dev/sdd*		#查看新的分区                                                   
brw-rw----. 1 root disk 8, 48 10月 10 14:40 /dev/sdd
brw-rw----. 1 root disk 8, 49 10月 10 14:40 /dev/sdd1

mkswap /dev/sdd1	#新的分区格式化                                 
blkid /dev//sdd1	#查看分区的UUID                                          
vim /etc/fstab		#挂载
/dev/mapper/centos-swap		swap	swap	defaults	0 0		#此处swap不能变更                                             
swapon -a			#激活所有的交换分区                                              
swapon -s			#查看交换分区
                                              
swapoff /dev/sdd1	#关闭交换分区   

6.2、使用逻辑卷作为交换分区

vgs										#查看vg
lvcreate -L 200M -n lv-swap datevg		#创建逻辑卷
mkswap /dev/datevg/lv-swap				#格式化逻辑卷
vim /etc/fstab 							#挂载
swapon -a								#激活
swapon -s								#查看

6.3、使用文件作为交换分区

df -Th											#查看磁盘空间情况
dd if=/dev/zero of=/swap.img bs=1M count=512	#创建swap文件
ll /swap.img -h									#查看swap文件
mkswap /swap.img								#将文件格式化
vim /etc/fstab									#挂载(建议使用“/swap.img挂载”
swapon -a										#激活交换分区(提示权限危险)
chmod 0600 /swap.img							#修改swap权限
swapon -a										#激活交换分区

7、链接管理 ln

7.1、软链接

软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
软链接可以 跨文件系统 ,硬链接不可以
软链接可以对一个不存在的文件名进行链接
软链接可以对目录进行链接

ln -s log2013.log link2013		#为log2013.log文件创建软链接link2013(如果log2013.log丢失link2013将失效)

7.2、硬链接

硬链接,以文件副本的形式存在。但不占用实际空间。
不允许给目录创建硬链接
硬链接只有在同一个文件系统(分区)中才能创建

ln log2013.log ln2013			#为log2013.log创建硬链接ln2013(log2013.log与ln2013的各项属性相同)

8、软件包管理

uname -m					#查看系统平台
x86_64

cat /etc/redhat-release		#查看系统版本
CentOS Linux release 7.9.2009 (Core)

yum repolist				#列出当前可用的源
源标识					源名称					状态
base/7/x86_64			CentOS-7 - Base			10,072
extras/7/x86_64			CentOS-7 - Extras		515
updates/7/x86_64        CentOS-7 - Updates		4,300
repolist: 14,887

常用命令

yum check-update			#列出所有可更新的软件清单
yum update					#更新所有软件
yum install <package_name>	#仅安装指定的软件
yum update <package_name>	#仅更新指定的软件
yum list					#列出所有可安裝的软件清单

删除软件包:

yum remove <package_name>	#仅卸载软件包本身,没有卸载依赖包

yum history					#查看安装历史动作(动作编号)
yum history info 9			#查看第9个动作是什么
yum history undo 9			#把第9个动作撤销掉(相当于删除软件包及其依赖包)

查找软件包:

yum list <package_name>		#从本地rpm数据库和yum源中查询
yum list installed			#从rpm数据库查看已装过的软件包 
yum info <package_name>		#查看软件包的详细信息

清除软件包缓存:

yum clean packages			#清除缓存目录下的软件包
yum clean headers			#清除缓存目录下的 headers
yum clean oldheaders		#清除缓存目录下旧的 headers

yum clean all				#清除缓存目录下的软件包及旧的 headers
or
yum clean packages; yum clean oldheaders
yum update --downloadonly	#下载update软件包但不安装

安装update软件并保留软件包
vim /etc/yum.conf			#编辑/etc/yum.conf文件
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1					#将此处的0更改为1
debuglevel=2

yum clean all				#清除缓存
yum -y install update		#安装update软件

9、调度任务管理 at、cron

9.1、一次性调度任务执行 at

yum -y install at		#安装at软件
systemctl start atd		#启动atd
systemctl enable atd	#设置开机自动启动atd
touch at.job			#创建任务文件
vim at.job				#编辑任务文件
at now +1min < at.job	#使用at调度任务执行(使用重定向进入任务输入)

9.2、周期性调度任务 cron

crond进程每分钟会处理一次计划任务,如果执行任务的时间错过了将不再执行
启动crond:systemctl status crond.service

9.2.1、用户级计划任务

计划任务存放的位置:/var/spool/cron/

列出当前用户的计划任务:crontab -l the jobs for the current user
删除当前用户的计划任务:crontab -r Remove all jobs for the current users
编辑当前用户的计划任务:crontab -e Edit jobs for the current user

拒绝username01、username02两个用户使用计划任务:

vim /etc/cron.deny
username01
username02

基本格式:

*     *   *   *   *   command
分   时  日  月  周   命令

第1列表示分钟0~59  每分钟用*或者 */1表示
第2列表示小时0~23
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

9.2.2、系统级计划任务

定义位置一: /etc/crontab
定义位置二: /etc/cron.d/

基本格式:

*     *    *    *   *     user-name  command to be executed
分   时  日  月  周   命令

第1列表示分钟0~59  每分钟用*或者 */1表示
第2列表示小时0~23
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的用户及命令
cat /etc/cron.d/0hourly		#查看计划任务文件
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

run-parts表示后面跟的是一个文件夹,计划任务会执行文件夹里面所有的计划任务

/etc/cron.hourly/0anacron
anacron进程由cron进程每分钟唤醒一次,防止某些计划任务被错过执行

/etc/crontab 是cron 的配置文件
/etc/anacrontab 是anacrontab 的配置文件

cat /etc/anacrontab
#period in days   delay in minutes   job-identifier       command
		1				5            cron.daily           nice run-parts /etc/cron.daily
		7				25           cron.weekly       	  nice run-parts /etc/cron.weekly
	@monthly			45           cron.monthly         nice run-parts /etc/cron.monthly

period in days		#执行周期、频率,天
delay in minutes	#延迟,分钟
job-identifier		#任务标识
command				#命令
系统执行anacron任务的记录

cat /var/spool/anacron/cron.daily
20221015
cat /var/spool/anacron/cron.weekly
20221010
cat /var/spool/anacron/cron.monthly
20221010
tail /var/log/cron	#cron执行日志

10、日志管理

rsyslogd–主要是采集记录系统相关的日志

常见的日志文件(系统、进程、应用程序)

/var/log/messages		#系统主日志文件
/var/log/secure			#认证、安全
/var/log/maillog		#邮件
/var/log/cron			#crond、at进程产生的日志
/var/log/dmesg			#和系统启动相关
/var/log/audit			#系统审计日志
/var/log/yum.log		#yum安装日志
w			#当前登录到该系统的用户
last		#查看最近登录的用户
lastlog		#所有用户的登录日志
rpm -qc rsyslog
/etc/logrotate.d/syslog			#和日志轮转(切割)相关
/etc/rsyslog.conf				#syslogd的主配置文件
less /etc/sysconfig/rsyslog		#syslogd相关文件
/etc/logrotate.conf				#轮转主配置文件
tree /etc/logrotate.d			#轮转文件
/etc/logrotate.d
├── bootlog
├── chrony
├── firewalld
├── httpd
├── syslog
├── vsftpd
├── wpa_supplicant
└── yum

11、修复文件系统 fsck

dump2fs /dev/sda1		#查看ext3/4文件系统
fsck.ext4 /dev/sda1		#修复ext3/4文件系统
xfs_info /dev/sda1		#查看xfs文件系统
xfs_repair				#修复xfs文件系统

修复损坏的文件系统(ext3、ext4)

fsck命令最简单的用例是修复无根损坏的ext3或ext4文件系统。

umout /dev/sdc1			#卸载设备
fsck -p /dev/sdc1		#修复文件系统<-p选项使fsck自动修复可以安全修复的任何问题而无需用户干预>
mount /dev/sdc1			#修复文件后安装分区

修复根文件系统(Root File System)

fsck无法检查正在运行的计算机上的根文件系统,因为无法将其卸载。
如果要检查或修复根文件系统,可以将fsck设置为在引导时运行,以恢复模式引导系统或使用实时CD。

在恢复模式下运行fsck

1、进入启动菜单,然后选择高级选项
2、选择恢复模式,然后选择“fsck”。
3、当提示你重新挂载根文件系统时,请选择是(Yes)。
4、完成后,恢复正常启动。

从实时发行版运行fsck

1、启动实时分发。
2、使用fdisk或parted查找根分区名称。
3、打开终端并运行:fsck -p /dev/sda1
4、完成后,重新启动实时分发并启动系统。

12、恢复文件 lsof

lsof |grep messages		#查看messages文件状态
rsyslogd  1104         root    7w      REG              253,0    487580   17276538 /var/log/messages
in:imjour 1104 1324    root    7w      REG              253,0    487580   17276538 /var/log/messages
rs:main   1104 1325    root    7w      REG              253,0    487580   17276538 /var/log/messages

cp -rf /var/log/messages /var/log/messages.bak		#备份文件
rm -rf /var/log/messages							#删除文件

lsof |grep messages		#查看messages文件状态
rsyslogd  1104         root    7w      REG		253,0    513266   17276538 /var/log/messages (deleted)
in:imjour 1104 1324    root    7w      REG		253,0    513266   17276538 /var/log/messages (deleted)
rs:main   1104 1325    root    7w      REG		253,0    513266   17276538 /var/log/messages (deleted)

ll /proc/1104/fd		#查看相应进程的文件描述符,此处是7
总用量 0
lr-x------. 1 root root 64 10月 10 17:23 0 -> /dev/null
l-wx------. 1 root root 64 10月 10 17:23 1 -> /dev/null
l-wx------. 1 root root 64 10月 10 17:23 2 -> /dev/null
lr-x------. 1 root root 64 10月 10 17:23 3 -> anon_inode:inotify
lrwx------. 1 root root 64 10月 10 17:23 4 -> socket:[22696]
lr-x------. 1 root root 64 10月 10 17:23 5 -> /run/log/journal/3fbcd53b9ed04e82bc80b58a10beb21e/system.journal
l-wx------. 1 root root 64 10月 10 17:23 6 -> /var/log/maillog
l-wx------. 1 root root 64 10月 10 17:23 7 -> /var/log/messages (deleted)
l-wx------. 1 root root 64 10月 10 17:23 8 -> /var/log/cron
l-wx------. 1 root root 64 10月 10 17:23 9 -> /var/log/secure

less /proc/1104/fd/7	#通过文件描述符查看文件的内容

cp /proc/1104/fd/7 /var/log/messages		#通过文件描述符恢复删除的文件
或者
less /proc/1104/fd/7 > /var/log/messages	#通过文件描述符恢复删除的文件

你可能感兴趣的:(linux,运维,服务器)