Linux
文件处理命令
-
-rw-r–r--
-代表二进制文件 d 目录 l 软链接文件
rw- r-- r-- 分别代表u所有者 g所属组 o其他人
r读 w写 x执行
-
mkdir -p 递归创建目录
-
cd … 返回上一级目录
-
rmdir /目录名 删除空目录
-
cp -r(复制目录) -p(保留文件属性) [原文件或者目录] [目标目录];复制的过程中是可以修改名称的。
-
mv [原文件或者目录] [目标目录名] 剪切文件 修改文件名称
-
rm -r( 删除目录)-f (强制删除) [文件或目录]
-
touch [文件名] 创建一个空文件
-
cat -n(显示行号) 文件名 显示文件内容 ; tac 文件名 倒序显示文件内容
-
more [文件名] 空格或f ->翻页 Enter -> 换行 q或者Q -> 退出
-
less [文件名] 同more差不多,可向上翻页
-
head -n(指定行数) [文件名] 显示文件前几行 ; tail 同理从末尾看 -f 是动态显示末尾信息
-
ln -s(创建软链接) [原文件] [目标文件]
软链接类似快捷方式,权限由原文件决定
硬链接相当于 cp -p + 同步更新 (原文件如果丢失硬文件也能继续访问)
硬链接的文件标识号和原文件是一样的,不能跨分区,硬链接不能针对目录使用
-
vim的常用命令
yy复制当前行 5yy复制五行 p复制
dd删除当前行 5dd删除五行
/需要查询的字符串 n查找下一个
G最末行 gg首行
正常模式下u撤销
开关机、重启命令
-
shutdown
- shutdown -h now 立即关机
- shutdown -h 1 1分钟后关机
- shutdown -r now 立即重启
-c 取消前一个关机命令 init 0 关机 # 引申系统运行级别 0 关机 1 单用户 2 不完全多用户,不含NFS服务 3 完全多用户 4 未分配 5 图形界面 6 重启 runlevel 查看运行级别
-
halt 直接使用等价于关机,直接断电尽量用shutdown
-
reboot 重启系统
init 6 重启
-
sync 把内存的数据同步到磁盘上
-
logout 退出
权限管理命令
-
chmod [{ugoa {±=} {rwx}}] [文件或目录]
[mode=421] [文件或目录]
-R 递归修改
u 所有者
g 所属组
o 其他人
a 所有人
授予权限部分可以用逗号分隔进行多次权限操作
chmod a+x,o-w /etc/issue chmod g=rwx /etc/issue # 权限的数字表示 r ---> 4 w ---> 2 x ---> 1 rwx rw- r-- 7 6 4 r: 读权限,可以查看文件内容,可以列出目录中的内容 w: 写权限,可以修改文件内容,可以在目录中创建、删除文件 x: 执行权限,可以执行文件,可以进入目录
-
chown
原意:change file ownership
语法:chown [用户] [文件或目录]
功能:该表文件或目录的所有者
局限:仅限管理员root使用该命令
chown jjw home #改变目录home的所有者为jjw
-
chgrp
原意:change file group ownership
语法:chgrp [用户组] [文件或目录]
功能:改变文件或目录的所属组
同chown类似
-
umask
原意:the user file-Creation mask
语法:umask -S(以rwx形式显示新建文件缺省权限)
功能:显示、设置文件的缺省权限
umask -S umask输出的值是022 #设置umask的值 需要同 rwx rwx rwx进行逻辑与运算 777 rwx rwx rwx 022 --- -w- -w- 755 rwx r-x r-x 故可以根据上述算法通过umask 022设置缺省权限
文件搜索
-
find
语法:find [搜索范围] [匹配条件]
find /etc -name init #在目录etc中查找文件init # *匹配任意字符 ?匹配单个字符 -iname 不区分大小写 find /etc -size +204800(单位是数据块,一个数据块0.5K) #在etc目录下查找大于100MB的文件 +n 大于 -n小于 n等于 find /etc -user test #在etc目录下查找所有者为test的文件 -group 根据所属组查找 find /etc -cmin -5 #在/etc下查找5分钟内被修改过属性的文件和目录 +5超过时间 -amin #访问时间 access -cmin #文件属性 change -mmin #文件内容 modify find /etc -size +163840 -a -size 204800 #在etc中查找大于80MB小于100MB的文件 -a 两个条件同事满足 -o 两个条件满足一个即可 -type 根据文件类型查找 f 文件 d 目录 l 软链接文件 find /etc -name inittab -exec ls -l {} \; #在/etc下查找inittab文件并显示其详细信息 -exec/ok {} \; # 对搜索结果执行操作 # 查看文件的节点信息 ls -i # 删除当前目录下i节点为16786636的文件 find . -inum 16786636 -exec rm {} \;
-
locate
功能:在文件资料库中查找文件
语法:locate inittab
# 更新文件资料库 updatedb # 查找 locate xl.md # 注意 locate 不能查找tmp目录下的文件
-
which
功能:搜索命令所在目录及别名信息
语法:which 命令
# 实例查找ls命令所在的目录 确定该命令是否是只能管理员使用 which ls
-
whereis
功能:搜索命令所在路径及帮助文档 路径
语法:whereis [命令名称]
-
grep
功能:在文件中搜索字串匹配的行并输出
语法:grep -iv [指定子串] [文件]
-i #不区分大小写 -v #排除指定子串 # 在install.log文件中搜素带有mysql的行 grep mysql /root/install.log
压缩解压命令
-
gzip
语法:gzip [文件] (压缩)
# gzip只能对文件进行压缩 # 不保留原文件
-
gunzip
语法:gunzip [压缩文件] (解压) or gzip -d [压缩文件]
-
tar
语法:tar [-zcf] [压缩后的文件名] [目录]
# 选项 -c 打包 就是把目录变成文件 -v 显示详细信息 -f 指定文件名 -z 打包同时压缩 # 可以对目录进行打包 # 注意参数的顺序!f要放最后面 -x 解包 -v 显示详细信息 -f 指定解压文件 -z 解压缩
-
zip
语法: 选项[-r] [压缩后文件名] [文件或目录]
-r 压缩目录 unzip解压缩
-
bzip2
语法:bzip2 [可选项] [文件]
-k 产生压缩文件后保留原文件 压缩文件(压缩大文件压缩比很可观) # 示例 bzip2 -k file tar -cjf file.tar.bz2 file #也是压缩 bunzip2 -k(是否保留压缩包) [压缩文件]
帮助命令
- man
用户管理
网络命令
-
last
查看目前与过去登录系统的用户信息
-
lastlog
检查特定用户上次登录的时间
lastlog -u +uid
-
traceroute
显示数据包到主机间的路径
#安装traceroute yum install -y traceroute traceroute www.baidu.com
-
netstat
显示网络相关信息
#选项 -t : TCP协议 -u : UDP协议 -l : 监听 -r : 路由 -n : 显示IP地址和端口号 #实例 netstat -tlun 查看本机监听的端口 netstat -an 查看本机所有的网络连接 netstat -rn 查看本机路由表
-
setup(redhat特有)
配置网络
centos下是nmtui
-
mount
挂载命令
语法: mount [-t 文件系统] 设备文件名 挂载点 例子: mount -t iso9660 /dev/sr0 /mnt/cdrom 步骤: 1.创建挂载点 mkdir /mnt/cdrom 2.挂载 mount -t iso9660(固定的,光盘的文件系统) /dev/sr0(设备文件名,系统指定) /mnt/cdrom -t 可以省略 umount /dev/sr0 卸载
Vim相关
Vim常用技巧
插入命令
a 在光标所在字符后插入
A 在光标所在尾行后插入
i 在光标所在字符前插入
I 在光标所在行行首插入
o 在光标下插入新行
O 在光标上插入新行
定位命令
set nu 设置行号
set nonu 取消行号
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
$ 移至行尾
0 移至行首
删除命令
x 删除光标所在处字符
nx 删除光标所在处后n个字符
dd 删除光标所在行
ndd 删除n行
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾内容
:n1, n2d 删除指定范围的行
复制和剪切命令
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p、P 粘贴当前光标所在行下或行上
替换或取消
r 取消光标所在处的字符
R 从光标所在处开始替换字符 按ESC键结束
u 取消上一步操作
搜索和搜索替换
/string 搜索指定的字符串 搜索时忽略大小写:set ic
n 搜索指定字符串的下一个出现的位置
:%s/old/new/g 全文替换指定字符串 g不询问 c询问
:n1,n2s/old/new/g 在一定范围内替换指定字符串
保存和退出
:w 保存修改
:W new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键 保存修改并退出
:q! 不保存修改退出
:wq! 保存修改并退出(文件所有者及root可以使用)
Vim使用技巧
导入命令执行结果
可以将其他文件的内容导入到当前编辑的文件 :r 需要导入的文件
可以在vim查看命令路径 :!which 命令
r !命令 可以直接将命令的执行结果导入到当前vim编辑的文件中
定义快捷键
map 快捷键 触发命令
实例
map (ctrl键)^P(ctrl + v + p) I#<ESC> ctrl+p键盘注释
map ctrl+b 0x 删除注释
连续行注释
:n1,n2s/^/#/g 连续行注释
:n1,n2s/^#//g 连续行取消注释
替换
ab mymail im_jjw@163.com
不同用户如果想要配置的快捷键或其他快捷的键位操作一直生效需要在 /root/.vimrc中进行编写快捷键或其他快捷方式,其他用户在/home/username/.vimrc
软件包
分类:源码包,二进制包
RPM包管理-RPM命令管理
rpm命名规则
httpd-2.0.15-15.el6.centos.1.i686.rpm
httd 软件包名
2.0.15 软件版本
15 软件发布的次数
el6.centos 适合的Linux平台
i686 适合的硬件平台
rpm rpm包扩展名
rpm包依赖性
树形依赖:a->b->c
环形依赖:a->b->c—>a
模块依赖:www.rpmfind.net(模块依赖查询网站)
rpm命令管理
1、包名和包全名
包全名:操作的包是没有安装的软件包的时候使用全包名。而且要注意路径
包名:操作已经安装的软件包的时候,使用包名。是搜索/var/lib/rpm中的数据库
2、rpm安装
rpm -ivh 包全名
i install 安装
v verbose 显示详细信息
h hash 显示进度
--nodeps 不检测依赖性
3、rpm升级
rpm -Uvh 包全名
U upgrade 升级
4、卸载
rmp -e 包名
e erase 卸载
--nodeps
5、查询
5.1、查询是否安装
rpm -q 包名
q query 查询
rpm -qa 查询所有的已经安装的rpm包
rpm -qa | grep httpd 查询所有的httpd
5.2、查询软件包详细信息
rpm -qi 包名
i information 软件详细信息
p package 查询为安装包信息
5.3、查询包中文件安装位置
rpm -ql 包名
l list 列表
p package 查询未安装包信息
5.4、查询系统文件属于哪个rpm包
rpm -qf 系统文件名
f file 查询系统文件属于哪个软件包
5.4、查询软件包的依赖性
rpm -qR 包名
R require 查询软件包的依赖性
p package 查询未安装的包信息
5.5、rpm包校验
rpm -V 已安装的包名
V verify 校验指定rpm包中的文件
5.6、rpm包中文件提取
rpm2cpio 包全名 | cpio -idv .文件的绝对路径
RPM包管理-yum在线管理
网络yum源
配置地址:/etc/yum.repo.d/CentOS-Base.repo
常用yum命令
yum list #查询所有可用的软件包列表
yum search 关键字 #搜索服务器上所有与关键字相关的包
yum -y install 包名 #安装
yum -y update 包名 #升级 不要使用yum -y update 不加包名使用
yum -y remove 包名 #卸载 尽量不要卸载,因为其会卸载掉另外的依赖包
yum软件组管理命令
yum grouplist #列出所有可用的软件组列表
yum groupinstall 软件组名 #安装指定软件组,组名可以由GroupList查询出来
yum groupremove 软件组名 #卸载指定软件组
rpm包安装的启动文件路径是/usr/lib/systemd/system
用户和用户组管理
用户配置文件-用户信息文件
用户信息文件:/etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
name:password:UID:GID:GECOS:directory:shell
GECOS:comment
第一字段:用户名称
第二字段:密码标志(x代表有密码)
第三字段:UID(用户ID)
0: 超级用户
1-499: 系统用户(伪用户)
500-65535: 普通用户
第四字段:GID(用户初始组ID)
第五字段:用户说明
第六字段:家目录
普通用户:/home/用户名
超级用户:/root/
第七字段:登录之后的shell
影子文件:/etc/shadow
root:$6$msT4X/RqvxU1ukUg$GsVgglaCnf7mZWBZmqq8qLUWxBdy8R/XOCpV5Abq2sjG4ykofYtKnCD7s6zGcMk9jypW4NX17Y.n7lClPutR9.:18611:0:99999:7:::
bin:*:18078:0:99999:7:::
daemon:*:18078:0:99999:7:::
adm:*:18078:0:99999:7:::
lp:*:18078:0:99999:7:::
sync:*:18078:0:99999:7:::
shutdown:*:18078:0:99999:7:::
第一字段:用户名
第二字段:加密密码
加密算法升级为SHA512散列加密算法
如果密码位未“!!”或“*”代表没有密码,不能登录
第三字段:密码最后一次修改日期
使用1970年1月1日作为标准时间,每过一天时间戳加1
第四字段:两次密码的修改间隔时间(同第三字段比较)
第五字段:密码有效期(和第三字段相比)
第六字段:密码修改到期前的警告天数(和第五字段相比)
第七字段:密码过期之后的宽限天数(和第五字段相比)
0代表过期后立即失效
-1代表密码永远不会失效
第八字段:账号失效时间
要用时间戳表示
第九字段:保留
# 时间戳换算
把时间戳换算为日期
date -d "1970-01-01 16066 days"
把日期换算成时间戳
date -d "2021/07/12" +%s 秒
echo $(($(date --date="2021/07/12" + %s)/86400+1))
组信息文件:/etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
第一字段:组名
第二字段:组密码标志
第三字段:GID
第四字段:组中附加用户
组密码文件:/etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
第一字段:组名
第二字段:组密码
第三字段:组管理员用户名
第四字段:组中附加用户
用户管理相关文件
用户的家目录
普通目录:/home/用户名/,所有者和所属组都是此用户,权限为700
超级用户:/root/,所有者和所属组都是root用户,权限为550
用户的邮箱
/var/spool/mail/用户名
用户模板目录
/etc/skel
# 新建用户时会将此文件夹下的文件复制到用户的家目录下
用户管理命令
用户添加命令useradd
useradd [选项] 用户名
选项:
-u UID 手工指定用户的UID号
-d 家目录 手工指定家目录
-c 用户说明 手工指定用户的说明
-g 组名 手工指定用户的初始组
-G 组名 指定用户的附加组
-s shell 手工指定用户的登录shell。默认是/bin/bash
用户默认值配置文件
/etc/default/useradd
GRUOP=100 #用户默认组
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数(/etc/shadow文件7字段)
EXPIRE= #密码失效时间 8字段
SHELL=/bin/bash #默认shell
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱
# 与用户密码相关
/etc/login.defs
修改用户密码
passwd [选项] 用户名
选项:
-S 查询用户密码的密码状态。仅root用户
-l 暂时锁定用户 仅root
-u 解锁用户。仅root
--stdin 可以通过管道符输出的数据作为用户的密码
修改用户信息
usermod [选项] 用户名
选项:
#-g没必要
-u UID 手工指定用户的UID号
-d 家目录 手工指定家目录
-c 用户说明 手工指定用户的说明
-G 组名 指定用户的附加组
-s shell 手工指定用户的登录shell。默认是/bin/bash
-L 锁定用户
-U 解锁用户
修改用户密码状态
chage [选项] 用户名
选项:
-l: 列出用户的详细密码状态
-d 日期 修改密码最后一次更改日期(shadow3字段)
-m 天数 两次修改密码间隔(4字段)
-M 天数 密码有效期(5字段)
-W 天数 密码过期前的警告天数(6字段)
-l 天数 密码过期后的宽限天数(7字段)
-E 日期 账号失效时间(8字段)
# 此命令是将密码修改日期归0了(shadow第三字段),这样这个用户一登陆就需要修改密码
chage -d 0 username
权限管理
ACL权限管理
查看和设定
# 查看ACL权限
getfacl 文件名
# 设定acl权限
setfacl 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认的acl权限
-k 删除默认的acl权限
-R 递归设定ACL权限
# 给用户设置acl权限
setfacl -m u:jjw3:rx /project/
# 给用户组设置acl权限
setfacl -m g:groupjjw:rwx /project/
最大有效权限与删除acl权限
# 最大有效权限
mask是用来指定最大的有效权限。如果我给用户赋予了ACL权限,是需要和mask的权限进行与操作才能得到用户真正的权限。
# 设置用户最大权限
setfacl -m m:rw /project/
# 删除指定用户的acl权限
setfacl -x u:用户名 文件名
# 删除指定用户组的acl权限
setfacl -x g:组名 文件名
# 会删除文件的所有acl权限
setfacl -b 文件名
默认ACL权限和递归ACL权限
递归ACL权限
- 递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
- setfacl -m u:用户名:权限 -R 目录名
默认ACL权限
- 默认ACL权限的作用是如果给父目录设定了默认的ACL权限,那么父目录中所有新建的子文件和目录都会继承父目录的ACL权限
- setfacl -m d:u:用户名:权限 目录名
文件特殊权限
SetUID
概述
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有x(执行)权限
命令执行者在执行该程序时获得该程序的属主身份(在执行程序的过程中变为该文件的属主)就是你是jjw,然后执行这个文件你就变成了root
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
示例
- passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码
[root@iZwz941bwczg55s0bukp8aZ ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1816 Jul 28 23:07 /etc/passwd
- cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
[root@iZwz941bwczg55s0bukp8aZ ~]# ll /etc/shadow
---------- 1 root root 1445 Jul 28 23:07 /etc/shadow
[root@iZwz941bwczg55s0bukp8aZ bin]# ll /usr/bin/passwd
-rwsr-xr-x 1 root root 33600 4月 7 2020 /usr/bin/passwd
设定SUID的方法
4代表SUID
chmod 4755 文件名
chmod u+s 文件名
注意:用户必须对这个文件具有x权限,否则如下那个S报错
-rwSr--r-- 1 root root 0 8月 1 23:04 jjw.txt
-rw-r--r-- 1 root root 0 8月 1 23:04 xl.txt
取消SUID的方法
chmod 755 文件名
chmod u-s 文件名
危险的SetUID
关键目录应严格控制写权限,如 '/', '/usr'
对系统默认的应该具有SetUID权限的文件作一列表,定时检查没有除此之外还设置了SetUID权限
SetGID
SetGID针对文件的作用
只有可执行的二进制程序才能设置SetGID权限
命令执行者要对该程序拥有x权限
命令在程序执行的时候,组身份升级为改程序的属组
SetUID权限只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
示例
[root@iZwz941bwczg55s0bukp8aZ tmp]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 48552 5月 11 2019 /usr/bin/locate
[root@iZwz941bwczg55s0bukp8aZ tmp]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 5997970 7月 8 16:07 /var/lib/mlocate/mlocate.db
- /usr/bin/locate是可执行的二进制程序,可以赋予SGID
- 执行用户test/other people 对/usr/bin/locate命令拥有执行权限
- 执行/usr/bin/locate命令时,组身份会提升为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询slocate.db数据库
- 命令结束,test/other people用户组身份返回为test/other people
设定SetGID
2代表SGID
chmod 2755 文件名
chmod g+s 文件名
取消SetGID
chmod 755 文件名
chmod g-s 文件名
SetGID针对目录的作用
普通用户必须对此目录拥有r和w权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
Sticky BIT
SBIT粘着位作用
- 粘着位目前只对目录有效
- 普通用户对该目录拥有w和x权限,及普通用户可以在此目录拥有写入权限
- 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下的所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有的文件,普通用户就算有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
dr-xr-xr-x 13 root root 0 5月 8 06:08 sys
drwxrwxrwt. 2 root root 35 8月 2 20:33 tmp 粘着位权限
设置与取消粘着位
- 设置粘着位
chmod 1755 目录名
chmod o+t 目录名
- 取消粘着位
chmod 755 目录名
chmod o-t 目录名 o -> other
文件系统属性chattr权限
- chattr命令格式
chattr [+-=] [选项] 文件或目录名
+ 增加权限
- 删除权限
= 等于权限
选项:
i: 如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;
如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件
a: 如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;
如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除。
- 查看文件系统属性
lsattr 选项 文件名
选项:
-a 显示所有文件和目录
-d 若目标仅是目录,仅列出目录本身的属性,而不是子文件的
sudo权限
- root把本只能由超级用户执行的命令赋予普通用户来执行
- sudo的操作对象是系统命令
sudo使用
visudo命令 实际上是修改/etc/sudoers文件
root ALL=(ALL) ALL
用户名 被管理的主机地址(访问主机)=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
组名 被管理的主机地址(访问主机)=(可使用的身份) 授权命令(绝对路径)
文件系统管理
回顾分区
- 主分区:总共最多只能分四个
- 扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。凡是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用
- 逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘Linux最多支持11个逻辑分区
fdisk -l
分区的设备名
主分区1 | /dev/sda1 |
---|---|
主分区2 | /dev/sda2 |
主分区3 | /dev/sda3 |
扩展分区 | /dev/sda4 |
逻辑分区1 | /dev/sda5 |
逻辑分区2 | /dev/sda6 |
逻辑分区3 | /dev/sda7 |
备注:1、2、3、4这几个分区号只能给主分区及扩展分区使用
文件系统
ext2 3 4
文件系统常用命令
文件系统查看命令
df 选项 挂载点
选项:
-a 显示所有文件系统信息,包括特殊文件系统,如/proc、/sysfs
-h 使用习惯单位显示容量,如KB、MB或者GB
-T 显示文件系统类型
-m 以MB为单位显示容量
-k 以KB为单位显示容量,默认是KB为单位
统计目录或文件大小
du 选项 目录或文件大小
选项:
-a 显示每个子文件的磁盘占用量,默认只统计子目录的磁盘占用量
-h 使用习惯单位显示磁盘占用量,如KB、MB、GB
-s 统计总占用量,而不列出子目录和子文件的占用量
du和df命令的区别
df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放)
du命令是面向文件的,只会计算文件或目录占用的空间
文件系统修复命令fsck
fsck 选项 分区设备文件名
选项:
-a:不用显示用户提示,自动修复文件系统
-y:自动修复。和-a作用一致,不过有些文件系统只支持-y
显示磁盘状态命令dumpe2fs
dumpe2fs 分区设备文件名
挂载命令
# 查询系统中已经挂载的设备,-l会显示卷标名称
mount [-l]
# 依据配置文件/etc/fstab的内容,自动挂载
mount -a
挂载命令格式
mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660(光驱)等文件系统
-L 卷标名:挂载指定卷标的分区、而不是安装设备文件名挂载
-o 特殊选项:可以指定挂载的额外选项
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TKHCrp4Z-1629685702671)(Linux.assets/image-20210806100131620.png)]
挂载光盘和U盘
挂载光盘
# 创建挂载点 media挂光盘 mnt挂u盘
mkdir /mnt/cdrom
# 挂载光盘
mount -t iso9660 /dev/cdrom /mnt/cdrom
||
mount /dev/sr0 /mnt/cdrom
卸载光盘
# 退出挂载目录再执行
umount 设备文件名或挂载点
umount /mnt/cdrom
挂载U盘
# 查看U盘设备文件名
fdisk -l
# 注意,Linux默认不支持NTFS文件系统
mount -t vfat /dev/sdb1(fdisk -l查询到的分区号) /mnt/usb/
支持NTFS文件系统
1、NTFS-3G插件
fdisk分区
fdisk命令分区过程
# 查询新硬盘
fdisk -l
# 使用fdisk命令分区(新硬盘首次分区的时候不需要加上sdb1、sdb2这样的)
fdisk /dev/sdb
# 重新读取分区表信息
partprobe
# 格式化分区 fdisk -l查看,扩展分区不能格式化
mkfs -t ext4 /dev/sdb1
# 建立挂载点并挂载
mkdir disk1
mount /dev/sdb1 /disk1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMFmV3a6-1629685702676)(Linux.assets/image-20210806105107846.png)]
分区自动挂载与fstab文件修复
自动挂载本质上是要写入/etc/fstab文件
第一字段:分区设备文件名或者UUID(硬盘通用唯一识别码)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区是否被被dump备份,0代表不备份,1代表备份,2代表不定期备份
第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高
mount -a
文件写错后系统重启将报错,进入后该文件为只读,不能修改,需要mount -o remount,rw / 就可以修改该文件
Shell基础
shell脚本的执行方式
1、echo输出命令
echo [选项] [输出内容]
选项:
-e 支持反斜线控制的字符转换
# 使用颜色输出abcd
echo -e "\e[1;31m abcd \e[0m"
![image-20210806114337836](Linux.assets/image-20210806114337836.png)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qW08Toto-1629685702679)(Linux.assets/image-20210806115326696.png)]
# 第一个脚本
#! /bin/bash
echo -e "JJW first Shell Script\n"
chmod u+x shell.sh
./shell.sh
bash shell.sh
如果shell脚本实在windows下编写完成的,由于unix和windows的回车符不同故会发生报错
dos2unix shell.sh
Bash的基本功能
历史命令
history [选项] [历史命令保存文件]
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令默认保存1000条,可以在环境变量配置文件中/etc/profile中修改
命令别名和常用快捷键
# 设置命令别名
alias vi='vim'
# 查看命令别名
alias
# 让别名永久生效 root是相应的用户
vim /root/.bashrc
# 删除别名
unalias 别名
![image-20210808163819011](Linux.assets/image-20210808163819011.png)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0ZJufxT-1629685702681)(Linux.assets/image-20210808164738123.png)]
输入输出重定向
标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
输出重定向
将原本要输出到屏幕上的内容输出到文件即为输出重定向
![image-20210808165547098](Linux.assets/image-20210808165547098.png)
# 将ll输出的内容写入到std.out文件(覆盖)
ll > std.out
# 将ll输出的内容写入到std.out文件(追加)
ll >> std.out
# 将lsp这个错误的输出到std.out文件(覆盖,2>不能有空格)
lsp 2>std.out
lsp 2>> std.out
![image-20210808171146292](Linux.assets/image-20210808171146292.png)
输入重定向
从文件获取输入内容
wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
[root@iZwz941bwczg55s0bukp8aZ tmp]# wc < stdout.out
2 9 71
多命令顺序执行与管道符
多命令执行顺序
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2; | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1||命令2 | 逻辑或当命令1执行不正确,则命令2才会执行 当命令1执行正确,则命令2不会执行 |
![image-20210808174732904](Linux.assets/image-20210808174732904.png)
管道符
命令1的正确输出作为命令2的操作对象
# 分页查看/etc目录内容
ll -a /etc/ | more
netstat -an | grep "ESTABLISHED"
# 在文件当中搜索符合条件的字符串
grep [选项] '搜索内容' 文件名
选项:
-i 忽略大小写
-n 输出行号
-v 反向查找
--color=auto 搜索出的关键字用颜色显示
通配符和其他特殊符号
通配符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q38pdIo0-1629685702683)(Linux.assets/image-20210809232801619.png)]
特殊符号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1v9rN6sM-1629685702684)(Linux.assets/image-20210809234127039.png)]
[root@iZwz941bwczg55s0bukp8aZ ~]# name=sc
[root@iZwz941bwczg55s0bukp8aZ ~]# echo $name
sc
[root@iZwz941bwczg55s0bukp8aZ ~]# echo '$name'
$name
[root@iZwz941bwczg55s0bukp8aZ ~]# echo "$name"
sc
[root@iZwz941bwczg55s0bukp8aZ ~]# echo '$(date)'
$(date)
[root@iZwz941bwczg55s0bukp8aZ ~]# echo "$(date)"
2021年 08月 09日 星期一 23:43:41 CST
Bash变量
变量分类
用户自定义变量
- 变量名可以由字母、数字和下划线组成但是不能以数字开头
- 变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型
- 变量用等号连接值,等号左右两边不能有空格
- 变量的值如果有空格,需要使用单引号或者双引号包括起来
- 在变量的值中,可以使用'\'转义符
- 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含 "$变量名" 或用${变量名}包含
aa=123
aa="$aa"456
aa="$aa"789
- 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
- 建议环境变量名大写
- 用户自定义变量
- 环境变量:这种变量中主要保存的是系统操作环境相关数据
- 位置参数变量:这种变量主要是用来向脚本当中传递参数或者数据的,变量名不能自定义,变量作用是固定的
- 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
# 变量调用
echo $var_name
# 变量查看
set
# 变量删除
unset name
环境变量
用户自定义变量只能在当前shell中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效。如果把环境变量写入到相应的配置文件,那么环境变量就会在所有的shell中生效
pstree 查看进程树
# 设置环境变量
#申明变量
export 变量名=变量值
# 查询变量
env
# 删除变量
unset 变量名
## 系统常见环境变量
- PATH:系统查找命令的路径
# PATH的变量叠加
PATH="$PATH":/home/jjw/shell
PS1:定义系统提示符的变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ojo5XZRw-1629685702685)(Linux.assets/image-20210810221919079.png)]
[root@iZwz941bwczg55s0bukp8aZ ~]# echo $PS1
[\u@\h \W]\$
位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1- 9 代 表 第 一 个 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一个到第九个参数,十以上的参数需要用大括号包含,如 9代表第一个到第九个参数,十以上的参数需要用大括号包含,如{10} |
$* | 代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 代表命令行中所有参数的个数 |
预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0 (具体哪个数,由命令自己来决定),则证明上一个命令执行不正确 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
|| 和 &&本质上就是判断$?的值
示例:
# 查找文件名为canshu*.sh的文件,&表示后台执行
find /root/jjw/shell -name canshu*.sh &
# 输出最后一次后台进程的进程号
echo $!
接收键盘输入
read [选项] [变量名]
选项:
-P "提示信息":在等待read输入时,输出提示信息
-t 秒数 read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数 read命令只接受指定的字符数,就会执行
-s 隐藏输入的数据,用于机密信息的输入
数值运算与运算符
declare声明变量类型
declare [+/-] [选项] 变量名
选项:
- 给变量设定类型属性
+ 取消变量的类型属性
-i 将变量声明为整数类型(Integer)
-x 将变量声明为环境变量
-p 显示指定变量被声明的类型
数值运算方式1
aa=11
bb=22
declare -i cc=$aa+$bb
echo $cc
数值运算方式2
# expr或者let数值运算工具
aa=11
bb=22
dd=$(expr $aa + $bb) # 注意+号两边必须要有空格
echo $cc
数值运算方式3常用
# $((运算式)) 或 $[运算式]
aa=1
bb=2
ff=$(($aa+$bb))
gg=$[$aa+$bb]
运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UP3FnOzC-1629685702687)(Linux.assets/image-20210811212227035.png)]
变量测试与内容替换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WFyB2ktv-1629685702689)(Linux.assets/image-20210811213336618.png)]
环境变量配置文件
source命令
source 配置文件
or
. 配置文件
配置文件
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
注:~代表用户家目录
配置文件执行先后顺序(输入了密码的过程)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oGOiLqxp-1629685702690)(Linux.assets/image-20210811215118590.png)]
/etc/bashrc->/etc/profile.d/*.sh->/etc/profile.d/lang.sh->/etc/sysconfig/i18n 没有登录的 no login shell
基础正则表达式
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lMcchBIu-1629685702691)(Linux.assets/image-20210813201611814.png)]
- "*"前一个字符匹配0次或任意多次
# 匹配所有内容,包括空白行
grep "a*" test_rule.txt
# 匹配至少包含一个a的行
grep "aa*" test_rule.txt
# 匹配至少包含两个个a的行
grep "aaa*" test_rule.txt
- "."匹配除了换行符外任意一个字符
# "s..d"会匹配在s和d这两个字母之间一定有两个字符的单词
grep s..d test_rule.txt
# 匹配在s和d之间有任意字符
grep "s.*d" test_rule.txt
# 匹配所有内容
grep ".*" test_rule.txt
- "^"匹配行首,"$"匹配行尾
# 匹配以大写字母M开头的行
grep "^M" test_rule.txt
# 匹配以小写字母n结尾的行
grep "n$" test_rule.txt
# 会匹配空白行
-n展示空白行
grep -n "^$" test_rule.txt
- "[]"匹配中括号中指定的任意一个字符,只匹配一个字符
# 只匹配said,或者soid
grep "s[ao]id" test_rule.txt
# 匹配任意一个数字
grep "[0-9]" test_rule.txt
# 匹配小写字母开头的行
grep "^[a-z]" test_rule.txt
- "\"转义符
# 匹配使用"."结尾的行
grep "\.$" rule_test.rule
- \{n\} 表示其前面的字符恰好出现n次
# 匹配a字符连续出现三次的字符串
grep "a\{3\}" test_rule.txt
# 匹配包含连续三个数字的字符串
grep "[0-9]\{3\}" test_rule.txt
- \{n,\} 表示其前面的字符出现不小于n次
# 匹配最少用连续三个数字开头的行
grep "^[0-9]\{3,\}[a-z]" test_rule.txt
- \{n,m\} 匹配其前面的字符至少出现n次,最多出现m次
匹配s和i之间最少有一个a,最多有3个a
grep "sa\{1,3\}i" test_rule.txt
字符截取命令
cut字段提取命令
cut [选项] 文件名
选项:
-f 列号: 提取第几列
-d 分隔符: 按照指定的分隔符分割列
cut -f 2 file
cut -f 2,4 file
# 指定分隔符
cut -d ":" -f 1,3 file
cut命令的局限
只能识别制表符或者指定的分隔符
printf命令
格式化输出命令
printf "输出类型输出格式" 输出内容
输出类型:
%ns: 输出字符串。n是数字指代输出几个字符
%ni: 输出整数。n是指代输出几个数字
%m.nf: 输出浮点数。m和n是数字,指代整数位和小数位。
如%8.2f代表共输出8位数,其中2位是小数
6位是整数
awk命令
awk '条件1{动作1}条件2{动作2}...' file_name
条件(Pattern):
一般使用关系表达式作为条件
x>10 判断变量x是否大于10
x>=10 大于等于
x<=10 小于等于
动作(Action)
格式化输出
流程控制语句
awk '{printf $2 "\t" $6 "\n"}' file_name
# 在数据读取之前先执行BEGIN后面的动作,仅执行一次
-- BEGIN
awk 'BEGIN{printf "This is a transcript\n"}{printf $2 "\t" $6 "\n"}' file_name
-- FS内置变量
# 由于awk是先读取第一行然后再执行,所以第一行是来不及做分割的
cat /etc/passwd | grep "/bin/bash" | awk '{FS=":"} {print $1 "\t" $2}'
cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"} {print $1 "\t" $2}'
# 同begin相反
-- END
awk 'END{print "This is End"} {print $1 "\t" $2}' file_name
sed命令
sed是一种几乎包含在所有Unix平台(包括linux)的轻量级流编辑器。sed主要用来将数据进行选取、替换、删除、新增
sed [选项] '[动作]' 文件名
选项:
-n:一般sed命令会把所有数据输出到屏幕,如果加入此选择, 则只会把经过sed命令处理的行输出到屏幕。
-e:允许对输入数据应用多条sed命令编辑
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕 输出
动作:
a \:追加,在当前行后添加一行或多行。如添加多行时,除最 后一行外,每行末尾都要用'\'代表数据未完结
c \:行替换,用c后面的字符替换原数据行,替换多行时,除 最后一行外,每行末尾都要用'\'代表数据未完结
i \:插入,在当前行前插入一行或多行,插入多行时,除最后 一行外,每行末尾都要用'\'代表数据未完结
d:删除指定的行
p:打印指定的行
s:字符替换,用一个字符串替换另一个字符串,格式为"行范 围s/旧子串/新字串/g"
-- 示例
# 输出文件第二行,此命令将会在输出第二行后把文件内容再次打印到屏幕上
sed '2p' file_name
sed -n '2p' file_name
# 删除第二行到第四行的数据,不修改文件
sed -n '2,4d' file_name
# 这个会删除文件内容
sed -ni '2,4d' file_name
# 在第二行后追加hello
sed '2a hello' file_name
# 在第二行前插入两行数据
sed '2i hello \ world' file_name
# 数据第二行替换
sed '2c No Such People' file_name
sed 's/旧字串/新字串/g' file_name
# 在第三行中,将74换成96
sed '3s/74/96/g' file_name
# 会写入文件
sed -i '3s/74/96/g' file_name
# 同时把Limng和Gao替换未空
sed -e 's/Liming//g;s/Gao//g' student
字符处理命令
sort
sort [选项] 文件名
选项:
-f 忽略大小写
-n 以数值型进行排序,默认使用字符串型排序
-r 反向排序
-t 指定分隔符,默认分隔符是制表符
-k n[,m]按照指定的字段排序范围。从第n字段开始,m字段结束
统计命令wc
wc [选项] 文件名
选项:
-l 只统计行数
-w 只统计单词数
-m 只统计字符数
条件判断式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ReoSqtRe-1629685702694)(Linux.assets/image-20210817210441291.png)]
判断格式
# 以下两种都为判断格式
test -e /root/install.log
[ -e /root/install.log ]
# 输出是否正常(上一条命令是否正常执行)
echo $?
两个文件之间的比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-epOycL7K-1629685702694)(Linux.assets/image-20210817211351376.png)]
判断格式同上
数字之间的判断
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VvK0nZOb-1629685702695)(Linux.assets/image-20210817211516673.png)]
字符串的判断
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R100Rh6F-1629685702697)(Linux.assets/image-20210817211601128.png)]
多重条件判断
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LmfMdT7t-1629685702698)(Linux.assets/image-20210817211845904.png)]
流程控制
if语句
单分支if语句
# 注意空格
if [ 条件判断式 ];then
program
fi
或者
if [ 条件判断式 ]
then
program
fi
示例
rate=$(df -h | grep /dev/vda1 | awk '{print $5}' | cut -d "%" -f 1)
echo "rate is ${rate}"
if [ $rate -ge 24 ];then
echo "Warning! /dev/vda1 is full"
fi
双分支if语句
# 注意空格
if [ 条件判断式 ]
then
program
else
program
fi
示例
# 备份mysql数据库
#!/bin/bash
# 同步系统时间
ntpdate asia.pool.ntp.org &> /dev/null
# 将当前系统时间按照"年月日"格式赋值给date
date=$(date +%y%m%d)
# 统计mysql数据库的大小
size=$(du -sh | grep /tmp/jjwxl.txt)
#!/bin/bash
date=$(date +%y%m%d)
size=$(du -sh | grep /tmp/jjwxl.txt)
if [ -d /tmp/bak ];then
echo "Date is $date" > /tmp/bak/bak.txt
echo "size is $size" >> /tmp/bak/bak.txt
cd /tmp/bak
tar -zcf bak_$date.tar.gz /tmp/jjwxl.txt /tmp/bak/bak.txt &>/dev/null
else
mkdir /tmp/bak
echo "Date is $date" > /tmp/bak/bak.txt
echo "size is $size" >> /tmp/bak/bak.txt
cd /tmp/bak
tar -zcf bak_$date.tar.gz /tmp/jjwxl.txt /tmp/bak/bak.txt &>/dev/null
fi
多分支if语句
if [ 条件判断式1 ]
then
condition1,exec program1
elif [ 条件判断式2 ]
then
condition2,exec program2
...more conditon
else
最后执行
fi
case语句
case $varliable_name in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
...其他分支
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for循环
# 语法1
for 变量 in 值1 值2 值3 ...
do
program
done
# 语法2
for ((初始值;循环控制条件;变量变化))
do
program
done
示例
# 语法1示例
#!/bin/bash
cd /home/jjw/shell
ls *.sh > shell.log
for name in $(cat shell.log)
do
echo $name
done
# 语法2示例
#!/bin/bash
s=0
for (( i=1;i<=100;i=i+1 ))
do
s=$(( $s+$i ))
done
echo "The sum of 1+2+...+100 is : $s"
while循环和util循环
while循环
while [ 条件判断式1 ]
do
program
done
#!/bin/bash
i=1
result=0
while [ $i -le 100 ]
do
result=$(( $result+$i ))
i=$(( $i+1 ))
done
echo "result is $result"
until循环
同while相反,只要判断条件式不成立则进行循环,一旦循环条件成立,则终止执行
until [ 条件判断式1 ]
do
program
done
#!/bin/bash
i=1
result=0
until [ $i -gt 100 ]
do
result=$(( $result+$i ))
i=$(( $i+1 ))
done
echo "result is $result"
Linux服务管理
分为RPM包默认安装的服务和源码包安装的服务
RMP包默认安装的服务
独立的服务
基于xinetd服务
源码包安装的服务
# 查询已经安装的RPM服务
chkconfig --list or systemctl list-unit-files
# 源码包安装的位置一般是在/usr/local下
RPM服务的管理
RPM包安装服务的位置
RPM安装服务和源码包安装服务的区别就是安装位置的不同
源码包安装在指定的位置,一般是/usr/local
RPM包安装在默认位置中
注:centos7启动脚本放在了/usr/lib/systemd/system目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VgCvmofU-1629685702706)(Linux.assets/image-20210817235023107.png)]
独立服务的启动
centos 7
systemctl 独立的服务名 start|stop|restart|status
# 设置开机自启动
https://www.cnblogs.com/rh-fernando/p/12009304.html
基于xinetd(超级守护进程)的服务管理
系统管理
进程管理
进程查看
进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源
查看系统中所有进程
# 查看系统中所有进程,使用BSD操作系统格式
ps aux
# 查看系统中所有进程,使用linux标准命令格式
ps -le
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lCza06CQ-1629685702706)(Linux.assets/image-20210818003909542.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41q6NSzc-1629685702707)(Linux.assets/image-20210818003941854.png)]
查看系统健康状态
top [选项]
选项:
-d 秒数 指定top命令每隔几秒更新。默认3秒
在top命令的交互模式下可以使用的命令
?或h: 显示交互模式的帮助
P: 以CPU使用率排序,默认是此项
M: 以内存使用率排序
N: 以PID排序
q: 退出top
第一行信息
![image-20210818004511767](Linux.assets/image-20210818004511767.png)
第二行进程信息
![image-20210818004600285](Linux.assets/image-20210818004600285.png)
第三行cpu信息
![image-20210818004623492](Linux.assets/image-20210818004623492.png)
第四行物理内存
![image-20210818004802324](Linux.assets/image-20210818004802324.png)
第五行交换分区
![image-20210818004835292](Linux.assets/image-20210818004835292.png)
查看进程树
pstree [选项]
选项:
-p 显示进程的pid
-u 显示进程的所属用户
终止进程
kill命令
# 查看可用的进程信号
kill -l
# 重启进程
kill -1 pid
# 强制杀死进程
kill -9 pid
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1XFvohnu-1629685702708)(Linux.assets/image-20210819103307991.png)]
killall命令
killall [选项][信号] 进程名
# 按照进程名称杀死进程
选项:
-i: 交互式,询问是否要杀死某个进程
-I: 忽略进程名的大小写
注:
信号同kill相同
pkill命令
# 按照进程名终止进程
pkill [选项][信号] 进程名
选项:
-t 终端号 按照终端号踢出用户
注:
信号同kill相同
[root@iZwz941bwczg55s0bukp8aZ ~]# w
10:43:03 up 103 days, 12:34, 2 users, load average: 0.18, 0.24, 0.11
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 117.176.157.79 10:34 0.00s 0.26s 0.00s w
root pts/2 117.176.157.79 10:34 8:39 0.62s 0.61s top
w查看当前登录用户
# 按照终端号踢出用户
pkill -9 -t pts/0
进程管理的作用
- 判断服务器健康状态
- 查看系统中所有进程
- 杀死进程
工作管理
把进程放入后台
# 第一种在命令后加一个&符,此种方法放入后台命令还在执行
tar -zcf etc.tar.gz /etc &
# 第二种在命令执行的过程中按下ctrl+z快捷键,放入后台后暂停执行
查看后台的工作
jobs [选项]
选项:
-l:显示工作的PID
注:
“+”代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。“-”代表倒数第二个放入后台的工作
将后台暂停的工作恢复到前台执行
fg %工作号
参数:
%工作号:%可以省略,但是注意工作号和pid的区别
将后台暂停的工作恢复到后台执行
bg %工作号
注意:
后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行
系统资源查看
vmstat命令监控系统资源
vmstat [刷新延时 刷新次数]
vmstat 1 3
dmesg开机时内核检测信息
dmesg
dmesg | grep -i cpu
free查看内存使用状况
free [选项]
选项:
-b 以字节为单位显示
-k 以KB为单位显示,默认就是以KB为单位显示
-m 以MB为单位显示
-g 以GB为单位
[root@iZwz941bwczg55s0bukp8aZ ~]# free -m
total used free shared buff/cache available
Mem: 1816 840 191 2 784 794
Swap: 0 0 0
缓存:针对读,加速数据从硬盘读取,现代cpu都是三级缓存,每一级都比上一级的读取速度快一个指数级
缓冲:针对写,加速数据写入到硬盘,向硬盘写数据时先将数据写进buffer,然后在落盘,增加写速度
查看cpu信息
cat /proc/cpuinfo
uptime命令
显示系统的启动时间和平均负载,也就是top命令的第一行。w命令也可以看到这个数据
查看系统与内核相关信息
uname [选项]
选项:
-a 查看系统所有相关的信息
-r 查看内核版本
-s 查看内核名称
判断当前系统的位数
file /bin/ls
查看linux的发行版本
lsb_release -a
列出进程打开或使用的文件信息
list open file???
lsof [选项]
选项:
-c 字符串 只列出以字符串开头的进程打开的文件
-u 用户名 只列出某个用户的进程打开的文件
-p PID 列出某个pid进程打开的文件
系统定时任务
crond服务管理与访问控制
systemctl restart crond.service
## 记得要加入开机自启动
用户的crontab设置
crontab [选项]
选项:
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
编写一个定时任务的步骤
# 进入crontab编辑界面,会打开vim编辑定时任务
crontab -e
# 输入
* * * * * 执行的任务
- 五个*的含义
第一个 一个小时中的第几分钟 范围0-59
第二个 一天当中的第几个小时 0-23
第三个 一个月中的第几天 1-31
第四个 一年当中的第几个月 1-12
第五个 一周当中的星期几 0-7(0和7都代表星期日)
![image-20210821123329821](Linux.assets/image-20210821123329821.png)
![image-20210821123837969](Linux.assets/image-20210821123837969.png)
示例
*/5 * * * * /bin/echo "111" >> /tmp/test.txt
5 5 * * 2 /sbin/shutdown -r now
0 5 1,10,15 * * /root/sh/autobak.sh
日志管理
日志管理简介
查看rsyslog是否启动
ps aux | grep rsyslogd
systemctl list-unit-files | grep rsyslod
常见日志的作用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L63nbNgq-1629685702709)(Linux.assets/image-20210821130723946.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NugOEqna-1629685702710)(Linux.assets/image-20210821130723946.png)]
tty本地终端,pts远程终端
rsyslogd日志服务
日志文件格式
- 基本日志格式包含以下四列
事件产生的时间
发生事件的服务器的主机名
产生事件的服务名或程序名
事件的具体信息
/etc/rsyslog.conf配置文件
# 服务名称[连接符号]日志等级 日志记录位置
authpriv.* /var/log/secure
# 意思为认证相关的服务.所有的日志等级记录在/var/log/secure日志中
服务名称列表
![image-20210821132356630](Linux.assets/image-20210821132356630.png)
连接符号
![image-20210821132506997](Linux.assets/image-20210821132506997.png)
日志等级
![image-20210821134733540](Linux.assets/image-20210821134733540.png)
日志轮替
logrotate配置文件
位置:/etc/logrorate.conf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rB6REg2z-1629685702710)(Linux.assets/image-20210821135929930.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uPrgVqto-1629685702711)(Linux.assets/image-20210821135929930.png)]
将apache日志加入轮替示例
vim /etc/logrotate.conf
/usr/local/apache2/logs/access_log {
daily
create
rotate 30
}
logrotate命令
logrotate [选项] 配置文件名
选项:
如果此命令没有选项,则会按照配置文件中的条件进行日志轮替
-v: 显示日志轮替过程。加了-v选项,会显示日志轮替的过程
-f: 强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中的所有日志进行轮替
启动管理
Centos启动管理
系统运行级别
运行级别 | 含义 |
---|---|
0 | 关机 |
1 | 单用户模式,可以类比为windows的安全模式,主要用于系统修复 |
2 | 不完全的命令行模式,不含NFS服务 |
3 | 完全的命令行模式,就是标准字符界面 |
4 | 系统保留 |
5 | 图形界面 |
6 | 重启动 |
运行级别命令
# 查看系统运行级别命令
runlevel
# 改变运行级别命令
init 运行级别
系统默认运行级别
# 系统开机后进入哪个运行级别
vim /etc/inittab
id:3:initdefault:
# CentOS7取消
系统启动过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jGbyxtCR-1629685702711)(Linux.assets/image-20210821202946982.png)]
启动引导程序grub
系统修复模式
备份与恢复
Linux需要备份的数据
/root/目录
/home/目录
/var/spool/mail/目录
/etc/目录
安装服务的数据
- apache需要备份的数据
配置文件
网页主目录
日志文件
- mysql需要备份的数据
源码包安装的mysql:/usr/local/mysql/data
rpm安装的:/var/lib/mysql
备份策略
完全备份:把所有需要备份的数据全部备份,也可以直接备份硬盘
增量备份:
差异备份:
dump和restore命令
dump命令
dump [选项] 备份之后的文件名 原文件或目录
选项:
-level 0-9这10个备份级别
-f 文件名 指定备份之后的文件名
-u 备份成功后,把备份时间记录在/etc/dumpdatas文件
-v 显示备份过程中更多的输出信息
-j 调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式
-w 显示允许被dump的分区的备份等级及备份时间