命令终端字段含义介绍
Linux系统基本概念
Linux系统而言:
多用户的系统:允许同时有很多个用户登录系统,使用系统里的资源
多任务的系统:允许同时执行多个任务
严格区分大小写:命令,选项,参数,文件名,目录名都严格区分大小写
一切皆文件:硬件设备(内存、CPU、网卡、显示器、硬盘等等)都是以文件的形式存在的
不管是文件还是目录都是以倒挂的树形结构,存在于系统的“/”根目录下,根目录是Linux系统的起点
对于Linux系统而言,目录/文件没有扩展名一说,扩展名如:.sh(脚本文件) .conf(配置文件) .log(日志文件) .rpm(软件包).tar(压缩包)是易于用户方便识别
没有提示就是最好的提示(成功了)
命令行编辑技巧
键盘上下键调出历史命令
Ctrl + c:取消当前执行的命令
Ctrl + l:清屏
tab建自动补齐:可补齐命令、选项、参数、文件路径、软件名、服务名
Ctrl + a:将当前光标移动至行首
Ctrl + e:将当前光标移动至行尾
Ctrl + u 清空至行首
Ctrl + w 删除一个单词
exit:退出系统
命令行一般命令格式
命令字 [-选项…] [参数…]
命令字:命令本身(功能)
选项:调整命令功能的
短选项:-l -a -d -h(单个字符),短选项可以合并使用:-lad -lh
长选项:–help(单词),长选项通常是不能合并使用的
参数:命令的执行对象,文件/目录/程序等
[]:可选的
…:可以同时有多个选项或参数
学习方法
遇到问题:前期不要求你们有排错的能力
思考自己能不能决绝:百度、Google、最后在问老师
主动学习的爱好,不要被动学习
不要死磕一个技术点,低头学习的时候不要忘了抬头看路
Linux系统辨别目录与文件的方法
蓝色表示目录(windows系统里的文件夹)
白色表示文件
浅蓝色表示链接文件(类似于windows系统的快捷方式)
绿色表示可执行文件(如脚本,命令程序文件)
红色表示压缩文件
黄色表示设备文件(硬盘、键盘、鼠标、网卡、CPU硬件设备都是以文件的形式存在的)
红色闪动文件——>表示链接文件不可用
ls 查看目录/文件命令
ls命令(英文全拼:list):用于查看目录下内容及目录和文件详细属性信息
命令格式:ls [-选项…] [参数…]
常用选项:
-a 显示目录下所有内容,包含隐藏的内容
-l 以长格式显示目录下的内容及详细属性
-h 人性化显示目录下内容大小(kB、MB、GB)
-d 仅显示目录本身而不显示目录下的内容
-i 查看inode号(系统任何的文件或目录都有一个唯一的编号)
-R:递归查看目录下所有内容(从头到尾)
Linux 系统文件类型
d 目录:
l 链接文件
b 跨设备文件
c 字符设备文件
p 管道设备文件
s 套接字
Linux 系统下的归属关系
在Linux系统下,文件给用户分成了三类
u 所有者:文件或目录的拥有者,拥有者的权限通常是最大的
g 所属组:文件或目录属于哪一个组,所属组的权限略微比所有者小
o 其他人:既不是文件或目录的所有者,也不属于文件或目录组内的成员,其他人的权限通常最小的权限
ls命令示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 [root@localhost ~] [root@localhost ~] bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] -rw-r--r--. 1 root root 1831 3 月 13 17 :45 initial-setup-ks.cfg drwxr-xr-x. 2 root root 6 3 月 13 17 :47 公共 -:文件类型1 :代表文件的引用次数,只针对与做了硬连接的文件才有效 root:文件的所有者 root:文件的所属组1831 :文件的大小,默认以字节为单位显示大小3 月 13 17 :45 :文件最近一次的修改时间 initial-setup-ks.cfg:文件名 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] lrwxrwxrwx. 1 root root 7 3 月 13 17 :15 bin -> usr/bin [root@localhost ~] [root@localhost ~] 文件:"hello.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:fd00h/64768d Inode:33575020 硬链接:1 权限:(0644 /-rw-r--r--) Uid:( 0 / root) Gid:( 0 / root) 环境:unconfined_u:object_r:admin_home_t:s0 最近访问:2021 -03 -14 16 :38 :14.349861770 +0800 最近更改:2021 -03 -14 16 :38 :14.349861770 +0800 最近改动:2021 -03 -14 16 :38 :14.349861770 +0800 创建时间:-
Linux 基本权限的类别
r 读取 w 写入 x 执行 - 没有权限
权限顺序:rwxrwxrwx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@localhost ~] -rw-r--r--. 1 root root 1831 3月 13 17:45 initial-setup-ks.cfg -:文件类型 rw- r-- r--:所有者u、所属组g、其他人o的权限 u g o 1:代表文件的引用次数,只针对与做了硬连接的文件才有效 root:文件的所有者 root:文件的所属组 1831:文件的大小,默认以字节为单位显示大小 3月 13 17:45:文件最近一次的修改时间 initial-setup-ks.cfg:文件名 [root@localhost ~] dr-xr-x---. 14 root root 4096 3月 14 16:38 /root [root@localhost ~] 33574979 anaconda-ks.cfg 33574984 initial-setup-ks.cfg 33575035 模板 33575036 图片 17470701 下载 17470702 音乐 33575020 hello.txt 51909391 公共 51909392 视频 3204374 文档 33575017 新建文件夹.zip 3204373 桌面 [root@localhost ~] 33575020 hello.txt [root@localhost ~] 16777281 /etc
课后练习
1.命令行以$作为结尾代表什么含义?
普通用户
2.请写出Linux系统一般的命令格式?
命令字 [-选项…] [参数…]
3.在Linux系统下,如何辨别目录与文件及其他的文件?
白色:文件
蓝色:目录
浅蓝色:链接文件
绿色:可执行文件
红色:压缩文件
红色带闪动的文件:链接文件不可用
黄色:设备文件(硬盘,网卡,CPU,鼠标,键盘)
4.如何查看一个文件的详细属性?
ls -l 文件名
5.如何查看一个目录本身的详细属性?
ls -dl 目录名字
6.查看文件详细属性,并以KB、MB、GB的方式显示文件的大小?
ls -lh 文件名
7.如何查看一个文件的inode号?
ls -i 文件名
8.请写出Linux下文件和目录的三个归属关系?
u 所有者
g 所属组
o 其他人
9.请写出Linux下基本权限的表示方式?
r:读取,w写入,x执行
10.命令行以#作为结尾代表什么含义?
超级管理员
mkdir 创建目录命令
mkdir(英文全拼:make directory)用于创建新目录
命令格式:mkdir [-选项] 目录名
常用选项:
注意事项:
目录还是文件的名字,除了以“/”以外的任意名称,“/”根目录,路径分隔符
文件或目录的名字长度不能超过255个字符
mkdir命令示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] abc [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] rh student [root@localhost ~]mkdir: 无法创建目录"/opt/xx/oo" : 没有那个文件或目录 [root@localhost ~]mkdir: 无法创建目录"/opt/a/b/c/d" : 没有那个文件或目录 [root@localhost ~] [root@localhost ~] rh student xx [root@localhost ~] [root@localhost ~] a rh student xx [root@localhost ~]/opt/a : b/opt/a /b: c /opt /a/b /c: d
cd 切换工作目录命令
cd(英文全拼:change directory)切换目录
命令格式:cd [-选项] [目录名]
提示:目录名称可以是绝对路径或相对路径,如果不指定目录名称,则切换到当前用户的家目录~
常用快捷操作:
~ 表示为家目录-
. 表示为当前目录
… 表示上一级目录
-可在两路径之间来回切换
pwd 打印当前所在目录命令
pwd(英文全拼:print work directory)打印当前所在的工作目录,执行pwd命令后,可显示当前所在的工作目录的绝对路径名称
命令格式:pwd [-选项]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 [root@localhost ~]# cd /opt/a/b/c/d #打印当前所在目录绝对路径 [root@localhost d]# pwd /opt/a/b/c/d#切换到用户家目录 [root@localhost d]# cd ~ [root@localhost ~]# pwd /root [root@localhost ~]# cd /opt/a/b/c/d [root@localhost d]# pwd /opt/a/b/c/d [root@localhost d]# cd [root@localhost ~]# pwd /root [root@localhost ~]# cd /bin [root@localhost bin]# pwd /bin [root@localhost bin]# cd /boot [root@localhost boot]# pwd /boot [root@localhost boot]# ls [root@localhost boot]# cd /dev [root@localhost dev]# pwd /dev [root@localhost dev]# ls [root@localhost dev]# cd /etc [root@localhost etc]# pwd /etc [root@localhost etc]# ls [root@localhost etc]# ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var#“.”表示当前所在目录,对于cd命令而言作用不大 [root@localhost etc]# cd . [root@localhost etc]# cd /opt/a/b/c/d [root@localhost d]# pwd /opt/a/b/c/d#“..”切换到当前目录的上一级目录 [root@localhost d]# cd .. [root@localhost c]# pwd /opt/a/b/c [root@localhost c]# cd .. [root@localhost b]# pwd /opt/a/b [root@localhost b]# cd .. [root@localhost a]# cd .. [root@localhost opt]# pwd /opt [root@localhost opt]# cd .. [root@localhost /]# cd .. [root@localhost /]# cd [root@localhost ~]# ls [root@localhost ~]# cd /opt/a/b/c/d [root@localhost d]# pwd /opt/a/b/c/d#"-" 可在两个路径之间来回切换 [root@localhost d]# cd /etc/yum [root@localhost yum]# cd - /opt/a/b/c/d [root@localhost d]# pwd /opt/a/b/c/d [root@localhost d]# cd - /etc/yum [root@localhost yum]# cd - /opt/a/b/c/d [root@localhost d]# cd - /etc/yum
绝对路径与相对路径
绝对路径:以/(根)为起点,到达你想去的目标目录称为绝对路径
相对路径:以当前路径为起点,到达你想去的目标目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@localhost ~] [root@localhost d]/opt/a /b/c /d #切换到上一级目录 [root@localhost c]# cd .. [root@localhost b]# pwd /opt /a/b [root@localhost b] c [root@localhost b] [root@localhost c]/opt/a /b/c [root@localhost c] [root@localhost b] [root@localhost a] [root@localhost opt]/opt
rmdir 删除空目录命令
rmdir(英文全拼:remove directory)删除空目录
命令格式:rmdir [-选项] 目录名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #rmdir只能删除空目录,如果目录下存在数据无法删除 [root@localhost ~]# rmdir /opt/ a rmdir: 删除 "/opt/a" 失败: 目录非空 [root@localhost ~]# ls -R /opt/ a/opt/ a: b/opt/ a/b: c/opt/ a/b/ c: d/opt/ a/b/ c/d: [root@localhost ~]# rmdir /opt/ a/b/ c/d [root@localhost ~]# ls -R /opt/ a/opt/ a: b/opt/ a/b: c/opt/ a/b/ c: [root@localhost ~]# rmdir /opt/ a/b/ c [root@localhost ~]# ls -R /opt/ a/b/opt/ a/b: [root@localhost ~]# rmdir /opt/ a/b [root@localhost ~]# ls -R /opt/ a/opt/ a: [root@localhost ~]# rmdir /opt/ a [root@localhost ~]# ls /opt rh student xx [root@localhost ~]# rmdir /opt/ rmdir: 删除 "/opt/" 失败: 目录非空
touch 创建文件命令
touch 命令用于创建新的空白文件
命令格式:touch [-选项] 文件名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] rh student test1 test2 test3 xx [root@localhost ~] mkdir: 无法创建目录"test" : 文件已存在 [root@localhost ~] [root@localhost ~] rh student test1 test2 test3 xx [root@localhost ~] rh student test1 test2 test3 xx [root@localhost ~] oo [root@localhost ~] /opt/test1 [root@localhost ~] ls: 无法访问/opt/test1/ : 不是目录
cp 复制命令
cp(英文全拼:copy file)用于复制文件或目录,cp命令在复制时也可修改目录或文件名字
命令格式:cp [-选项] 源文件或目录 目标目录
常用选项:
-p 保留源文件属性不变(如:修改时间、归属关系、权限)
-r 复制目录(包含该目录下所有的子目录和文件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #复制当前目录文件到/opt目录(相对路径方式复制) [root@localhost ~]# cp t1 /opt/ [root@localhost ~]# ls /opt rh student t1 test1 test2 test3 xx#复制文件到/opt目录(绝对路径方式复制) [root@localhost ~]# cp /root/t2 /opt [root@localhost ~]# ls /opt rh student t1 t2 test1 test2 test3 xx#同时复制多个文件 [root@localhost ~]# cp t3 t4 /opt/ [root@localhost ~]# ls /opt #创建目录 [root@localhost ~]# mkdir abc #使用-r对目录执行复制 [root@localhost ~]# cp -r abc /opt [root@localhost ~]# ls /opt #同时复制多个目录 [root@localhost ~]# mkdir abc1 abc2 abc3 [root@localhost ~]# cp -r abc1 abc2 abc3 /opt [root@localhost ~]# ls /opt #复制hello文件到/opt并改名为hello.txt [root@localhost ~]# cp hello /opt/hello.txt [root@localhost ~]# ls /opt #复制xxxx目录到/opt并改名xxoo [root@localhost ~]# mkdir xxxx [root@localhost ~]# cp -r xxxx /opt/xxoo [root@localhost ~]# ls /opt #使用“.”配合cp命令执行复制 [root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# pwd /etc/sysconfig/network-scripts [root@localhost network-scripts]# cp /root/t1 . [root@localhost network-scripts]# ls #操持属性不变复制文件 [root@localhost ~]# cp -p anaconda-ks.cfg /opt cp:是否覆盖"/opt/anaconda-ks.cfg" ? y [root@localhost ~]# ls -l /opt/anaconda-ks.cfg -rw-------. 1 root root 1800 3 月 13 17 :34 /opt/anaconda-ks.cfg#对比以上两个文件的详细属性信息(最后一次修改时间) [root@localhost ~]# ls -l anaconda-ks.cfg -rw-------. 1 root root 1800 3 月 13 17 :34 anaconda-ks.cfg#这两个操作代表什么意思? [root@localhost ~]# cp -r xxxx /mnt/oooo #拷贝并改名 [root@localhost ~]# cp -r xxxx /mnt/oooo #拷贝
mv 移动命令
mv(英文全拼:move file)用于移动文件或目录到其他位置,也可用于修改目录或文件名
命令格式:mv [-选项] 源文件… 目标路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #移动当前路径hello文件到/mnt目录 [root@localhost ~]# mv hello /mnt [root@localhost ~]# ls /mnt hello home oooo test#同时移动多个文件 [root@localhost ~]# mv t1 t2 t3 t4 /mnt [root@localhost ~]# ls /mnt hello home oooo student1 t1 t2 t3 t4 test#移动/opt目录下文件到/mnt root@localhost ~]# mv /opt/test1 /opt/test2 /opt/test3 /mnt/ [root@localhost ~]# ls /mnt hello home oooo student1 t1 t2 t3 t4 test test1 test2 test3#移动目录 [root@localhost ~]# mv student1 /mnt [root@localhost ~]# ls /mnt hello home oooo student1 test#移动文件并改名 [root@localhost ~]# mv hello.txt /media/hello [root@localhost ~]# ls /media/ hello#移动目录并改名 [root@localhost ~]# mv test /media/testxx [root@localhost ~]# ls /media/ hello testxx
cat 查看文件内容命令
cat (英文全拼:concatenate)命令用于查看文本文件内容
命令格式:cat [选项] 文件名
常用选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] ...NAME ="ens32" //网卡名UUID ="16085f4c-f690-4058-b29e-d55c73387026" DEVICE ="ens32" ONBOOT ="yes" IPADDR ="192.168.0.50" //网卡IP 地址PREFIX ="24" //子网掩码GATEWAY ="192.168.0.254" //网管DNS1 ="114.114.114.114" //DNS [root@localhost ~]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 [root@localhost ~] localhost.localdomain [root@localhost ~]CentOS Linux release 7.6 .1810 (Core ) [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]
less命令
less工具是对文件的输出进行分页显示的工具,常用于查看内容量较大的文件
命令格式:less [-选项] 文件
常用选项:
使用技巧:
键盘上下键逐行查看
pgdn :向上翻一页(Fn + 上键)
pgup :向下翻一页(Fn + 下键)
/字符串 :搜索指定字符串(n从上向下搜索,N从下向上搜索)
G:直接跳转到文件最后一行
gg:直接跳转到文件行首
q :退出
1 [root@localhost ~]# less -N /etc/services
head与tail命令
head命令:用来显示文件开头部分内容,默认显示文件开头10行内容
命令格式:head [选项] 参数
常用选项:
hljs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost ~]# head /etc/passwd [root@localhost ~]# head /etc/fstab [root@localhost ~]# head /etc/group [root@localhost ~]# head /etc/hostname [root@localhost ~]# head /etc/hosts [root@localhost ~]# head /etc/sysconfig/network-scripts/ifcfg-ens32 # 查看存放DNS配置文件信息 [root@localhost ~]# head /etc/resolv.conf # 使用-n指定显示文件前多少行内容 [root@localhost ~]# head -n 5 /etc/passwd [root@localhost ~]# head -n 6 /etc/passwd [root@localhost ~]# head -n 15 /etc/passwd [root@localhost ~]# head -n 20 /etc/passwd
tail命令:用来显示文件末尾部分内容,默认显示文件末尾10行内容
命令格式:tail [选项] 参数
常用选项:-n<行数> 指定显示的行数 -f 动态显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@localhost ~]# tail /etc/passwd #使用“-n”指定显示文件末尾多少行内容 [root@localhost ~]# tail -n 5 /etc/passwd [root@localhost ~]# tail -n 5 /etc/sysconfig/network-scripts/ifcfg-ens32 IPADDR="192.168.0.50" PREFIX="24" GATEWAY="192.168.0.254" DNS1="114.114.114.114" IPV6_PRIVACY="no" #动态查看文件内容 [root@localhost ~]# touch t1 root@localhost ~]# tail -f t1 #另开一个终端向文件写入内容 [root@localhost ~]# echo 123 > t1
rm删除命令
rm(英文全拼:remove)命令用于删除文件或者目录。
命令格式:rm [-选项…] 目录或文件…
常用选项
-f 强制删除
-r 删除目录
“*”特殊字符:系统常用符号,用来代表任意字符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 [root@localhost ~]# ls /opt abc abc1 abc2 abc3 anaconda-ks.cfg hello.txt home rh student t1 t2 t3 t4 xx xxoo [root@localhost ~]# ls /mnt hello home oooo student1 t1 t2 t3 t4 test test1 test2 test3#删除指定目录下文件 [root@localhost ~]# rm /opt/anaconda-ks.cfg rm:是否删除普通文件 "/opt/anaconda-ks.cfg" ?y #默认需要确认(y|n) #查看文件是否被成功删除 [root@localhost ~]# ls /opt abc abc1 abc2 abc3 hello.txt home rh student t1 t2 t3 t4 xx xxoo [root@localhost ~]# rm /opt/hello.txt rm:是否删除普通空文件 "/opt/hello.txt" ?y#同时删除目录下指定文件 [root@localhost ~]# rm /opt/t1 /opt/t2 /opt/t3 /opt/t4 rm:是否删除普通空文件 "/opt/t1" ?y rm:是否删除普通空文件 "/opt/t2" ?y rm:是否删除普通空文件 "/opt/t3" ?y rm:是否删除普通空文件 "/opt/t4" ?y#查看文件是否被成功删除 [root@localhost ~]# ls /opt abc abc1 abc2 abc3 home rh student xx xxoo#使用“-f”强制删除文件(无需确认,直接删除) [root@localhost ~]# rm -f /mnt/hello [root@localhost ~]# ls /mnt home oooo student1 t1 t2 t3 t4 test test1 test2 test3#同时强制删除多个文件 [root@localhost ~]# rm -f /mnt/t1 /mnt/t2 /mnt/t3 /mnt/t4 [root@localhost ~]# ls /mnt #删除目录 [root@localhost ~]# rm -r /opt/abc rm:是否删除目录 "/opt/abc" ?y [root@localhost ~]# ls /opt abc1 abc2 abc3 home rh student xx xxoo#同时删除多个目录 [root@localhost ~]# rm -r /opt/abc1 /opt/abc2 /opt/abc3 rm:是否删除目录 "/opt/abc1" ?y rm:是否删除目录 "/opt/abc2" ?y rm:是否删除目录 "/opt/abc3" ?y [root@localhost ~]# ls /opt home rh student xx xxoo#同时强制删除多个目录 [root@localhost ~]# rm -rf /opt/home /opt/student /opt/xx /opt/xxoo [root@localhost ~]# ls /opt rh#创建目录与文件 [root@localhost ~]# touch /opt/t1 [root@localhost ~]# mkdir /opt/test [root@localhost ~]# ls /opt rh t1 test#rm命令在删除目录时,包含改目录及目录下所有数据全部删除 [root@localhost ~]# rm -rf /opt/ [root@localhost ~]# ls / [root@localhost ~]# ls /mnt home oooo student1 test test1 test2 test3#使用“*”通配任意所有字符,删除/mnt目录下所有数据 [root@localhost ~]# rm -rf /mnt/* [root@localhost ~]# ls /mnt
软连接与硬连接
Linux中的链接文件类似于windows中的快捷方式
软连接特点:软连接可以跨分区,可以对目录进行链接,源文件删除后,链接文件不可用
软连接命令格式:ln -s 源文件路径 目标路径
注意:创建链接时一定要写目录或文件的绝对路径,哪怕是在当前路径下,也要写绝对路径·
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] lrwxrwxrwx. 1 root root 16 3 月 21 14 :28 /opt/hello.soft -> /root/hello .soft [lisi@localhost ~]$ ls /opt hello.soft [lisi@localhost ~]$ ls -l /opt/hello.soft lrwxrwxrwx. 1 root root 16 3 月 21 14 :28 /opt/hello.soft -> /root/hello .soft [lisi@localhost ~]$ cat /opt/hello.soft cat: /opt/hello.soft: 权限不够 [root@localhost ~] [root@localhost ~] [root@localhost ~] lrwxrwxrwx. 1 root root 16 3 月 21 14 :28 /opt/hello.soft -> /root/hello .soft [root@localhost ~] [root@localhost ~] [root@localhost ~] lrwxrwxrwx. 1 root root 16 3 月 21 14 :39 /opt/hello.soft -> /root/hello .soft [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] lrwxrwxrwx. 1 root root 11 3 月 21 14 :44 /opt/test1 -> /root/test 13 创建链接时一定要写目录或文件的绝对路径,哪怕是在当前路径下,也要写绝对路径 [root@localhost ~] [root@localhost ~] hello.soft test1 [root@localhost ~] lrwxrwxrwx. 1 root root 10 3 月 21 14 :47 /opt/hello.soft -> hello.soft
硬链接特点:硬连接不可以跨分区,不可以对目录进行链接,源文件删除后,链接文件仍然可用
硬连接命令格式:ln 源文件路径 目标路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 [root@localhost ~] [root@localhost ~] [root@localhost ~] hello.hard hello.soft test1 root@localhost ~] [root@localhost ~]123 [root@localhost ~]123 [root@localhost ~] [root@localhost ~]123 xx [root@localhost ~] -rw-r--r--. 2 root root 7 3 月 21 14 : 55 /root/hello.hard [root@localhost ~] -rw-r--r--. 2 root root 7 3 月 21 14 : 55 /opt/hello.hard [root@localhost ~]33711090 /root/hello.hard [root@localhost ~]33711090 /opt/hello.hard root@localhost ~]ln: "/root/test1" : 不允许将硬链接指向目录 [root@localhost ~] [root@localhost ~]123 xx [root@localhost ~] [root@localhost ~]123 xx abc [root@localhost ~]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 4 .3G 0 rom [root@localhost ~]ln: 无法创建硬链接"/boot/hello.soft" => "/root/hello.soft" : 无效的跨设备连接
内部命令与外部命令
什么是命令:用来实现某一种功能的指令或程序
命令的执行依赖于解释器(例如:/bin/bash),/etc/shells文件存放系统可用的shell
[root@ localhost ~]# shell 终端 交互接口 用户接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@localhost ~]alias ls='ls --color=auto' /usr/bin /ls root@localhost ~]# ls /usr /bin/ls /usr/bin /ls #直接运行程序文件 [root@localhost ~]# /usr /bin/ls [root@localhost ~] hello.hard hello.soft t1 test1 test.txt [root@localhost ~] [root@localhost ~]/usr/bin /cat [root@localhost ~]# which pwd /usr /bin/pwd
Linux命令的分类
内部命令:shell程序自带的基本管理命令
外部命令:有独立的外部可执行程序文件命令
type 用于区别内部命令与外部命令
which 用于查找可以执行程序文件位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@localhost opt] [root@localhost opt] [root@localhost opt] [root@localhost ~]/usr/ local/sbin:/u sr/local/ bin:/usr/ sbin:/usr/ bin:/root/ bin [root@localhost ~] 命中 命令 1 /usr/ bin/cat 1 /usr/ bin/ls [root@localhost opt] [root@localhost opt] [root@localhost opt] hash: 哈希表为空 [root@localhost opt] hello.hard hello.soft t1 test1 test.txt [root@localhost opt] 命中 命令 1 /usr/ sbin/ls
总结:
shell程序是用户和系统之间的接口,用于解释用户的命令
查找命令对应的程序文件所在位置:which 命令
shell程序大多数存放在/etc/shells文件中
系统默认使用的shell为/bin/bash
查看当前使用的shell:echo $SHELL
区别内部命令与外部命令的方式:typt 命令
shell程序查找可执行程序文件路径定义在$PATH环境变量中
shell查找的外部命令路径结果会记录到缓存的hash表中
help 命令帮助手册
help命令用于查看shell内部命令的帮助信息,包括使用方法、选项等…
命令格式:help [选项] 命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #获取内部命令帮助信息 [root@localhost etc]# help cd #help 无法获取外部命令的帮助信息 root@localhost etc]# help ls bash: help : 没有与 `ls' 匹配的帮助主题。尝试 `help help ' 或者 `man -k ls ' 或者 `info ls '。 [root@localhost etc]# type help help 是 shell 内嵌 #获取help 命令本身的帮助信息 [root@localhost etc]# help help [root@localhost etc]# type cat cat 是 /usr/bin/cat [root@localhost etc]# help cat bash: help : 没有与 `cat' 匹配的帮助主题。尝试 `help help ' 或者 `man -k cat ' 或者 `info cat '。 #查看命令帮助手册(命令自带) [root@localhost etc]# cat --help [root@localhost etc]# ls --help
man 获取命令帮助手册
man 命令用于查看系统命令的帮助信息,包括使用方法、选项、使用例子等…,对比–help ,mna 输出的信息更加详细
命令格式:man [-选项] 命令
常用快捷操作
向下键向下移一行
向上键向上移一行
[Page Down] 向下翻一页
[Page Up] 向上翻一页
/关键字 #搜索关键字,配合n(向下查询)、N(向上查询)
q 退出
1 2 3 4 [root@localhost etc]# man ls [root@localhost etc]# man cat [root@localhost etc]# man touch [root@localhost etc]# man mkdir
1 [root@localhost etc]# info ls
Google/百度(Google,算法)
Linux系统的运行级别
Linux系统运行级别:linux系统有7个运行级别,不同的运行级别运行的程序和功能都不一样,而Linux系统默认是运行在一个标准的级别上,系统运行级别文件/etc/inittab文件
运行级别 0:所有进程被终止,机器将有序的停止,关机时系统处于这个运行级别(关机)
运行级别 1:单用户模式,(root用户进行系统维护),系统里运行的所有服务也都不会启动
运行级别 2:多用户模式(网络文件系统NFS服务没有被启动)
运行级别 3:完全多用户模式,(有NFS网络文件系统)标准的运行级别
运行级别 4:系统未使用
运行级别 5:登录后,进入带GUI的图形化界面,标准的运行级别
运行级别 6:系统正常关闭并重启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #查看当前系统运行级别[root@localhost etc] # runlevel N 5 #解释;当前系统处于的运行级别 #解释:N 代表没有从任何级别跳转过来 #切换系统运行级别[root@localhost ~] # init N #查看运行级别文件内容[root@localhost ~] # cat /etc /inittab # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target # # systemd uses 'targets' instead of runlevels. By default, there are two main targets : # # multi-user.target : analogous to runlevel 3 #运行级别3 # graphical.target : analogous to runlevel 5 #运行级别5 # # To view current default target, run : # systemctl get-default #查看当前系统默认的运行级别 # # To set a default target, run : # systemctl set-default TARGET.target #修改当前系统默认运行级别 #查看默认运行级别 [root@localhost ~]# systemctl get-default graphical.target #默认运行级别为5 #修改默认运行级别为3 [root@localhost ~]# systemctl set-default multi-user.target [root@localhost ~]# systemctl get-default multi-user.target #修改默认运行级别为5 [root@localhost ~]# systemctl set-default graphical.target [root@localhost ~]# systemctl get-default graphical.target
关机与重启
linux下常用的关机命令有:shutdown、halt、poweroff、init
init 0 关机
halt #立刻关机
poweroff #立刻关机 (记这个)
shutdown –h now #立刻关机
shutdown -h 10 #10分钟后自动关机
1 [root@localhost ~]# poweroff
重启命令:reboot shutdown
reboot #立刻重启 (记这个)
shutdown -r now #立刻重启
shutdown -r 10 #过十分钟后重启
1 [root@localhost ~]# reboot
课后作业
1.请在/tmp目录下创建student目录,并在student目录下同时创建t1、t2、t3文件
mkdir /tmp/student
cd /tmp/student/
touch t1 t2 t3
touch /tmp/student/t1 /tmp/student/t2 /tmp/student/t3
2.请在/tmp目录下递归创建test1/test2/test3目录
mkdir -p /tmp/test1/test2/test3
3.切换到/tmp/test1/test2/test3目录下,并打印(查看)当前所在目录
cd /tmp/test1/test2/test3
pwd
4.请同时在/opt、/media目录下创建upload文件
touch /opt/upload /media/upload
5.请将/opt目录下的upload文件移动至/tmp/test1/test2/test3目录下,并改名为upload.bak
mv /opt/upload /tmp/test/1/test/2/test3/upload.bak
6.请将/etc/passwd文件拷贝至/opt目录下,改名为passwd.bak,并保持属性不变
cp -p /etc/passwd /opt/passwd.bak
7.请将/etc/fstab文件拷贝至/opt目录下,并改名为fstab.bak
cp -p /etc/fstab /opt/fstab.bak
8.请将/etc/sysconfig/network-scripts/ifcfg-ens32 文件拷贝至/opt目录下,并改名为ens32.bak
cp /etc/sysconfig/network-scripts/ifcfg-ens32 /opt/ens32.bak
9.请删除/etc/yum.repos.d/目录下所有内容
rm -rf /etc/yum.repos.d/*
10.请在/etc/yum.repos.d/目录下创建local.repo文件
touch /etc/yum.repos.d/local.repo
11.请查看/etc/sysconfig/network-scripts/ifcfg-ens32文件末尾5行内容
tail -5 /etc/sysconfig/network-scripts/ifcfg-ens32
tail -n 5 /etc/sysconfig/network-scripts/ifcfg-ens32
12.请查看/etc/passwd文件第1行内容
head -n 1 /etc/passwd
head -1 /etc/passwd
13.请查看/etc/hostname文件内容
cat /etc/hostname
14.请查看/etc/hosts文件内容
cat /etc/hosts
15.请说出软连接与硬连接的特点
软连接:可以跨分区,可以对目录链接,源文件删除后链接文件不可用
硬连接:不可以跨分区,不可以对目录进行连接,源文件删除后,链接文件以然可用
16.请在/opt目录下创建hello.soft文件,并创建软连接到/tmp目录下
touch /opt/hello.soft
ln -s /opt/hello.soft /tmp
17.请在/opt目录下创建hello.hard文件,并创建硬连接到/tmp目录下,并查看连接文件详细属性
touch /opt/hello.hard
ln /opt/hello.hard /tmp
18.如何获取ls命令的帮助信息?
man ls
ls --help
19.请说出Linux系统的运行级别
0:关机
1:单用户模式
2:多用户模式(没有NFS)
3:完全多用户模式,标准运行级别
4:保留
5:带GUI图形化界面,标准的运行级别
6:系统关闭并重启
20.如何重启Linux系统?
reboot
init 6
计算机硬件组成部分
输入设备:键盘、鼠标、触控屏等
主机设备:主板、中央处理器(CPU)、主存储器(内存)、网卡、声卡、显示卡等
输出设备:屏幕、耳机、打印机、投影仪等
外部存储设备:硬盘、软盘、光盘、U盘等、蓝光光驱
硬盘:传统硬盘(HDD)==固态硬盘(SSD)
CPU缓存
CPU比较主流的厂商
CPU架构
x86架构,8086架构,80286,80386,x86称号
8位、16位、32位、64位,CPU一次可以处理的数据量,
32位CPU一次可以从内存中读取大约3.25G左右的数据量
64位CPU一次可以从内存中读取大约128G左右的数据量
CPU核心
单核心,一颗CPU只能有一个运算单元
多核心,一颗CPU里边有两个以上的运算单元
计算机什么最重要?想要让计算机运行起来,足够的电力
Linux系统目录介绍
/(根):系统所有数据都存放在根目录下
/bin:存放用户和管理员必备的可执行的二进制程序文件
/boot:存放Linux系统内核及引导系统程序所需要的文件目录
/dev:存放硬件设备的目录,如键盘、鼠标、硬盘、光盘等等
/etc:存放服务的配置文件,用户信息文件
/root:超级管理员的家目录
/home:系统普通用户的家目录
/lib:存放系统中的程序运行所需要的共享库及内核模块
/opt:额外安装的可选应用程序包所放置的位置
/srv:服务启动之后需要访问的数据目录
/tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/var:存放系统执行过程中经常变化的文件,如随时都在变化的日志文件就存放/var/log/下
/mnt、/media :光盘和镜像等预设的挂载点
/proc:Linux伪文件系统,该目录下的数据存在于内存当中,不占用磁盘空间
/lib64 :存放函式库
/run :程序或服务启动后,存放PID的目录
/sys:存放被建立在内存中的虚拟文件系统
/usr:操作系统软件资源所放置的目录
/usr/bin:与/bin目录相同,存放用户可以使用的命令程序
/usr/lib:与/lib目录相同,存放系统中的程序运行所需要的共享库及内核模块
/usr/etc:用于存放安装软件时使用的配置文件
/usr/games:与游戏比较相关的数据放置处
/usr/include:c/c++等程序语言的档头(header)与包含档(include)放置处
/usr/lib64:与/lib64目录相同,存放函式库
/usr/libexec:不经常被使用的执行程序或脚本会放置在此目录中
/usr/local: 额外安装的软件存放目录
/usr/sbin:该目录与/sbin目录相同,存放用户可执行的二进制程序文件
/usr/share: 放置只读架构的杂项数据文件
/usr/src:一般软件源代码建议存放该目录下
查看内核信息
uname 命令用于显示系统内核信息
命令格式:uname [-选项…]
常用选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@localhost ~] Linux [root@localhost ~] Linux 3.10 .0 -957 .el7.x86_64 Linux 3 10 0 957 el7 x86_64 https: //www.kernel.org/
查看CPU信息
/proc/cpuinfo文件用于存放系统CPU信息
lscpu 用于显示CPU架构信息
命令格式:lscpu [-选项]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [root@localhost ~] processor : vendor_id : cpu family : model : model name: stepping : cpu MHz : cache size : physical id : siblings : core id : cpu cores : apicid : fpu : fpu_exception : cpuid level : wp : flags : bogomips : clflush size : cache_alignment : address sizes : power management :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@localhost ~ ] Architecture: CPU(s): Thread(s) per core: Core(s) per socket: CPU socket(s): Vendor ID: CPU family: Model: Stepping: CPU MHz: Virtualization: L1d cache: L1i cache: L2 cache:
查看系统内存信息
/proc/meminfo文件用于存放系统内存信息
free 用于查看内存使用情况
命令格式:free [-选项]
常用选项:-h #以人类易读方式显示大小(KB,MB,GB)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [root@localhost ~ ]MemTotal: 995896 kB MemFree: 244196 kB MemAvailable: 435080 kB Buffers: 2132 kB Cached: 314632 kB SwapCached: 0 kB Active: 295908 kB Inactive: 271552 kB Active(anon): 251528 kB Inactive(anon): 13044 kB Active(file): 44380 kB Inactive(file): 258508 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 4 kB Writeback: 0 kB AnonPages: 15100 kB Mapped: 7160 kB Shmem: 100 kB Slab: 9236 kB SReclaimable: 2316 kB SUnreclaim: 6920 kB KernelStack: 2408 kB PageTables: 1268 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 22980 kB Committed_AS: 536244 kB VmallocTotal: 892928 kB VmallocUsed: 29064 kB VmallocChunk: 860156 kB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@localhost ~] total used free shared buff/cache availableMem: 972 M 344 M 238 M 13 M 389 M 424 MSwap: 2 .0 G 0 B 2 .0 G total: used: free: shared: buff/cache: available: total: used: free:
查看网卡信息
网卡配置文件地址: /etc/sysconfig/network-scripts/网卡名
ifconfig 用于显示和设置网卡的参数
命令格式: ifconfig [网卡名]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@localhost ~] TYPE=“Ethernet“ PROXY_METHOD=“none“ BROWSER_ONLY="no“ BOOTPROTO=“none“ DEFROUTE=“yes“ IPV4_FAILURE_FATAL=“no“ NAME=“ens32“ UUID=“3 ef0d258-f9a4-49 e5-a9da-7 b47b c98daa0 “ DEVICE=“ens32“ ONBOOT=“yes“ IPADDR=“192 .168 .0 .210 “ PREFIX=“24“ GATEWAY=“192 .168 .0 .254 “ DNS1=“8 .8 .8 .8 “ DNS2=8 .8 .4 .4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [root@localhost ~] ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.29 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::8d50:c4d5:97b0:9d64 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:b0:cf:c8 txqueuelen 1000 (Ethernet) RX packets 3948 bytes 1811465 (1.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2538 bytes 459113 (448.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens32: flags=4163: UP: BROADCAST: RUNNING: MULTICAST: mtu 1500: inet 192.168.0.29 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::8d50:c4d5:97b0:9d64 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:b0:cf:c8 xqueuelen 1000 (Ethernet) RX packets 3948 bytes 1811465 (1.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 100 bytes 8116 (7.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost ~] lo: 本地回环网卡,不是物理网卡,通过软件虚拟出来的一个网卡,127.0.0.1,用于测试本机的联通性 [root@localhost ~] virbr0: 虚拟化的网络接口,通过软件技术虚拟出来的一个网卡,192.168.122.1,KVM虚拟化技术的时候
查看主机名及修改主机名
/etc/hostname文件用于存放主机名
hostname 命令用于显示和设置主机名
命令格式:hostname [-选项] [新名称]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [root@localhost ~] localhost.localdomain [root@localhost ~] localhost.localdomain [root@localhost ~] [root@localhost ~] test [root@localhost ~] [c: \~]$ ssh 192.168 .0.50 [root@test ~] [root@test ~] [root@test ~] [root@fhsd ~] [root@fhsd ~] [root@localhost ~] [root@localhost ~]
vi/vim文本编辑器
Vim是从 vi 发展出来的一个文本编辑器,vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性
vi/vim 共分为三种模式:命令模式、输入模式、底线命令模式(末行模式)
命令模式:刚刚启动 vi/vim,便进入了命令模式
输入模式:在命令模式下按 a/i/o 就进入了输入模式
ESC,退出输入模式,切换到命令模式
底线命令模式:在命令模式下按下:(英文冒号)就进入了底线命令模式
命令格式:vim 文件名
若目标文件不存在,则新创建文件并编辑
若目标文件以存在,则打开文件并编辑
命令模式:刚刚启动 vi/vim,便进入了命令模式
i 切换到输入模式,在当前光标所在字符前插入
a 切换到输入模式,在当前光标所在字符后插入
o 切换到输入模式,在当前光标所在行下插入新行
: 切换到底线命令模式,以在最底一行输入命令
x 在命令模式下删除当前光标所在的单字符
dd 删除一整行内容,配合数字可删除指定范围内的行
C 删除当前光标及光标后所有内容并进入输入模式
u 恢复上一次修改内容,一次恢复一个操作,可多次恢复,直到恢复本次操作初始状态为止
$ 将光标移动至行尾
0(零) 将光标移动至行首
gg 跳转至文件第一行
G 跳转至文件最后一行
yy 复制当前行,配合数字可以同时复制多行
p 粘贴当前光标所在行下
/关键字 搜索文件内关键字,n从上向下快速定位关键字,N从下向上快速定位关键字
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
:w 保存
:q 退出
:wq 保存并退出
:q! 强制退出不保存
:wq! 强制保存并退出
:set nu 以行号形式显示文件内容
:set nonu 取消行号显示
:行号 快速跳转到指定行
:r 读入另一个文件的数据 , 文件内容填加到光标的下一行
:nohl 取消高亮显示
1 [root@test ~]# vim /etc/services
修改网卡IP地址
网卡配置文件地址: /etc/sysconfig/network-scripts/网卡名
ifconfig #用于显示和设置网卡的参数
systemctl restart network #重启网络
ifup 网卡名 #启动该网卡设备
ifdown 网卡名 #禁用该网卡设备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [root@test ~] TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens32" UUID="16085f4c-f690-4058-b29e-d55c73387026" DEVICE="ens32" ONBOOT="yes" IPADDR="192.168.0.60" PREFIX="24" GATEWAY="192.168.0.254" DNS1="114.114.114.114" IPV6_PRIVACY="no" ~ [root@test ~][c:\~]$ ssh 192.168.0.60 [root@test ~] [root@test ~]
nmcli connection modify 网卡名 ipv4.method manual ipv4.addresses Ip地址/掩码 connection.autoconnect yes
解释:
nmcli connection modify(修改)
网卡名 ipv4.method(配置ipv4地址方法)
manual (手动配置)
ipv4.addresses(ipv4地址)
Ip地址/掩码 connection.autoconnect yes(开机自动连接)
激活网卡:nmcli connection up 网卡名
关闭网卡:nmcli connection down 网卡名
重启网卡:nmcli connection reload 网卡名
1 2 3 4 5 6 [root@test ~] [root@test ~] [c: \~]$ ssh 192.168 .0.50
host命令
1 2 3 4 5 [root@test ~]# host www.baidu.com www.baidu.com has address 110.242 .68.3 www.baidu.com has address 110.242 .68.4 www.baidu.com is an alias for www.a .shifen.com . www.baidu.com is an alias for www.a .shifen.com .
nslookup命令
nslookup用于查询域名解析是否正常,在网络故障时用来诊断网络问题
1 2 3 4 5 6 7 8 9 [root@test ~ ]Server: 114.114 .114 .114 Address: 114.114 .114 .114 Non-authoritative answer: Name: www.baidu.com Address: 110.242 .68 .4 Name: www.baidu.com Address: 110.242 .68 .3
alias别名管理
alias命令用于设置命令别名,用户可以使用alias自定义命令别名来简化命令的复杂度
.bashrc 文件存放命令别名
命令格式:aliasi [别名]=[命令] #注意事项:等号(=)前后不能有空格
unalias 别名 #取消别名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 #定义别名 [root@test ~ ]# alias lsnet='ls /etc/sysconfig/network-scripts/' [root@test ~ ]# lsnet [root@test ~ ]# alias myls='ls -ldh' [root@test ~ ]# myls /opt #查看当前系统可用命令别名 [root@test ~ ]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias lsnet='ls /etc/sysconfig/network-scripts/' alias mv='mv -i' alias myls='ls -ldh' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' #两条命令效果相同 [root@test ~ ]# ls -l hello -rw-r--r--. 1 root root 426 3 月 28 15 :00 hello [root@test ~ ]# ll hello -rw-r--r--. 1 root root 426 3 月 28 15 :00 hello [root@test ~ ]# which ls alias ls='ls --color=auto' /usr/sbin/ls [root@test ~ ]# /usr/sbin/ls [root@test ~ ]# ls #取消本次命令的别名功能“\” [root@test ~ ]# \ls #取消命令别名 [root@test ~ ]# unalias myls [root@test ~ ]# myls bash: myls: 未找到命令...#定义别名不要跟系统命令发生冲突 [root@test ~ ]# alias ls=hostname [root@test ~ ]# ls test#取消命令别名 [root@test ~ ]# unalias ls [root@test ~ ]# alias #重新定义别名 [root@test ~ ]# alias ls='ls --color=auto' [root@test ~ ]# ls
history 管理历史
history命令用于显示历史记录和执行过的命令,登录shell时会读取~./bash_history历史文件中记录下的命令,当退出或登出shell时,会自动保存到历史命令文件,该命令单独使用时,仅显示历史命令
历史命令默认只能存储1000条,可以通过/etc/profile文件修改
命令格式:history [-选项] [参数]
常用选项:
-a 追加本次新执行的命令至历史命令文件中
-d 删除历史命令中指定的命令
-c 清空历史命令列表
快捷操作:
!# 调用命令历史中第N条命令
!string 调用命令历史中以strind开头的命令
!! 重复执行上一条命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #获取命令帮助 [root@test ~]# help history #查看历史命令 [root@test ~]# history #查看记录历史命令文件 [root@test ~]# cat .bash_history #将历史命令同步至历史命令配置文件中 [root@test ~]# history -a [root@test ~]# cat .bash_history #删除历史命令中655条命令历史 [root@test ~]# history -d 655 [root@test ~]# history -d 637 #清空缓存中所有历史命令 [root@test ~]# history -c [root@test ~]# history 1 history#删除历史命令配置文件(该文件删除后系统会再次自动创建) [root@test ~]# rm -rf .bash_history #快速调用历史命令中第1条 [root@test ~]# !1 [root@test ~]# !3 #调用历史命令中以cat开头的命令(只调用最近使用的cat历史命令) [root@test ~]# !cat #重复执行上一条命令 [root@test ~]# !! #历史命令默认只能记录1000条,可以通过/etc/profile文件修改 [root@test ~]# vim /etc/profile ...46 HISTSIZE=100
date日期时间管理
date命令用于显示或设置系统日期与时间
命令格式:date [-选项] [+格式符] #查看系统日期时间
date [-选项] [MMDDhhmm[[CC]YY][.ss]] #设置日期时间
常用选项:-s 设置日期时间
格式符:
+%Y 年份
+%B 月份
+%d 日
+%H 时
+%M 分
+%S 秒
+%F 年-月-日
+%X 时:分:秒
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 #显示系统日期与时间 [root@test ~]# date 2021 年 03 月 28 日 星期日 17 :08 :34 CST#只显示年分 [root@test ~]# date +%Y 2021 #只显示月份 [root@test ~]# date +%B 三月#只显示几号 [root@test ~]# date +%d 28 #只显示小时 [root@test ~]# date +%H 17 #只显示分钟 [root@test ~]# date +%M 10 #只显示秒 [root@test ~]# date +%S 24 #显示年月日 [root@test ~]# date +%F 2021 -03 -28 #显示时分秒 [root@test ~]# date +%X 17 时12 分10 秒#显示年月日时分秒 [root@test ~]# date +%F%X 2021 -03 -2817 时12 分39 秒#可以自定义分隔符“-” [root@test ~]# date +%F-%X 2021 -03 -28 -17 时13 分38 秒 [root@test ~]# date +%F:%X 2021 -03 -28 :17 时13 分55 秒#修改系统年月日 [root@test ~]# date -s 2020-03-28 2020 年 03 月 28 日 星期六 00 :00 :00 CST#修改系统时分秒 [root@test ~]# date -s 17:16:00 2020 年 03 月 28 日 星期六 17 :16 :00 CST#修改年月日时分秒 [root@test ~]# date -s '2021-03-28 17:17:00' 2021 年 03 月 28 日 星期日 17 :17 :00 CST#解释: '' 单引号:引用整体,屏蔽特殊符号的功能"" 双引号:引用整体,不会屏蔽特殊符号的功能#Linux的两种时钟 系统时钟:内核通过CPU的工作频率去计算的时间 硬件时钟:#显示硬件时间 [root@test ~]# clock 2021 年03 月28 日 星期日 17 时23 分42 秒 -0.945549 秒#显示并同步系统与硬件时钟 [root@test ~]# man hwclock -s:把系统时间设置成与硬件时间相同 -w:把硬件时间设置成与系统时间相同 [root@test ~]# hwclock -w [root@test ~]# date 2021 年 03 月 28 日 星期日 17 :27 :18 CST#cal显示日历 [root@test ~]# cal 三月 2021 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #显示指定的全年月份 [root@test ~]# cal 2021
wc统计命令
wc 用于统计文件的字节数、行数,并将统计的结果输出到屏幕
命令格式:wc [-选项] 文件名
常用选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@test ~]# wc /etc/ passwd43 87 2259 /etc/ passwd 行数 单词 字节 文件名 #统计文件字节数 [root@test ~]# wc -c /etc/ passwd2259 /etc/ passwd #统计文件行数 [root@test ~]# wc -l /etc/ passwd43 /etc/ passwd [root@test ~]# wc -l /etc/ fstab11 /etc/ fstab
管道符
管道符“|”:将命令的输出结果交给另外一条命令作为参数继续处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@test ~] [root@test ~]5 root@test ~] 6 sync: x: 5 : 0 :sync :/sbin :/bin/sync 7 shutdown: x: 6 : 0 :shutdown :/sbin :/sbin/shutdown 8 halt: x: 7 : 0 :halt :/sbin :/sbin/halt 9 mail: x: 8 : 12 :mail :/var/spool/mail :/sbin/nologin 10 operator: x: 11 : 0 :operator :/root :/sbin/nologin [root@test ~]ens32: flags=4163 <UP ,BROADCAST ,RUNNING ,MULTICAST > mtu 1500 inet 192.168 .0.50 netmask 255.255 .255.0 broadcast 192.168 .0.255
重定向操作
重定向操作:将前面命令的输出结果,写入到其他的文本文件中
重定向的表示符号
#重定向输出(覆盖)
#重定向输出(追加)
< #输入重定向(覆盖)
<< # 输入重定向(追加)
只收集正确的输出结果
2> 只收集错误的输出结果
&> 正确错误都收集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 #将命令的输出结果以覆盖的方式重定向到文件中,(>附带创建文件功能) [root@test ~]# ifconfig ens32 |head -2 > /opt/ ens32.bak ens32: flags=4163 <UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168 .0.50 netmask 255.255 .255.0 broadcast 192.168 .0.255 [root@test ~]# cat /etc/ hostname > /opt/ ens32.bak [root@test ~]# cat /opt/ ens32.bak test [root@test ~]# free -h > /opt/ free.bak [root@test ~]# cat /opt/ free.bak total used free shared buff/cache available Mem: 972 M 414 M 123 M 15 M 435 M 336 M Swap: 2.0 G 0 B 2.0 G #将命令的输出结果以追加的方式重定向到文件中 [root@test ~]# cat /etc/ hostname >> /opt/ free.bak [root@test ~]# cat /opt/ free.bak #“>”只收集正确的输出结果,不收集错误的输出结果 [root@test ~]# ls xxooooxx > /opt/ xx.txt ls: 无法访问xxooooxx: 没有那个文件或目录 #“2 >”只收集错误的输出结果,不收集正确的输出结果 [root@test ~]# ls xxooooxx 2 > /opt/ xx.txt [root@test ~]# cat /opt/ xx.txt ls: 无法访问xxooooxx: 没有那个文件或目录 #“2 >”以覆盖的方式将输出结果重定向到文件中 [root@test ~]# cat /etc/ abc 2 > /opt/ ens32.bak [root@test ~]# cat /opt/ ens32.bak cat: /etc/ abc: 没有那个文件或目录 #“2 >>”以追加的方式将输出结果重定向到文件中 [root@test ~]# ls /etc/ abcd 2 >> /opt/ ens32.bak [root@test ~]# cat /opt/ ens32.bak cat: /etc/ abc: 没有那个文件或目录 ls: 无法访问/etc/ abcd: 没有那个文件或目录 #“&>”以覆盖的方式将正确输出与错误输出重定向到文件中 [root@test ~]# lscat &> /opt/ abc.txt [root@test ~]# cat /opt/ abc.txt [root@test ~]# ls /etc/ passwd &> /opt/ pass.bak [root@test ~]# cat /opt/ pass.bak [root@test ~]# free -h &> /opt/ pass.bak [root@test ~]# cat /opt/ pass.bak #“&>”以追加的方式将正确输出与错误输出重定向到文件中 [root@test ~]# ifconfig ens32 | head -2 &>> /opt/ pass.bak [root@test ~]# cat /opt/ pass.bak #以覆盖方式将正确输出与错误输出重定向到不同文件中 [root@test ~]# ll -d /root/ bcd >a.txt 2 >b.txt [root@test ~]# cat a.txt dr-xr-x---. 24 root root 4096 3 月 28 18 :07 /root/ [root@test ~]# cat b.txt ls: 无法访问bcd: 没有那个文件或目录
echo命令与sleep命令
echo命令用于输出指定的字符串和变量
命令格式:echo [-选项] [参数]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@test ~]/usr/local /sbin:/usr /local/bin :/usr/sbin :/usr/bin :/root/bin [root@test ~] xxoo [root@test ~] abc [root@test ~] 男人好难 [root@test ~]123 [root@test ~] test [root@test ~] [root@test ~] localhost
sleep命令可以用来将目前动作延迟一段时间
命令格式:sleep 时间
常用选项: s 秒 m 分钟 h 小时 d 日
课后作业
1.查看当前系统内核名称及版本信息
uname -sr
2.请写系统存放cpu配置文件
/proc/cpuinfo
3.请写出查看cpu信息命令
cat /proc/cpuinfo
lscpu
4.请写出系统存放内存配置文件
/proc/meminfo
5.请写出查看内存命令(以人类易读方式显示)
free -h
6.请写出系统存放网卡配置文件路径
/etc/sysconfig/network-scripts/
7.请写出查看网卡配置信息命令
ifconfig(如果系统最小化安装,需要安装net-tools)
ip a (ip address)
8.请写出系统存放主机名配置文件
/etc/hostname
9.请写出查看主机名命令
cat /etc/hostname
hostname
10.将主机名修改为student(永久修改)
hostnamectl set-hostname student
vim /etc/hostname
echo student > /etc/hostname
11.请写出vim的三种模式
命令模式
输入模式
底线命令模式(末行模式)
12.将/etc/passwd文件复制到/opt目录,使用vim打开文件并显示行号
cp /etc/passwd /opt
vim /opt/passwd
:set nu
13.使用vim在/opt/passwd文件中搜索包含root关键字的行
/root
14.使用vim在/opt/passwd文件中将光标快速跳转到第10行,并将光标跳转到行尾
:10 $
15.使用vim在/opt/passwd文件中快速跳转到文件最后一行并删除,在将光标跳转到文件第一行,将刚刚删除的行复制到文件第二行
G dd p
16.使用vim将/etc/hostname文件内容读入到/opt/passwd文件最后一行下
:r /etc/hostname
17.使用vim在/opt/passwd文件中复制前5行内容并粘贴到文件最后一行下
5yy p
18.将本次vim的修改恢复至初始状态,并保存退出
u
:wq
19.将本机IP地址修改为192.168.0.100,并重启动网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens32
systemctl restart network
20.如何获取一个域名所对应的IP地址
host www.baidu.com
21.如何检测本机使用的DNS是否可用
nslookup www.jd.com
22.请将hostname命令设置别名为hn(临时设置)
alias hn=hostname
23.取消hostname命令别名
unalias hn
24.如何查看本机历史命令
history
25.执行命令历史中第20条命令
!20
26.删除命令历史中第5条命令
history -d 5
27.清空所有历史命令
history -c
rm -rf .bash_history
28.查看本机当前系统日期与时间
date
29.将本机日期时间设置与你当前时间一致
date -s ‘2021-04-10 14:32:00’
30.统计/etc/passwd文件行数,并将命令输出结果重定向至/opt/pass.bak文件中
wc -l /etc/passwd > /opt/pass.bak
31.显示/etc/passwd文件末尾10行的前5行内容,并将输出结果追加至/opt/pass.bak文件中
tail -10 /etc/passwd | head -5 > /opt/pass.bak
cat -n /etc/passwd | tail -10 | head -5 >> /opt/pass.bak
用户账号管理
用户账号的作用:用户账号可用来登录系统,可以实现访问控制
用户模板目录:/etc/skel/
1 2 3 4 5 [root@localhost ~] . .. .bash_logout .bash_profile .bashrc .mozilla [root@localhost ~] [root@localhost skel]
useradd创建用户
useradd 命令用于创建新的用户
命令格式:useradd [-选项] 用户名
常用选项:
-u 指定用户UID
-d 指定用户家目录
-c 用户描述信息
-g 指定用户基本组
-G 指定用户附加组
-s 指定用户的shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@localhost ~] [root@localhost ~] root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] uid=1600 (xiaozhang) gid=1600 (xiaozhang) 组=1600 (xiaozhang),1401 (test) [root@localhost ~]user8: x: 1800 : 1800 :test :/home/user8 :/sbin/nologin
id命令
id 命令用于查看系统用户和用户所在组的信息
命令格式:id [-选项] [用户名]
1 2 [root@localhost ~]# id user1 uid=1001 gid=1001 组=1001
/etc/passwd用户信息文件
用户的基本信息存放在/etc/passwd文件
1 2 3 4 5 6 [root@localhost ~]root: x: 0 : 0 :root :/root :/bin/bash UID :0 超级用户UID :1 -499 系统伪用户,不能登录系统并且没有家目录UID :500 -65535 普通用户
组:
基本组(初始组):一个用户只允许有一个基本组
附加组(在基本组之外组):一个用户可以允许有多个附加组
用户—>shell程序—>内核—>硬件
/etc/default/useradd文件
/etc/default/useradd 存放用户默认值信息
1 2 3 4 5 6 7 8 9 [root@localhost ~] GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
/var/spool/mail/用户邮件目录
1 2 [root@localhost ~]# ls /var/ spool/mail/ laowang lisi rpc user1 user2 user3 user4 user5 user8 xiaozhang
passwd设置用户密码
passwd命令用于设置用户密码
命令格式:passwd [-选项] [用户名]
密码规范:长度不能少于8个字符,复杂度(数字、字母区分大小写,特殊字符),普通用户
密码规范:本次修改的密码不能和上次修改的密码太相近 123xxoo…A
常用选项
-S 查看密码信息
-l 锁定用户密码
-u 解锁用户密码
-d 删除密码
–stdin 通过管道方式设置用户密码
非交互设置用户密码
命令格式:echo “密码” | passwd --stdin 用户名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [root@localhost ~] 更改用户 user1 的密码 。 新的 密码:1 无效的密码: 密码是一个回文 重新输入新的 密码:1 passwd:所有的身份验证令牌已经成功更新。 [user1@localhost ~]$ ls prompt [user1@localhost ~]$ cat prompt 不允许随便修改系统xx文件! 有问题可联系管理员邮箱:xxoo@163 .com [root@localhost ~] [root@localhost ~] 锁定用户 user2 的密码 。passwd: 操作成功 [root@localhost ~] user2 LK 2021 -0 4-10 0 99999 7 -1 (密码已被锁定。) [root@localhost ~] 解锁用户 user2 的密码。passwd: 操作成功 [root@localhost ~] 清除用户的密码 user2。passwd: 操作成功 [root@localhost ~] 更改用户 laowang 的密码 。 passwd:所有的身份验证令牌已经成功更新。
/etc/shadow用户密码文件
用户的密码信息存放在/etc/shadow文件中,该文件默认任何人都没有任何权限(不包括root)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost ~] root:$6 $1ji5e8yglrZWAcI6 $FONKr3qebZufQ .u0Mf/MbipzGw/ MVvxS.vgXcy/duc4b/ GU0U7tfe37wPQ4XJEXstqBuwvaJqq2/kY/g /783u/ ::0 :99999 :7 ::: 第一字段:用户名 第二字段:密码加密字符串,加密算法为SHA512散列加密算法,如果密码位是“*”或者“!!”表示密码已过期 第三个字段:密码最后一次修改日期,日期从1970 年1 月1 日起,每过一天时间戳加1 第四个字段:密码修改的期限,如果该字段为0 表示随时可以修改密码,例如:该字段为10 ,代表10 天之内不可以修改密 第五个字段:密码有效期 第六个字段:密码到期前警告时间(和第五个字段相比) 第七个字段:密码过期后的宽限天数(和第五个字段相比) 第八个字段:账号失效时间,日期从1970 年1 月1 日起 第九个字段:保留 [root@localhost ~]
su命令
su命令用于切换当前用户身份到其他用户身份
命令格式:su [-选项] [用户名]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@localhost ~] [user1@localhost root]$ ls ls: 无法打开目录.: 权限不够 [user1@localhost root]$ cd [user1@localhost ~]$ exit exit [root@localhost ~] 上一次登录:六 4 月 10 16 :54 :40 CST 2021 pts/1 上 [user1@localhost ~]$ pwd/home/u ser1 [user1@localhost ~]$ su - root 密码: 上一次登录:六 4 月 10 16 :05 :17 CST 2021 从 192.168 .0.1 pts/2 上
usermod修改用户属性
usermod 命令用于修改已存在用户的基本信息
命令格式:usermod [-选项] 用户名
常用选项:
-u 修改用户UID
-d 修改用户家目录
-g 修改用户基本组
-c 修改用户描述信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost ~] [root@localhost ~] uid =1111 (user1) gid=1001 (user1) 组=1001 (user1)[root@localhost ~] [root@localhost ~] [root@localhost ~] uid =1800 (user8) gid=1800 (user8) 组=1800 (user8),1401 (test)[root@localhost ~]
userdel删除用户
userdel 用于删除给定的用户以及与用户相关的文件,该命令若不加选项仅删除用户账号,不删除用户相关文件
命令格式:userdel [-选项] 用户名
常用选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@localhost ~] [root@localhost ~] laowang lisi user1 user2 user4 user5 user8 xiaozhang [root@localhost ~] id: user8: no such user [root@localhost ~] [root@localhost ~] laowang lisi user1 user2 user5 user8 xiaozhang [root@localhost ~] id: user4: no such user
groupadd添加新组
groupadd 用于创建一个新的工作组,新组的信息将被添加到/etc/group文件中
命令格式:groupadd [-选项] 组名
常用选项:
1 2 3 #创建组 [root@localhost ~]# groupadd -g 1555 student [root@localhost ~]# cat /etc/group
/etc/group组信息文件
1 2 3 [root@localhost ~]# vim /etc/group root:x:0 :#每个字段含义解释:组名:组密码占位符:GID:组中附加用户
/etc/gshadow组密码文件
1 2 3 [root@localhost ~] root:::
groupmod修改组属性
groupmod 用于修改指定工作组属性
命令格式:groupmod [-选项] 组名
常用选项:
-g GID #修改组的GID
-n 新组名 #修改组名
1 2 3 4 5 #修改组名 [root@localhost ~]# groupmod -n stugrp student #修改组GID root@localhost ~]# groupmod -g 1666 stugrp
gpasswd组管理命令
gpasswd 是Linux工作组文件/etc/group和/etc/gshadow管理工具,用于将用户添加到组或从组中删除
命令格式:gpasswd [-选项] 用户名 组名
常用选项:
-a #将用户添加到工作组
-d #将用户从工作组中删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] 正在将用户“hary”加入到“stugrp”组中 [root@localhost ~] 正在将用户“tom”加入到“stugrp”组中 [root@localhost ~] 正在将用户“kenji”加入到“stugrp”组中 [root@localhost ~] 正在将用户“natasha”加入到“stugrp”组中 [root@localhost ~] 正在将用户“jack”加入到“stugrp”组中 [root@localhost ~] [root@localhost ~]stugrp: x: 1666 :hary ,tom,kenji,natasha,jack root@localhost ~] [root@localhost ~] 正在将用户“hary”从“stugrp”组中删除 [root@localhost ~] 正在将用户“jack”从“stugrp”组中删除 [root@localhost ~] 正在将用户“kenji”从“stugrp”组中删除 [root@localhost ~]
groupdel删除组
groupdel 用于删除指定工作组
命令格式:groupdel 组名
1 [root@localhost ~]# groupdel stugrp
chmod权限管理
chmod(英文全拼:change mode)设置用户对文件的权限
命令格式:chmod [-选项] 归属关系±=权限类别 文件…
root用户可以修改任何文件和目录的权限
文件所有者
常用选项:
归属关系:u 所有者 g 所属组 o 其他人
权限类别: r 读取 w 写入 x 执行 - 没有权限
操作:+ 添加权限 - 去除权限 = 重新定义权限
权限数字表示:r ---- 4 w ---- 2 x ---- 1 0 没有权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 [root@localhost ~] -rw-r--r--. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rwxr--r--. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rwxrw-r--. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rwxrw-rw-. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rwxrwxrwx. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rw-rwxrwx. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rw-rw-rwx. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rw-rw-rw-. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -r--r--r--. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rwxr--r--. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rwxrwxr--. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] -rwxrwxrwx. 1 root root 426 3月 28 15:00 hello [root@localhost ~] [root@localhost ~] drwxr-xr-x. 2 root root 6 4月 11 14:30 /test [root@localhost ~] [root@localhost ~] drwxrwxr-x. 2 root root 6 4月 11 14:30 /test [root@localhost ~] [root@localhost ~] drwxrwxrwx. 2 root root 6 4月 11 14:30 /test [root@localhost ~] [root@localhost ~] [root@localhost ~] drwxr-xr-x. 2 root root 6 4月 11 14:30 /test [root@localhost ~] [root@localhost ~] drwxrwxrwx. 2 root root 21 4月 11 14:37 /test [root@localhost ~] -rwxrwxrwx. 1 root root 426 3月 28 15:00 hello 所有者:rwx 4+2+1=7 所属组:r 4 其他人:r 4 [root@localhost ~] [root@localhost ~] -rwxr--r--. 1 root root 426 3月 28 15:00 hello 所有者:rw 4+2=6 所属组:rw 4+2=6 其他人:--- 0 [root@localhost ~] [root@localhost ~] -rw-rw----. 1 root root 426 3月 28 15:00 hello 所有者:rwx 4+2+1=7 所属组:wx 2+1=3 其他人:--- 0 [root@localhost ~] [root@localhost ~] -rw-r--r--. 1 root root 0 4月 11 14:45 /hello.txt [root@localhost ~] [root@localhost ~] -rwx-wx---. 1 root root 0 4月 11 14:45 /hello.txt [root@localhost ~] [root@localhost ~] ----------. 1 root student 0 4月 11 14:45 /hello.txt [root@localhost ~] drwxrwxrwx. 2 root root 21 4月 11 14:37 /test [root@localhost ~] [root@localhost ~] drwxr-xr-x. 2 root root 6 4月 11 14:54 /test/xxoo/ [root@localhost ~] -rw-r--r--. 1 root root 0 4月 11 14:37 /test/abc.txt [root@localhost ~] [root@localhost ~] -rwxrwxrwx. 1 root root 0 4月 11 14:37 /test/abc.txt [root@localhost ~] drwxrwxrwx. 2 root root 6 4月 11 14:54 /test/xxoo [root@localhost ~] [root@localhost ~] [root@localhost ~] drwxrwxrwx. 2 root root 6 4月 11 14:57 /test1 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] drwxrwxr-x. 2 root root 6 4月 11 14:59 /test1 [root@localhost ~] [user1@localhost ~]$ cd /test1 [user1@localhost test1]$ ls root.txt [user1@localhost test1]$ ll root.txt -rw-r--r--. 1 root root 0 4月 11 14:57 root.txt [user1@localhost test1]$ rm -rf root.txt [user1@localhost test1]$ ls rootbak [user1@localhost test1]$ rm -rf rootbak/ [user1@localhost test1]$ ls [user1@localhost test1]$ ll -d /test1 drwxrwxrwx. 2 root root 6 4月 11 14:59 /test1 总结: 1.用户对文件拥有写权限可以增加/修改/删除文件里内容,并不能删除文件,删除文件取决于对文件的父目录有没有rwx权限 2.用户对目录拥有rwx权限可以查看/创建/修改/删除目录下的文件
umask预设权限
umask用于显示或设置创建文件的权限掩码
命令格式:umask [-p] [-S] [mode]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 root@localhost ~] [root@localhost ~] drwxr-xr-x. 2 root root 6 4 月 11 15 :05 /test2 [root@localhost ~]umask : 用法:umask [-p] [-S] [模式] [root@localhost ~]umask 0022 [root@localhost ~] u=rwx,g=rx,o=rx [root@localhost ~] [root@localhost ~] [root@localhost ~] drwxrwxr-x. 2 root root 6 4 月 11 15 :09 /test3 [root@localhost ~] [root@localhost ~] [root@localhost ~] drwxr-xr-x. 2 root root 6 4 月 11 15 :10 /test4
chown归属关系管理
chown(英文全拼:change owner)用于设置文件的所有者和所属组关系
命令格式:
chown [-选项] 所有者:所属组 文档 #同时修改所有者和所属组身份
chown [-选项] 所有者 文档 #只修改所有者身份
chown [-选项] :所属组 文档 #只修改所属组身份
常用选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@localhost ~] [root@localhost ~] -rwxr--r--. 1 root student 0 4月 11 14:45 /hello.txt [root@localhost ~] [root@localhost ~] -rwxr--r--. 1 user1 student 0 4月 11 14:45 /hello.txt [root@localhost ~] [root@localhost ~] -rwxr--r--. 1 lisi lisi 4 4月 11 15:26 /hello.txt [root@localhost ~] [root@localhost ~] drwxr-xr-x. 2 root root 6 4月 11 15:30 /test5 [root@localhost ~] [root@localhost ~] drwxr-xr-x. 2 lisi lisi 6 4月 11 15:30 /test5 [root@localhost ~] [root@localhost ~] -rw-r--r--. 1 root root 0 4月 11 15:31 /test5/root.txt [root@localhost ~] [root@localhost ~] -rw-r--r--. 1 lisi lisi 0 4月 11 15:31 /test5/root.txt
SetUID特殊权限
SetUID(SUID):对于一个可执行的文件用了SUID权限后,普通用户在执行该文件后,临时拥有文件所有者的身份,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有身份
SetUID权限会附加在所有者的 x 权限位上,所有者的 x 权限标识会变成 s
设置SetUID命令格式:chmod u+s 文件名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #搜索命令绝对路径 [root@localhost ~]# which passwd/usr/ bin/passwd [root@localhost ~]# ll /usr/ bin/passwd -rwsr-xr-x. 1 root root 27832 6 月 10 2014 /usr/ bin/passwd [root@localhost ~]# which cat/usr/ bin/cat [root@localhost ~]# ll /usr/ bin/cat -rwxr-xr-x. 1 root root 54160 10 月 31 2018 /usr/ bin/cat #普通用户使用cat命令是默认无法查看/etc/ shadow文件内容 [lisi@localhost ~]$ cat /etc/ shadow cat: /etc/ shadow: 权限不够 #设置SUID权限 [root@localhost ~]# chmod u+s /usr/ bin/cat [root@localhost ~]# ll /usr/ bin/cat -rwsr-xr-x. 1 root root 54160 10 月 31 2018 /usr/ bin/cat #普通用户再次使用cat命令时临时获取文件所有者身份 [lisi@localhost ~]$ cat /etc/ shadow #去除SUID权限 [root@localhost ~]# chmod u-s /usr/ bin/cat [root@localhost ~]# ll /usr/ bin/cat -rwxr-xr-x. 1 root root 54160 10 月 31 2018 /usr/ bin/cat [root@localhost ~]# which vim/usr/ bin/vim [root@localhost ~]# ll /usr/ bin/vim -rwxr-xr-x. 1 root root 2294208 10 月 31 2018 /usr/ bin/vim #为vim设置SUID权限 [root@localhost ~]# chmod u+s /usr/ bin/vim [root@localhost ~]# ll /usr/ bin/vim -rwsr-xr-x. 1 root root 2294208 10 月 31 2018 /usr/ bin/vim [root@localhost ~]# ll /etc/ passwd -rw-r--r--. 1 root root 2737 4 月 10 17 :26 /etc/ passwd [root@localhost ~]# chmod u-s /usr/ bin/vim [root@localhost ~]# vim /etc/ passwd
SetGID特殊权限
SetGID(SGID):当对一个可执行的二进制文件设置了SGID后,普通用户在执行该文件时临时拥有其所属组的权限,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有组身份
当对一个目录作设置了SGID权限后,普通用户在该目录下创建的文件的所属组,均与该目录的所属组相同
SetGID权限会附加在所属组的 x 权限位上,所属组的 x 权限标识会变成 s
设置SetGID命令格式:chmod g+s 文件名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@localhost ~] [root@localhost ~] [root@localhost ~] drwxrwxrwx. 2 root root 6 4月 11 15:59 /test6 [root@localhost ~] [root@localhost ~] drwxrwsrwx. 2 root root 6 4月 11 15:59 /test6 [root@localhost ~] [root@localhost ~] -rw-r--r--. 1 root root 0 4月 11 16:00 /test6/1.txt [root@localhost ~] [root@localhost ~] drwxrwsrwx. 2 root lisi 19 4月 11 16:00 /test6 [root@localhost ~] [root@localhost ~] -rw-r--r--. 1 root lisi 0 4月 11 16:01 /test6/2.txt
Sticky BIT特殊权限
Sticky BIT(SBIT):该权限只针对于目录有效,当普通用户对一个目录拥有w和x权限时,普通用户可以在此目录下拥有增删改的权限,应为普通用户对目录拥有w权限时,是可以删除此目录下的所有文件
如果对一个目录设置了SBIT权限,除了root可以删除所有文件以外,普通用户就算对该目录拥有w权限,也只能删除自己建立的文件,不能删除其他用户建立的文件
SBIT权限会附加在其他人的 x 权限位上,其他人的 x 权限标识会变成 t
设置SBIT命令格式:chmod o+t 目录名
1 2 3 4 5 6 7 8 9 10 11 [root@localhost ~] [root@localhost ~] drwxrwxrwt. 2 root root 6 4月 11 16:07 /test [lisi@localhost test ]$ ls kenji.txt laowang.txt lisi.txt [lisi@localhost test ]$ rm -rf *rm : 无法删除"kenji.txt" : 不允许的操作rm : 无法删除"laowang.txt" : 不允许的操作
FACL访问控制列表
FACL(Filesystemctl Access Control List)文件系统访问控制列表:利用文件扩展属性保存额外的访问控制权限,单独为每一个用户量身定制一个权限
命令格式:setfacl 选项 归属关系:权限 文档
常用选项:
-m 设置权限
-x 删除指定用户权限
-b 删除所有用户权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 [root@localhost ~] [root@localhost ~] drwxrwx---+ 2 root yunwei 54 4 月 11 16 : 43 /yunwei/ [root@localhost ~] drwxrwxrwt. 2 root root 42 4 月 11 16 : 11 /test [root@localhost ~]getfacl: Removing leading '/' from absolute path names user::rwxuser: natasha: r-x group::rwx mask::rwx other::--- [natasha@localhost ~]$ ls /yunwei/ hell.sh kenji.txt lisi.txt [natasha@localhost yunwei]$ rm -rf kenji.txt rm: 无法删除"kenji.txt" : 权限不够 [natasha@localhost yunwei]$ touch natasha.txttouch: 无法创建"natasha.txt" : 权限不够 [natasha@localhost yunwei]$ vim kenji.txt [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]getfacl: Removing leading '/' from absolute path names user::rwxuser: hary: r-xuser: tom: r-xuser: natasha: r-xuser: jack: r-x group::rwx mask::rwx other::--- [root@localhost ~] [root@localhost ~]getfacl: Removing leading '/' from absolute path names user::rwxuser: hary: r-xuser: natasha: r-xuser: jack: r-x group::rwx mask::rwx other::--- [root@localhost ~] [root@localhost ~]getfacl: Removing leading '/' from absolute path names user::rwx group::rwx other::---
课后作业
1.创建test1用户,并指定用户UID为6666,指定用户描述信息为test1@163.com,指定用户解释器为/sbin/nologin
test1:x:6666:6666:test1@163.com :/home/test1:/sbin/nologin
2.创建名为stugrp组,将test1用户加入到stugrp组
[root@ localhost ~]# groupadd stugrp
[root@ localhost ~]# gpasswd -a test1 stugrp
3.请写出/etc/passwd文件中每个字段含义
用户名 密码占位符 UID GID 描述信息 家目录 解释器
4.创建test2用户,并设置密码为123456
[root@ localhost ~]# useradd test2
[root@ localhost ~]# passwd test2
5.修改root用户密码为123456
[root@ localhost ~]# passwd
6.请写出Linux系统下存放用户密码信息文件
/etc/shadow
7.设置test2用户首次登录系统需要修改密码
[root@ localhost ~]# chage -d 0 test2
8.使用root切换为test1用户身份
su - 用户名
9.将test2用户添加至stugrp组,并锁定用户密码
[root@ localhost ~]# gpasswd -a test2 stugrp
[root@ localhost ~]# passwd -l test2
10.删除test1用户,连同用户家目录一并删除
root@ localhost ~]# userdel -r test1
11.请写出Linux系统存放组信息文件,与组密码信息文件
[root@ localhost ~]# ls /etc/group
[root@ localhost ~]# ls /etc/gshadow
12.将test2用户从stugrp组中删除
[root@ localhost ~]# gpasswd -d test2 stugrp
13.在根下创建upload目录,并修改目录所有者为test2用户,所属组为stugrp组,并将lisi用户加入到stugrp组,修改所有者权限rwx,修改所属组权限为rwx,设置其他人没有任何权限
[root@ localhost ~]# mkdir /upload
[root@ localhost ~]# chown test2:stugrp /upload/
[root@ localhost ~]# gpasswd -a lisi stugrp
[root@ localhost ~]# chmod 770 /upload/
14.创建test3用户,非交互式设置用户密码为123456,并设置test3用户可以对upload目录拥有rx权限
[root@ localhost ~]# useradd test3
[root@ localhost ~]# echo 123456 | passwd --stdin test3
[root@ localhost ~]# setfacl -m u:test3:rx /upload/
[root@ localhost ~]# getfacl /upload/
15.在根下创建shared目录,并同时设置所有人都有完全权限(至少两种方法设置),要求所有普通用户在该目录下只能修改自己创建的文件
[root@ localhost ~]# mkdir /shared
[root@ localhost ~]# chmod ugo=rwx /shared/
[root@ localhost ~]# chmod 777 /shared/
[root@ localhost ~]# ll -d /shared/
[root@ localhost ~]# chmod o+t /shared/
常用特殊符号的使用
Linux系统下通配符起到了很大的作用,对于不确定的文档名称可以使用以下特殊字符表示
*常用的特殊符号,在文件名上,用来代表任意多个任意字符
? 常用的特殊符号,在文件名上,用来代表任意单个任意字符
[0-9] #在文件名上,用来代表多个字符或连续范围中的一个,若无则忽略
{a,b,cd,abcd} #在文件名上,用来代表多组不同的字符串,全匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #查找以tab结尾的文件 [root@localhost ~]# ls /etc/*tab [root@localhost ~]# ls /etc/*wd [root@localhost ~]# ls /etc/*.conf [root@localhost ~]# ls /etc/redhat* [root@localhost ~]# ls /etc/*ss* #查找以tty开头的文件,结尾以一个任意字符结尾 [root@localhost ~]# ls /dev/tty? [root@localhost ~]# ls /etc/host? [root@localhost ~]# ls /etc/pass?? #查找tty开头结尾以1-5连续字符结尾 [root@localhost ~]# ls /dev/tty[1-5] [root@localhost ~]# ls /dev/tty[4-9] [root@localhost ~]# ls /dev/tty[1,3,5,7,9,15,20,30] #查找tty开头结尾为不连续字符结尾 [root@localhost ~]# ls /dev/tty{1,3,5,7,9,15,20,30} [root@localhost ~]# ls /dev/tty{1..9} [root@localhost ~]# ls /dev/tty{1..10} [root@localhost ~]# ls /dev/tty[1-10]
grep文件内容过滤
grep用于查找文件中符合条件的字符串,它能利用正则表达式搜索文件中的字符串,并把匹配到的字符串的行打印出来
命令格式:grep [-选项] “查找条件” 目标文件
常用选项:
-n #以行号形式输出
-i #忽略字符串大小写
-v #显示不包含匹配的行(排除)
常用正则表达式符号
^字符串 #显示以该字符串开头的行
$字符串 #显示以该字符串结尾的行
^$ #显示空行
grep命令示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [root@localhost ~]root: x: 0 : 0 :root :/root :/bin/bash operator: x: 11 : 0 :operator :/root :/sbin/nologin [root@localhost ~]1 :root :x : 0 : 0 :root :/root :/bin/bash 10 :operator :x : 11 : 0 :operator :/root :/sbin/nologin [root@localhost ~] [root@localhost ~] [root@localhost ~]38 :sshd :x : 74 : 74 :Privilege-separated SSH :/var/empty/sshd :/sbin/nologin [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]grep: ^$: 没有那个文件或目录 /etc/fstab: 1 :/etc/fstab : 9 :/dev/mapper/centos-root / xfs defaults 0 0 /etc/fstab: 10 :UUID=ae55ec6b- 973b-498e-a366-f35e14b3d153 /boot xfs defaults 0 0 /etc/fstab: 11 :/dev/mapper/centos-swap swap [root@localhost ~]1 :9 :/dev/mapper/centos-root / xfs defaults 0 0 10 :UUID=ae55ec6b- 973b-498e-a366-f35e14b3d153 /boot xfs defaults 0 0 11 :/dev/mapper/centos-swap swap swap defaults 0 0 [root@localhost ~]2 :/dev/mapper/centos-root / xfs defaults 0 0 3 :UUID=ae55ec6b- 973b-498e-a366-f35e14b3d153 /boot xfs defaults 0 0 4 :/dev/mapper/centos-swap swap swap defaults 0 0 [root@localhost ~]
find文件/目录查找命令
find 命令根据预设的条件递归查找文件或目录所在位置
命令格式:find 查找路径 查找条件1 查找条件2 … [-exec 处理命令 {} ; ]
–exec 可接额外的命令来处理查找到结果
{} 代表find查找到的内容被放置{}中
; 代表额外处理命令结束
常用查找条件
-type 类型(f文件 d目录 l链接文件)
-name “文件名”
-iname 按文件名查找忽略大小写
-size 文件大小(k、M、G + 大于 - 小于)
-a (并且)两个条件同时满足
-o (或者)两个条件满足任意一个即可
-user 用户名
-mtime 按日期查找(+ 代表多少天之前 - 代表多少天之内,0代表24小时之内)
find命令范例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 [root@localhost ~]# ls /var/log #按照类型查找,类型为文件 [root@localhost ~]# find /var/log -type f [root@localhost ~]# ll boot.log-20210417 [root@localhost ~]# ll /var/log/boot.log-20210417 [root@localhost ~]# ll /var/log/vmware-network.2.log #按照类型查找,类型为目录 [root@localhost ~]# find /var/log -type d [root@localhost ~]# ll -d /var/log/tuned [root@localhost ~]# ll -d /var/log/qemu-ga #按照类型查找,类型为链接文件 [root@localhost ~]# find /var/log -type l [root@localhost ~]# fin /etc/ -type l [root@localhost ~]# find /etc/ -type l [root@localhost ~]# ll /etc/scl/conf #按照名字查找 [root@localhost ~]# find /etc/ -name passwd /etc/passwd /etc/pam.d/passwd#按照名字查找,类型为文件 [root@localhost ~]# find /etc/ -name passwd -type f #按照名字查找,以tab结尾,类型为文件 [root@localhost ~]# find /etc/ -name '*tab' -type f #按照名字查找,以pass开头,类型为文件 [root@localhost ~]# find /etc/ -name 'pass*' -type f [root@localhost etc]# find . -name '*.conf' -type f [root@localhost ~]# find /etc/ -name '*tab*' -type f #按照名字忽略大小写查找,类型为文件 [root@localhost ~]# find /etc/ -iname FSTAB -type f /etc/fstab [root@localhost ~]# find /etc/ -name FSTAB -type f #查找大于10k的文件 [root@localhost ~]# find /var/log -size +10k -type f [root@localhost ~]# du -h /var/log/boot.log-20210417 16 K /var/log /boot.log -20210417 #查找大于1M的文件 [root@localhost ~]# find /var/log -size +1M -type f [root@localhost ~]# du -h /var/log/audit/audit.log 2.4 M /var/log /audit/audit.log [root@localhost ~]# find /home -size +1M -type f #查找小于1M的文件 [root@localhost ~]# find /var/log -size -1M -type f [root@localhost ~]# du -h /var/log/spooler 0 /var/log /spooler#查找大于10k并且下于20k,类型为文件 [root@localhost ~]# find /var/log -size +10k -a -size -20k -type f #查找大于10k或者小于100k,类型为文件 [root@localhost ~]# find /var/log -size +10k -o -size -100k -type f #查找属于lisi用户的文件/目录 [root@localhost ~]# find /home -user lisi #查找30天之前被修改过,类型为文件 [root@localhost ~]# find /var/log -mtime +30 -type f [root@localhost ~]# find /var/log -mtime +10 -type f #查找10天之内被修改过,类型为文件 [root@localhost ~]# find /var/log -mtime -10 -type f root@localhost ~]# find /var/log -mtime -30 -type f #查找30之前被修改过,类型为文件,拷贝到/opt目录下 [root@localhost ~]# find /var/log -mtime -30 -type f -exec cp {} /opt \
题型:
查找/etc/目录下以.conf结尾的文件(只能在/etc这一层目录去查找)
[root@ localhost ~]# ls /etc/*.conf
查找/etc/目录下以.conf结尾的文件(包含所有的子目录)
[root@ localhost ~]# find /etc/ -name ‘*.conf’ -type f
压缩与解压缩
Linux独有压缩格式及命令工具:
gzip—> .gz
bzip2—> .bz2
xz—> .xz
压缩命令格式
gzip [选项…] 文件名
bzip2 [选项…] 文件名
xz [选项…] 文件名
查看压缩文件内容
zcat [选项…] 文件名
bzcat [选项…] 文件名
xzcat [选项…] 文件名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [root@localhost ~]# cp /etc/services /opt [root@localhost ~]# cd /opt [root@localhost opt]# ll services -rw-r--r--. 1 root root 670293 4 月 17 17 :06 services [root@localhost opt]# ll -h services -rw-r--r--. 1 root root 655 K 4 月 17 17 :06 services#使用gzip格式对文件进行压缩 [root@localhost opt]# gzip services [root@localhost opt]# ls services.gz [root@localhost opt]# ll -h services.gz -rw-r--r--. 1 root root 133 K 4 月 17 17 :06 services.gz#不解压查看压缩文件内容 [root@localhost opt]# zcat services.gz #解压文件 [root@localhost opt]# gzip -d services.gz #使用bzip2格式对文件进行压缩 [root@localhost opt]# bzip2 services [root@localhost opt]# ls services.bz2 [root@localhost opt]# ll -h services.bz2 -rw-r--r--. 1 root root 122 K 4 月 17 17 :06 services.bz2#不解压查看文件内容 [root@localhost opt]# bzcat services.bz2 #解压文件 [root@localhost opt]# bzip2 -d services.bz2 #使用xz格式对文件进行压缩 [root@localhost opt]# xz services [root@localhost opt]# ls services.xz [root@localhost opt]# ll -h services.xz -rw-r--r--. 1 root root 98 K 4 月 17 17 :06 services.xz#解压文件 [root@localhost opt]# xz -d services.xz
tar打包工具
tar命令用在linux下用于对文件/目录打包,使用 tar 程序打出来的包常称为 tar 包,tar 包文件通常都是以 .tar 结尾
tar 命令格式:tar 选项 压缩包名字 被压缩文件
常用选项:
-c 创建打包文件
-f 指定打包后的文件名称
-z 调用gzip压缩工具 -J 调用xz压缩工具 -j 调用bzip2压缩工具
-t 列出打包文档内容
-x 释放打包文件
-C 指定解压路径
-v 显示详细信息
tar命令范例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #同时打包多个文件/目录并使用gzip格式压缩 [root@localhost opt]# tar -czf xxx.tar.gz /etc/passwd /etc/fstab /home #将压缩包数据解压到/media目录 [root@localhost opt]# tar -xf xxx.tar.gz -C /media/ [root@localhost opt]# ls /media/etc [root@localhost opt]# rm -rf xxx.tar.gz #同时打包多个文件/目录并使用xz格式压缩 [root@localhost opt]# tar -cJf xx.tar.xz /etc/hostname /etc/services /home #错误语法,f选项要放到所有选项右边 [root@localhost opt]# tar -ft xx.tar.xz tar: 您必须从"-Acdtrux" 或是"--test-label" 选项中指定一个 请用“tar --help”或“tar --usage”获得更多信息。#不解压查看压缩包数据 [root@localhost opt]# tar -tf xx.tar.xz etc/hostname#将压缩包数据解压到/tmp目录 [root@localhost opt]# tar -vxf xx.tar.xz -C /tmp [root@localhost opt]# ls /tmp #同时打包多个文件/目录并使用bzip2格式压缩 [root@localhost opt]# tar -cjf abc.tar.bz2 /etc/hostname /etc/group /home #解压缩 [root@localhost opt]# tar -xf abc.tar.bz2 -C /media/
磁盘介绍
分区过程
添加新硬盘–分区–格式化文件系统–挂载使用
扇区是磁盘存储数据的最小单元,默认一个扇区可以存储512字节的数据
磁盘类型介绍
IDE接口类型:主要用于个人家用计算机领域,优点价格便宜,缺点数据传输速度慢
SCSI接口类型:主要用于服务器理领域,数据传输速度快,支持热插拔
SATA接口类型:串口磁盘,主要用于个人家用计算机领域
NVMe接口类型:固态硬盘接口
Linux常用分区格式
MBR分区格式:比较古老的分区格式,分为主分区,只能划分4个主分区,扩展分区(容器)逻辑分区,最大支持2.2T磁盘容量
IDE接口硬盘逻辑分区最多可以划分59个
SCSI接口硬盘逻辑分区最多可以划分11个
最大支持2.2T以内磁盘容量
GPT分区格式:可划分128个主分区,最大支持18EB磁盘容量(1EB=1024PB,1PB=1024TB,1TB=1024GB)
文件系统类型详解
文件管理系统,赋予分区文件系统分区才可以正常的使用,根文件系统,多少个多少个文件系统
CentOS5:分区默认使用文件系统类型ext3
CentOS6:分区默认使用文件系统类型ext4
ext4日志记录功能,意外宕机,通过日志记录把没有保存的数据,在系统再次重启时快速恢复回来
单个文件系统最大支持1EB的分区容量,单个文件最大可以存储16TB数据
CentOS7:分区默认使用文件系统类型xfs
xfs开启了日志记录的功能,数据恢复的时候比ext4文件系统块
单个文件系统最大支持8EB分区容量,单个文件最大可以存储500TB的数据
单个文件每秒读写数据的速度可以达到4G
swap文件系统:交换分区,硬盘空间去充当内存去使用
挂载
在Linux系统中用户无法直接使用硬件设备的,硬件设备在系统中都是以只读的方式存在的,必须挂载
挂载就是给我们用户提供一个可以使用设备的一个接口
挂载注意事项:
挂载点必须是一个目录,理论上还得是一个空目录
一个文件系统不允许重复挂载到多个目录下
一个目录不允许重复挂载多个文件系统
lsblk查看系统所有磁盘信息
lsblk(英文全拼:list block)用于列出当前系统所有磁盘与磁盘内的分区信息
命令格式:lsblk [选项…] [设备名]
常用选项:
-d #仅显示磁盘本身,不会列出磁盘的分区数据
-f #列出磁盘分区使用的文件系统类型
lsblk命令示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [root@localhost ~] 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 4.3G 0 rom /mnt/centos NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT [root@localhost ~] NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk [root@localhost ~] NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs 4cb9bb38-c34a-4415-9614-ba38642bb86d /boot └─sda2 LVM2_member cKn0jP-z8Bq-SNvl-BsNa-7vTg-GBU2-OiHCro ├─centos-root xfs 55dad88d-a600-42d1-b387-236db62ce396 / └─centos-swap swap 2e91599a-6d72-483d-add8-6dfb84296170 [SWAP] sr0 iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00 /mnt/centos [root@localhost ~] NAME FSTYPE LABEL UUID MOUNTPOINT sda1 xfs 4cb9bb38-c34a-4415-9614-ba38642bb86d /boot
df查看分区使用情况
df命令用于查看文件系统使用情况
命令格式:df [选项…] [参数…]
常用选项:
-h 以人类易读方式显示文件系统容量
T 显示文件系统类型
df 命令示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost ~] Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/centos-root 17811456 3746320 14065136 22% / devtmpfs 480884 0 480884 0% /dev tmpfs 497948 0 497948 0% /dev/shm tmpfs 497948 8340 489608 2% /run tmpfs 497948 0 497948 0% /sys/fs/cgroup /dev/sr0 4480476 4480476 0 100% /mnt /dev/sda1 1038336 169448 868888 17% /boot tmpfs 99592 12 99580 1% /run/user/42 tmpfs 99592 0 99592 0% /run/user/0 [root@localhost ~] Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 17G 3.6G 14G 22% /
du统计文件/目录大小
du命令用于统计磁盘下目录或文件大小
命令格式:du [选项…] [参数…]
常用选项:
-h #以人类易读方式(Kb,MB,GB)显示文件大小
-s #只统计每个参数的总数
du 命令示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost ~] # ls /dev hd [a-t] :IDE 设备sd [a-z] :SCSI 设备fd [0-7] :软盘驱动设备md [0-32] :软RAID 设备loop [0-7] :本地回环设设备lp [0-3] :打印机设备mem :内存设备null :空设备,也称为黑洞,任何写入的数据都将被丢弃zero :零资源设备,任何写入的数据都将被丢弃full :满设备,任何写入的数据都将失败tty [0-63] :虚拟终端设备random :随机数设备urandom :随机数设备port :存取I /O 端口
blkid查看设备属性
blkid命令显示块设备属性信息(设备名称,设备UUID,文件系统类型)
命令格式:blkid [选项…] [参数…]
blkid命令示例
1 2 3 4 5 6 7 8 9 10 11 [root@localhost ~]/dev/ sda1: UUID="4cb9bb38-c34a-4415-9614-ba38642bb86d" TYPE="xfs" /dev/ sda2: UUID="cKn0jP-z8Bq-SNvl-BsNa-7vTg-GBU2-OiHCro" TYPE="LVM2_member" /dev/ sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" /dev/m apper/centos-root: UUID="55dad88d-a600-42d1-b387-236db62ce396" TYPE="xfs" /dev/m apper/centos-swap: UUID="2e91599a-6d72-483d-add8-6dfb84296170" TYPE="swap" root@localhost ~]/dev/ sda1: UUID="4cb9bb38-c34a-4415-9614-ba38642bb86d" TYPE="xfs"
MBR分区格式
fdisk命令用于查看磁盘使用情况和磁盘分区(MBR分区格式)
命令格式:fdisk [选项…] [设备路径]
常用选项:-l 列出磁盘分区表类型与分区信息
分区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 [root@localhost ~] m p n q d w a b c l o s t u v x 命令(输入 m 获取帮助):m 命令(输入 m 获取帮助):p 命令(输入 m 获取帮助):n Select (default p): 回车 分区号 (1-4,默认 1):回车 起始 扇区 (2048-209715199,默认为 2048):回车 Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):p 磁盘标签类型:dos 磁盘标识符:0xefc65503 设备 Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux 命令(输入 m 获取帮助):n Select (default p): 分区号 (2-4,默认 2): 起始 扇区 (20973568-209715199,默认为 20973568): Last 扇区, +扇区 or +size{K,M,G} (20973568-209715199,默认为 209715199):+10G 命令(输入 m 获取帮助):n Select (default p): 分区号 (3,4,默认 3): 起始 扇区 (41945088-209715199,默认为 41945088): Last 扇区, +扇区 or +size{K,M,G} (41945088-209715199,默认为 209715199):+10G 命令(输入 m 获取帮助):p 磁盘标签类型:dos 磁盘标识符:0xefc65503 设备 Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux /dev/sdb2 20973568 41945087 10485760 83 Linux /dev/sdb3 41945088 62916607 10485760 83 Linux 命令(输入 m 获取帮助):n Select (default e): p 起始 扇区 (62916608-209715199,默认为 62916608): Last 扇区, +扇区 or +size{K,M,G} (62916608-209715199,默认为 209715199):+10G 命令(输入 m 获取帮助):n If you want to create more than four partitions, you must replace a primary partition with an extended partition first. 命令(输入 m 获取帮助):d4 分区号 (1-4,默认 4): 分区 4 已删除 命令(输入 m 获取帮助):d 分区号 (1-3,默认 3):3 分区 3 已删除 命令(输入 m 获取帮助):p 磁盘标签类型:dos 磁盘标识符:0xefc65503 设备 Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux /dev/sdb2 20973568 41945087 10485760 83 Linux 命令(输入 m 获取帮助):n Select (default p): 分区号 (3,4,默认 3): 起始 扇区 (41945088-209715199,默认为 41945088): Last 扇区, +扇区 or +size{K,M,G} (41945088-209715199,默认为 209715199):+10G 命令(输入 m 获取帮助):n Select (default e): Using default response e 已选择分区 4 起始 扇区 (62916608-209715199,默认为 62916608): Last 扇区, +扇区 or +size{K,M,G} (62916608-209715199,默认为 209715199): 分区 4 已设置为 Extended 类型,大小设为 70 GiB 命令(输入 m 获取帮助):n 添加逻辑分区 5 起始 扇区 (62918656-209715199,默认为 62918656): Last 扇区, +扇区 or +size{K,M,G} (62918656-209715199,默认为 209715199):+10G 分区 5 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区 磁盘标签类型:dos 磁盘标识符:0xefc65503 设备 Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux /dev/sdb2 20973568 41945087 10485760 83 Linux /dev/sdb3 41945088 62916607 10485760 83 Linux /dev/sdb4 62916608 209715199 73399296 5 Extended /dev/sdb5 62918656 83890175 10485760 83 Linux 命令(输入 m 获取帮助):w
格式化文件系统
mkfs命令用于在分区上建立文件系统
常用文件系统类型
命令格式:
mkfs.xfs 分区设备路径 #格式化为xfs类型文件系统
mkfs.ext4 分区设备路径 #格式化为ext4类型文件系统
1 2 3 4 5 6 [ root@localhost ~] [ root@localhost ~] /dev/sdb1 : UUID= "3bb79b0b-3f17-4ad9-ad47-f00dcb6a5afa" TYPE = "xfs"
mount挂载
mount文件系统挂载命令
命令格式:mount 设备路径 挂载点目录
1 2 3 4 5 6 7 8 9 10 11 12 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] 文件系统 类型 容量 已用 可用 已用% 挂载点/dev/sdb 1 xfs 10 G 33 M 10 G 1 % /mybak
总结:
添加硬盘—查看系统是否识别新硬盘 lsblk
划分分区—fdisk 设备路径
格式化文件系统—mkfs.xfs
挂载—创建挂载点目录–挂载 mount 设备路径 挂载点目录
查看分区使用情况 df -hT
umount卸载
umount命令用于卸载文件系统
命令格式:umount 挂载点目录
1 2 3 #卸载文件系统 [root@localhost ~]# umount /mybak [root@localhost ~]# df -h
开机自动挂载
/etc/fstab用于存放文件系统信息,当系统启动时,系统会自动读取文件内容将指定的文件系统挂载到指定的目录
文件内容详解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [root@localhost ~]/dev/m apper/centos-root / xfs defaults 0 0 UUID=5 d36a8b5-5 a58-450 f-acf9-81 fcddaa62de /boot xfs defaults 0 0 /dev/m apper/centos-swap swap swap defaults 0 0 第一个字段:要挂载的设备路径 第二个字段:挂载点目录 第三个字段:设备文件系统类型 第四个字段:挂载参数,参数如下↓ sync,async: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的内存机制,默认为异步(async) atime,noatime:更新访问时间/不更新访问时间,访问分区时,是否更新文件的访问时间,默认为更新 ro,rw:挂载文件为只读(ro)或读写(rw),默认为rw auto,noauto:自动挂载/手动挂载,执行mount -a时,是否自动挂载/ etc/fstab文件内容,默认为自动(auto) dev,nodev:是否允许此文件系统上,可建立装置文件,默认为允许(dev) suid,nosuid:是否允许文件系统上含有SUID与SGID特殊权限,默认为允许(SUID) exec,noexec:是否允许文件系统上拥有可执行文件,默认为允许(exec) user,nouser:是否允许普通用户执行挂载操作,默认为不允许(nouser),只有root用户可以挂载分区 defaults默认值:代表async,rw,auto,dev,suid,exec,nouser七个选项 第五个字段:是否对文件系统进行备份,0 不备份,1 为备份 第六个字段:是否检查文件系统顺序,允许的数字是0 ,1 ,2 ,0 表示不检查,1 的优先权最高/dev/m apper/centos-root / xfs defaults 0 0 UUID=ae55ec6b-973 b-498 e-a366-f35e14b3d153 /boot xfs defaults 0 0 /dev/m apper/centos-swap swap swap defaults 0 0 /dev/ sdb1 /mybak xfs defaults 0 0
mount常用选项:
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
-o:该选项后边可跟挂载时额外参数
remount命令:重新挂载文件系统,在文件系统出错时或重新挂载文件系统时非常重要,
1 [root@localhost ~]# mount -a
GPT分区格式
gdisk命令用于查看磁盘使用情况和磁盘分区(GPT分区格式)
命令格式:gdisk [选项…] [设备路径]
常用选项:-l 列出磁盘分区表类型与分区信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 [root@localhost ~] GPT fdisk (gdisk) version 0.8 .10 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries. Command (? for help): ? p n q d w Command (? for help): n Partition number (1 -128 , default 1 ): 回车 First sector (34 -209715166 , default = 2048 ) or {+-}size{KMGTP}: 回车 Last sector (2048 -209715166 , default = 209715166 ) or {+-}size{KMGTP}: +20 G Hex code or GUID (L to show codes, Enter = 8300 ): Command (? for help): p Disk /dev/sdc: 209715200 sectors, 100.0 GiB ... Total free space is 167772093 sectors (80.0 GiB) Number Start (sector) End (sector) Size Code Name 1 2048 41945087 20.0 GiB 8300 Linux filesystem Command (? for help): w Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/sdc. The operation has completed successfully. [root@localhost ~] [root@localhost ~] /dev/sdc1: UUID="c57746eb-8170-4c86-82ad-6aae95de19f3" TYPE="xfs" [root@localhost ~] [root@localhost ~] [root@localhost ~] /dev/sdc1 xfs 20 G 33 M 20 G 1 % /webbak [root@localhost ~]/dev/mapper/centos-root / xfs defaults 0 0 UUID=ae55ec6b-973b -498e -a366-f35e14b3d153 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb1 /mybak xfs defaults 0 0 /dev/sdc1 /webbak xfs defaults 0 0 [root@localhost ~]
LVM逻辑卷
逻辑卷:LVM(Logical Volume Manager)逻辑卷管理系统
逻辑卷可以实现将底层的物理分区整合成一个大的虚拟硬盘
逻辑卷技术是通过Linux系统内核dm(device mapper)设备映射组件
创建卷组
创建卷组思路:将创建好的物理卷组成卷组(或者直接创建卷组)
命令格式:vgcreate 卷组名 设备路径1 设备路径2…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@localhost ~] [root@localhost ~] --- Volume group --- VG Name systemvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read /write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 19.99 GiB PE Size 4.00 MiB Total PE 5118 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 19.99 GiB VG UUID KEP7XS-wrkI-rTUY-RqBa-UJA6-YRkK-iKDabR [root@localhost ~] VG systemvg 2 0 0 wz--n- 19.99 g 19.99 g
创建逻辑卷
创建逻辑卷思路:从创建好的卷组中创建逻辑卷
命令格式:lvcreate -L 大小 -n 逻辑卷名 卷组名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@localhost ~] Logical volume "mylv" created. [root@localhost ~] LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <17 .00 g swap centos -wi-ao---- 2 .00 g mylv systemvg -wi-a----- 10 .00 g [root@localhost ~] LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv systemvg -wi-a----- 10 .00 g [root@localhost ~] VG centos 1 2 0 wz--n- <19 .00 g 0 systemvg 2 1 0 wz--n- 19 .99 g 9 .99 g
格式化文件系统
1 2 3 4 5 6 7 8 9 10 11 12 [root@localhost ~] [root@localhost ~]/dev/ systemvg/mylv: UUID="7f08daf8-ae3c-40b2-a282-4514a6f37111" TYPE="xfs" [root@localhost ~] [root@localhost ~] [root@localhost ~]/dev/m apper/systemvg-mylv xfs 10G 33M 10G 1% / dbbak
扩展逻辑卷
逻辑卷支线上扩容,逻辑卷的空间来源于卷组,当卷组有足够的空间是,才可以扩展逻辑卷
扩展命令:lvextend
1 2 3 4 5 6 7 8 9 [root@localhost ~] [root@localhost ~] LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <17 .00 g swap centos -wi-ao---- 2 .00 g mylv systemvg -wi-ao---- 19 .00 g
扩展文件系统
当逻辑卷扩大以后,也需要多逻辑卷的文件系统进行扩展
刷新文件系统容量:
xfs_growfs #用于扩容XFS设备
resize2fs #用于扩容EXT3/EXT4设备(了解)
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@localhost ~] /dev/mapper/systemvg-mylv xfs 19G 33M 19G 1% /dbbak [root@localhost ~] VG centos 1 2 0 wz--n- <19.00g 0 systemvg 2 1 0 wz--n- 19.99g 1016.00m
扩展卷组
卷组的空间来源于物理分区,当卷组没有足够空间提供给逻辑卷时,须扩容卷组
扩展卷组命令:vgextend
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@localhost ~] [root@localhost ~] VG centos 1 2 0 wz--n- <19.00 g 0 systemvg 6 1 0 wz--n- <59.98 g <40.98 g [root@localhost ~] [root@localhost ~] LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <17.00 g swap centos -wi-ao---- 2.00 g mylv systemvg -wi-ao---- 59.00 g [root@localhost ~]/dev/mapper /systemvg-mylv 59G 34M 59G 1% /dbbak
课后作业
1.查看/var/log目录下以包含log的文件
[root@ localhost ~]# ls /var/log/log
2.查看/var/log目录下以数字结尾的文件
[root@ localhost ~]# ls /var/log/*[0-9]
3.查看/var/log目录下以字母结尾的文件(包括大写)
[root@ localhost ~]# ls /var/log/*[a-Z]
4.过滤/etc/sudoers文件以root开头的行
root@ localhost ~]# grep ^root /etc/sudoers
root ALL=(ALL) ALL
5.看/etc/sudoers文件有效的配置
[root@ localhost ~]# grep -v ‘^#’ /etc/sudoers | grep -v ‘^$’ -n
6.查找/etc/目录下crontab文件存放位置,并查看文件内容
[root@ localhost ~]# find /etc/ -name crontab -type f
[root@ localhost ~]# cat /etc/crontab
[root@ localhost ~]# find /etc/ -name crontab -type f -exec cat {} ;
7.查找10分钟内被修改的文件
[root@ localhost ~]# find / -cmin -10 -type f
8.查找/var/log目录下30天之前被修改且大于1M的文件,清空文件内容
[root@ localhost ~]# find /var/log -mtime +30 -type f -size +10k -exec cp /dev/null {} ;
9.Linux下你常熟悉的压缩格式有哪些?
gzip bzip2 xz
10.对/home目录打包并压缩,打包后名为home.tar.gz
[root@ localhost ~]# tar -czf home.tar.gz /home
11.将home.tar.gz压缩包内容解压至/homebak目录下
[root@ localhost ~]# tar -xvf home.tar.gz -C /homebak/
12.MBR分区格式可以划分多少个主分区?支持多大容量磁盘?
4个主分区,2.2T
13.GPT分区格式可以划分多少个主分区?支持多大容量磁盘?
128主分区,18EB
14.CentOS7分区默认使用的文件系统类型是什么?
xfs
15.如何查看一块磁盘的分区格式?及扩展分区大小?
[root@ localhost ~]# fdisk -l /dev/sdc
磁盘标签类型:gpt
16如何查看一块磁盘剩余容量?
[root@ localhost ~]# lsblk /dev/sdc
17.linux下开机自动挂载文件是哪个?
/etc/fstab
18.如何查看一个分区文件系统类型?及使用情况?
[root@ localhost ~]# df -hT
19.为根分区扩容40G空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [root@localhost ~] VG centos 1 2 0 wz--n- <19.00 g 0 [root@localhost ~] [root@localhost ~] LV VG Attr LSize root centos -wi-ao---- <17.00 g [root@localhost ~] [root@localhost ~] root centos -wi-ao---- <56.00 g [root@localhost ~] 文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper /centos-root xfs 17G 4.4G 13G 26% / [root@localhost ~] [root@localhost ~] 文件系统 容量 已用 可用 已用% 挂载点/dev/mapper /centos-root 56G 4.4G 52G 8% /
删除逻辑卷
逻辑卷的删除不允许联机操作,需要先卸载,在执行删除
在执行删除操作时,首先删除LV逻辑卷,在删除VG卷组,最后删除PV物理卷
删除命令:lvremove
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost ~] Logical volume systemvg/mylv contains a filesystem in use. [root@localhost ~] [root@localhost ~] Do you really want to remove active logical volume systemvg/mylv? [y/n]: y Logical volume "mylv" successfully removed [root@localhost ~] Volume group "systemvg" successfully removed
逻辑卷的缩减
命令lvreduce
不允许连接缩减
先缩减文件系统的空间,在缩减逻辑卷的空间
RAID磁盘阵列
RAID中文全称:独立磁盘冗余阵列 ,简称磁盘阵列
RAID可通过技术(软件/硬件)将多个独立的磁盘整合成一个巨大容量大逻辑磁盘使用
RAID可以提高数据I/O(读写)速度,和冗余数据的功能
RAID级别
RAID0:等量存储,至少由2块磁盘组成,同一个文档等量存放在不同的磁盘并行写入数据来提高效率,但只是单纯的提高效率,并没有冗余功能,如果其中一块盘故障,数据会丢失,不适合存放重要数据
RAID1:完整备份,至少由两块磁组成,同一个文档复制成多份存储到不同磁盘提高可靠性,读写速度没有提升,适合存储重要的数据
RAID2:至少由3块磁盘组成,数据分散存储在不同磁盘,在读写数据时需要对数据时时校验,由于采用的校验算法复杂,数据量比原有数据增大,而且导致硬件开销较大
RAID3:至少由三块磁盘组成,同一份文档分散写入不同的磁盘,校验数据单独存放在另外一块磁盘,由于每次读写操作都会访问校验盘,容易导致校验盘长时间高负荷工作而挂掉,如果校验盘损坏数据将无法恢复
RAID4:与RAID3类似,至少由3块磁盘组成,同一份文档分散存写入不同磁盘,校验数据单独存放在另外一块磁盘,由于每次读写操作都会访问校验盘,容易导致校验盘长时间高负荷工作而挂掉,如果校验盘损坏数据将无法恢复,与RAID3的区别是数据分割方式不一样
RAID5:至少由3块磁盘组成,同一份文档分散写入不同磁盘,每个硬盘都有校验数据,其中校验数据会占用磁盘三分之一的空间,三分之二的空间存放原始数据,允许同时坏一块磁盘,当一块磁盘损坏,其他磁盘里的数据配合校验信息可将数据恢复回来
RAID6:至少由4块磁盘组成,同一份文档分散写入不同磁盘,每个磁盘都有校验数据,由于采用双校验算法,所以校验数据量是RAID5的两倍,需要占用2块磁盘空间存放校验数据,两块盘存放原始数据,由于数据校验的算法计算量偏大,所以在速写速度上没有RAID5快,允许同时坏2块磁盘
RAID7:美国SCC公司专利,花钱
RAID10:RAID10=RAID1+RAID0合二为一,最少需要4块磁盘,先将4块硬盘组成两组RAID1,在将两组RAID1组成一个RAID0,既提高数据读写速度,又能保障数据安全性,缺点是可用容量是总容量的一半
实现RAID方式
实现RAID通常有三种方式,通过软件技术实现RAID功能(软RAID)
外接式磁盘阵列柜,被常用在大型服务器上,不过这类产品价格昂贵
RAID磁盘阵列卡,分为服务器自带和额外安装,硬RAID比软RAID更安全稳定,RAID卡带有缓存功能可实现数据自动恢复,RAID卡有电池
进程管理
什么是程序:用计算机语言编写的命令序列集合,用来实现特定的目标或解决特定的问题,程序占用磁盘空间,程序是静态并且是永久的
什么是进程:正在运行中的程序叫进程,占用内存空间,进程是动态的,进程是有生命周期的,进程有自己的独立内存空间,每启动一个进程,系统就会为它分配内存空间并分配一个PID号,每个进程都会对应一个父进程,而父进程可以复制多个子进程,每种进程都有两种方式存在,前台与后台,一般进程都是以后台方式运
什么是线程:线程也被称为轻量级进程,被包含在进程中,是进程的一个子集,是进程中的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务,每个线程都是独立的,线程之间共享进程的内存空间,在多线程的程序中,由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中)
查看进程树
pstree以树状结构显示进程信息,包括进程之间的关系
命令格式:pstree [选项…] [参数…]
常用选项:
-p #显示进程PID
-a #显示完整的命令行
-u #列出每个进程所属账号名称
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #查看进程树[root@localhost ~] # pstree systemd─┬─ModemManager───2 *[{ModemManager}] CentOS7版本:天父进程systemd CentOS6版本:天父进程init,Apstart CentOS5版本:天赋进程init #以PID形式显示进程信息[root@localhost ~] # pstree -p systemd (1 )─┬─ModemManager (6714 )─┬─{ModemManager}(6739 ) #查看系统用户的进程信息[root@localhost ~] # pstree -p lisisshd (15086 )───bash (15089 )───vim (15244 )[root@localhost ~] # pstree -pa lisi sshd,15086 └─bash,15089 └─vim,15244 1 .txt #查看系统所有用户的进程 root@localhost ~]# pstree -up ... ├─smartd(6726 ) ├─sshd(7337 )─┬─sshd(8880 )───bash(8887 )───pstree(15395 ) │ └─sshd(15066 )───sshd(15086 ,lisi)───bash(15089 )───vim(15244 )
ps aux:unix格式静态查看系统进程,查看系统所有进程信息
a #显示当前终端所有进程
u #以用户格式输出
x #当前用户在所有终端下的进程
ps -ef:Linux格式静态查看系统进程,查看系统所有进程信息
-e #显示系统所有进程
-l #以长格式输出信息
-f #显示最完整的进程信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@localhost ~] USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 2.2 0.3 127992 6576 ? Ss 09 :08 0 :01 /usr/ lib/systemd/ systemd --switched-root user:进程属于那个用户 PID :进程PID号 %CPU:进程占用CPU资源百分比 %MEM:进程占用物理内存百分比 VSZ :进程使用掉的虚拟内存量(单位:Kb) RSS :进程占用固定内存量(单位:Kb) TTY :进程在那个终端运行,如果内核直接调用则显示“?”,tty1-tty6表示本机终端登录的用户进程,pts/0 -255 则表示远程终端登录用户的进程 STAT:进程状态:R(Running)运行,S(Sleep)休眠,s包含子进程,T(stop)停止,Z(Zombie)僵尸,+后台进程 START:进程启动时间 TIME :占用CPU运算时间 COMMAND:产生进程的命令 [root@localhost ~] UID PID PPID C STIME TTY TIME CMD root 1 0 0 09 :08 ? 00 :00 :01 /usr/ lib/systemd/ systemd --switched-root --system --dese
top查看系统健康状态
top命令动态来查看系统运行性能及状态信息
命令格式:top [选项…]
常用选项:-d #指定刷新秒数,默认为3秒刷新一次
交互界面显示指令:
键盘上下键翻行
h #获取交互模式帮助
P(大写) #按照CPU使用资源排序
M #按照内存使用资源排序
q #退出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 [root@localhost ~] top - 21:22:04 up 12:13, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1863224 total, 1502920 free, 107872 used, 252432 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 1565576 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8317 root 20 0 161984 2220 1568 R 0.7 0.1 0:01.62 top 第二列:21:22:04:当前系统时间 第三列:up 12:13:系统运行时间,该系统以运行12小时13分钟(up 10 day,12:13 代表运行10天12小时13分钟) 第四列:2 users:当前系统登录终端数量 第五列:load average: 0.00, 0.01, 0.05:CPU1分钟,5分钟,15分钟之前平均负载量,根据CPU核数判断系统CPU负载量,1核CPU若高于1代表负载过高,2核CPU若高于2代表负载过高,依次类推。。。 第二列:115 total:当前系统中进程的总数量 第三列:1 running:正在运行的进程数量 第四列:114 sleeping:正在睡眠的进程数量 第五列:0 stopped:正在停止的进程数量 第六列:0 zombie:僵尸进程数量,僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。 ps -A -o stat,ppid,pid,cmd | grep "^Zz" 命令解释: -A 参数列出所有进程 -o 自定义输出字段,我们设定显示字段为 stat(状态), ppid(父进程id), pid(进程id),cmd(命令)这四个参数,因为状态为 z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程 kill -9 + 父进程号 第二列:0.0 us:用户进程占用的CPU百分比 第三列:0.0 sy:系统进程占用的CPU百分比 第四列:0.0 ni:改变过优先级的用户进程占用的CPU百分比 第五列:100.0 id:空闲的CPU百分比(重点关注) 第六列:0.0 wa:等待输入/输出的进程的占用CPU百分比 第七列:0.0 hi:硬中断请求服务占用的CPU百分比 第八列:0.0 si:软中断请求服务占用的CPU百分比 第九列:0.0 st:虚拟时间百分比,当有虚拟机时,虚拟CPU等待实际CPU的时间百分比 第二列:1863224 total:物理内存总量,单位KB 第三列:1502516 free: 空闲内存总量,单位KB 第四列:108240 used: 以使用的内存总量,单位KB 第五列:252468 buff/cache:块设备与普通文件占用的缓存数量 第二列:2097148 total:交换空间总量,单位KB 第三列:2097148 free:可用空闲交换空间总量,单位KB 第四列:0 used::以使用的交换空间总量,单位KB 第五列:1565180 avail Mem:可用于进程下一次分配的物理内存数量 PID:进程PID号 USER:进程所有者的用户名 PR:进程优先级执行顺序,越小越优先被执行 NI:负值表示高优先级,正值表示低优先级,越小越优先被执行 VIRT:进程使用的虚拟内存总量,单位kb RES:进程使用的、未被换出的物理内存大小,单位kb SHR:共享内存大小,单位kb S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU:进程使用的CPU百分比(重点关注) %MEM:进程使用的物理内存百分比(重点关注) TIME+:进程使用的CPU时间总计,单位1/100秒 COMMAND:命令名/命令行
检索进程
pgrep 通过匹配其程序名,找到匹配的进程
命令格式:pgrep [选项…] [参数…]
常用选项:
-l #输出进程名与PID
-U #检索指定用户进程
-t #检索指定终端进程
-x #精确匹配完整进程名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #过滤sshd进程 [root@localhost ~]# pgrep sshd 7337 8880 15066 15086 17027 过滤sshd进程,并显示进程名称 [root@localhost ~]# pgrep -l sshd 7337 sshd8880 sshd15066 sshd15086 sshd17027 sshd#过滤指定用户的进程 [root@localhost ~]# pgrep -lU lisi 15086 sshd15089 bash15244 vim#按照用户名过滤进程时,选项不要颠倒 [root@localhost ~]# pgrep -Ul lisi pgrep: invalid user name: l#查看系统所有终端用户 [root@localhost ~]# who root pts/0 2021 -04 -24 14 :06 (192.168 .0 .1 ) lisi pts/1 2021 -04 -24 15 :57 (192.168 .0 .1 ) root pts/2 2021 -04 -24 16 :29 (192.168 .0 .1 )#过滤用户在指定终端开启的进程信息 [root@localhost ~]# pgrep -lU lisi -t pts/1 15089 bash15244 vim#过滤用户在指定终端开启的进程信息 [root@localhost ~]# pgrep -lU lisi -t pts/3 19704 bash19754 top#精确匹配进程名(没有则不显示) [root@localhost ~]# pgrep -x ssh #精确匹配进程名 [root@localhost ~]# pgrep -xl crond 7362 crond
进程的前后台调度
& #将进程放入后台运行
jobs -l #查看后台进程列表
fg 进程编号 #将后台进程恢复至前台运行
ctrl + z 组合键 #挂起当前进程并放入后台
bg 进程编号 #激活后台被挂起进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@localhost ~]# sleep 5m & [1 ] 20130 #查看后台进程信息 [root@localhost ~]# jobs -l [1 ]+ 20130 运行中 sleep 5 m &#将后台进程放入前台运行 [root@localhost ~]# fg 1 sleep 5 m#挂起前台进程放入后台 [root@localhost ~]# jobs [1 ]+ 已停止 sleep 5 m#激活后台的进程 [root@localhost ~]# bg 1 [1 ]+ sleep 5 m & [root@localhost ~]# jobs -l [1 ]+ 20130 运行中 sleep 5 m &
杀死进程
杀死进程的方式
ctrl + c 组合键结束当前命令程序
kill [选项…] PID
常用选项:-l #列出可用进程信号
常用信号:-1重启进程,-9强制杀死进程,-15正常杀死进程(默认信号无需指定)
killall -9 进程名 #强制杀死进程
killall -9 -u 用户名 #强制杀死该用户所有进程
pkill -9 进程名 #强制杀死进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 #结束前台正在运行的进程 [root@localhost ~ ]# sleep 5m ^C#启用进程放入后台 [root@localhost ~ ]# sleep 5m & [1 ] 21150 [root@localhost ~ ]# sleep 6m & [2 ] 21155 [root@localhost ~ ]# sleep 7m & [3 ] 21159 [root@localhost ~ ]# sleep 8m & [4 ] 21162 #查看后台进程 [root@localhost ~ ]# jobs -l [1 ] 21150 运行中 sleep 5 m & [2 ] 21155 运行中 sleep 6 m & [3 ]- 21159 运行中 sleep 7 m & [4 ]+ 21162 运行中 sleep 8 m &#杀死后台指定的进程(按照PID) [root@localhost ~ ]# kill 21150 #查看后台进程 [root@localhost ~ ]# jobs -l [1 ] 21150 已终止 sleep 5 m [2 ] 21155 运行中 sleep 6 m & [3 ]- 21159 运行中 sleep 7 m & [4 ]+ 21162 运行中 sleep 8 m & [root@localhost ~ ]# kill 21155 [root@localhost ~ ]# jobs -l [2 ] 21155 已终止 sleep 6 m [3 ]- 21159 运行中 sleep 7 m & [4 ]+ 21162 运行中 sleep 8 m &#强制杀死进程 [root@localhost ~ ]# kill -9 21159 [root@localhost ~ ]# jobs -l [3 ]- 21159 已杀死 sleep 7 m [4 ]+ 21162 运行中 sleep 8 m &#启动进程 [root@localhost ~ ]# sleep 4m & [5 ] 21402 [root@localhost ~ ]# sleep 5m & [6 ] 21406 [root@localhost ~ ]# sleep 6m & [7 ] 21409 [root@localhost ~ ]# sleep 7m & [8 ] 21412 [root@localhost ~ ]# jobs -l [4 ] 21162 运行中 sleep 8 m & [5 ] 21402 运行中 sleep 4 m & [6 ] 21406 运行中 sleep 5 m & [7 ]- 21409 运行中 sleep 6 m & [8 ]+ 21412 运行中 sleep 7 m &#按照进程名去杀 [root@localhost ~ ]# killall sleep [4 ] 已终止 sleep 8 m [5 ] 已终止 sleep 4 m [6 ] 已终止 sleep 5 m [7 ]- 已终止 sleep 6 m [8 ]+ 已终止 sleep 7 m#启动进程 [root@localhost ~ ]# sleep 5m & [1 ] 21491 [root@localhost ~ ]# sleep 6m & [2 ] 21495 [root@localhost ~ ]# sleep 7m & [3 ] 21498 [root@localhost ~ ]# jobs -l [1 ] 21491 运行中 sleep 5 m & [2 ]- 21495 运行中 sleep 6 m & [3 ]+ 21498 运行中 sleep 7 m &#按照进程名强制杀死进程 [root@localhost ~ ]# killall -9 sleep [1 ] 已杀死 sleep 5 m [2 ]- 已杀死 sleep 6 m [3 ]+ 已杀死 sleep 7 m [root@localhost ~ ]# who root pts/0 2021 -04 -24 14 :06 (192.168 .0 .1 ) lisi pts/1 2021 -04 -24 15 :57 (192.168 .0 .1 ) root pts/2 2021 -04 -24 16 :29 (192.168 .0 .1 ) lisi pts/3 2021 -04 -24 17 :14 (192.168 .0 .1 )#杀死指定用户的所有进程(讲用户提出系统) [root@localhost ~ ]# killall -9 -u lisi [root@localhost ~ ]# who root pts/0 2021 -04 -24 14 :06 (192.168 .0 .1 ) root pts/2 2021 -04 -24 16 :29 (192.168 .0 .1 )#pkill命令演示 [root@localhost ~ ]# sleep 4m & [1 ] 21870 [root@localhost ~ ]# sleep 5m & [2 ] 21873 [root@localhost ~ ]# sleep 6m & [3 ] 21876 [root@localhost ~ ]# jobs [1 ] 运行中 sleep 4 m & [2 ]- 运行中 sleep 5 m & [3 ]+ 运行中 sleep 6 m & [root@localhost ~ ]# pkill sleep [1 ] 已终止 sleep 4 m [2 ]- 已终止 sleep 5 m [3 ]+ 已终止 sleep 6 m [root@localhost ~ ]# who root pts/0 2021 -04 -24 14 :06 (192.168 .0 .1 ) lisi pts/1 2021 -04 -24 17 :47 (192.168 .0 .1 ) root pts/2 2021 -04 -24 16 :29 (192.168 .0 .1 ) lisi pts/3 2021 -04 -24 17 :48 (192.168 .0 .1 ) [root@localhost ~ ]# pkill -9 -t pts/3
用户登录分析
users who w #查看以登录的用户信息(详细度不同)
last #显示登录成功的用户信息
lastb #显示登录失败的用户信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 [root@localhost ~] [root@localhost ~] lisi root root [root@localhost ~] root pts/0 2021-04-24 14:06 (192.168.0.1) lisi pts/1 2021-04-24 17:47 (192.168.0.1) root pts/2 2021-04-24 16:29 (192.168.0.1) [root@localhost ~] 08:16:10 up 55 min, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.0.1 07:21 2.00s 0.10s 0.00s w USER:以登录的用户名 TTY:用户登录终端编号 FROM:登录地址 LOGIN@:登录时间 IDLE:用户空闲时间,这是个计时器,一旦用户执行任何操作,该计时器便会被重置 JCPU:该终端所有进程占用CPU处理时间,包括正在运行和后台作业占用时间。 PCPU:进程执行以后消耗的CPU时间 WHAT:当前正在执行的任务 [root@localhost ~] lisi pts/1 192.168.0.1 Sat Apr 24 07:56 - 08:03 (00:07) [root@localhost ~] lisi pts/3 192.168.0.1 Sat Apr 24 17:48 - 17:50 (00:01) lisi pts/3 192.168.0.1 Sat Apr 24 17:47 - 17:48 (00:00) [root@localhost ~] lisi ssh:notty 192.168.0.1 Sat Apr 24 08:52 - 08:52 (00:00)
Linux软件包的分类
源码包特点
源码包缺点:安装过程麻烦,需要用户手动编译,需要手动解决软件包的依赖关系
源码包优点:软件源代码开放,允许用户二次开发,安装灵活,可以自定义安装路径与安装功能,卸载方便
RPM包特点
RPM包缺点:所有功能用户无法自定义,安装没有源码包灵活,不可以看到软件源代码
RPM包优点:由于已经提前被编译过,所以安装简单,安装速度快
RPM包命名规则,如:vsftpd-3.0.2-25.el7.x86_64.rpm
vsftpd #软件包名称
3.0.2 #软件包版本,主版本.次版本.修改版本
25 #补丁次数
el7 #适合的系统(el7表示RHEL7)
x86_64 #适合的CPU架构
rpm #rpm包扩展名
RPM管理软件包
RPM命令管理软件包需要手动解决软件包之间依赖关系
命令格式:rpm 选项… 软件包全名
常用选项:
-q #仅查询软件是否安装
-qa #列出所有已经安装在系统中的所有软件,可配合grep过滤指定的软件包
-qi #列出软件包详细信息,包含版本与官网地址
-qf #后边接文件名,查询配置文件由哪个软件包产生
-ql #列出与该软件包相关所有文件与目录的存放位置
-ivh #i安装,v显示详细信息,h显示软件安装进度
-Uvh #升级安装软件包
-e #卸载软件包
–import #导入红帽签名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 #挂载iso镜像文件 [root@localhost ~]# mkdir /mnt/centos [root@localhost ~]# mount /dev/cdrom /mnt/centos/ #实现永久挂载,查看iso镜像文件系统类型 [root@localhost ~]# df -hT [root@localhost ~]# vim /etc/fstab ... /dev/cdrom /mnt/centos iso9660 defaults 0 0 #重新加载 [root@localhost ~]# mount -a #查询软件包是否安装 [root@localhost centos]# rpm -q vsftpd 未安装软件包 vsftpd #安装vsftpd软件包 [root@localhost centos]# rpm -i Packages/vsftpd-3.0 .2 -25. el7.x86_64.rpm #查询系统中以安装的所有软件 [root@localhost centos]# rpm -qa [root@localhost centos]# rpm -qa | grep vsftpd vsftpd-3.0 .2 -25. el7.x86_64 #查询软件包详细的信息 [root@localhost centos]# rpm -qi vsftpd Name : vsftpd #软件包名 Version : 3.0 .2 #版本 Release : 25. el7 #最终稳定版 Architecture: x86_64 #适合安装的CPU架构 Install Date: 2021 年05 月04 日 星期二 14 时47 分06 秒 #安装时间 Group : System Environment/Daemons #软件包属于哪个群组 Size : 361335 #软件包大小 License : GPLv2 with exceptions Signature : RSA/SHA256, 2018 年11 月12 日 星期一 22 时48 分54 秒, Key ID 24 c6a8a7f4a80eb5 Source RPM : vsftpd-3.0 .2 -25. el7.src.rpm Build Date : 2018 年10 月31 日 星期三 03 时45 分10 秒 Build Host : x86-01. bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http: Vendor : CentOS URL : https: Summary : Very Secure Ftp Daemon Description : #描述信息 vsftpd is a Very Secure FTP daemon. It was written completely from scratch. [root@localhost centos]# which ls alias ls='ls --color=auto' /usr/sbin/ls #查询文件由哪个软件包产生 [root@localhost centos]# rpm -qf /usr/bin/ls coreutils-8.22 -23. el7.x86_64 [root@localhost centos]# which vim /usr/bin/vim [root@localhost centos]# rpm -qf /usr/bin/vim vim-enhanced-7.4 .160 -5. el7.x86_64 [root@localhost centos]# rpm -qi vim-enhanced #查询软件包自带的文件与目录安装路径 [root@localhost centos]# rpm -ql vsftpd [root@localhost centos]# rpm -qf /usr/bin/vim vim-enhanced-7.4 .160 -5. el7.x86_64 [root@localhost centos]# rpm -ql vim-enhanced /etc/profile.d/vim.csh /etc/profile.d/vim.sh /usr/bin/rvim /usr/bin/vim /usr/bin/vimdiff /usr/bin/vimtutor [root@localhost centos]# rpm -q vsftpd vsftpd-3.0 .2 -25. el7.x86_64 #卸载软件包 [root@localhost centos]# rpm -e vsftpd [root@localhost centos]# rpm -q vsftpd 未安装软件包 vsftpd #安装vsftpd软件包 [root@localhost centos]# rpm -ivh Packages/vsftpd-3.0 .2 -25. el7.x86_64.rpm 警告:Packages/vsftpd-3.0 .2 -25. el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY 准备中... ################################# [100 %] 正在升级/安装... 1 :vsftpd-3.0 .2 -25. el7 ################################# [100 %] [root@localhost centos]# rpm -q vsftpd vsftpd-3.0 .2 -25. el7.x86_64 #升级安装软件包 [root@localhost centos]# rpm -Uvh Packages/vsftpd-3.0 .2 -25. el7.x86_64.rpm 警告:Packages/vsftpd-3.0 .2 -25. el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY 准备中... ################################# [100 %] 软件包 vsftpd-3.0 .2 -25. el7.x86_64 已经安装 #导入红帽签名文件 [root@localhost centos]# rpm --import RPM-GPG-KEY-CentOS-7 #安装软件包,查看是否还有警告信息 [root@localhost centos]# rpm -q vsftpd vsftpd-3.0 .2 -25. el7.x86_64 [root@localhost centos]# rpm -e vsftpd [root@localhost centos]# rpm -ivh Packages/vsftpd-3.0 .2 -25. el7.x86_64.rpm 准备中... ################################# [100 %] 正在升级/安装... 1 :vsftpd-3.0 .2 -25. el7 ################################# [100 %] #安装httpd软件包 [root@localhost centos]# rpm -ivh Packages/httpd-(tab键) httpd-2.4 .6 -88. el7.centos.x86_64.rpm httpd-manual-2.4 .6 -88. el7.centos.noarch.rpm httpd-devel-2.4 .6 -88. el7.centos.x86_64.rpm httpd-tools-2.4 .6 -88. el7.centos.x86_64.rpm [root@localhost centos]# rpm -ivh Packages/httpd-2.4 .6 -88. el7.centos.x86_64.rpm 错误:依赖检测失败: /etc/mime.types 被 httpd-2.4 .6 -88. el7.centos.x86_64 需要 httpd-tools = 2.4 .6 -88. el7.centos 被 httpd-2.4 .6 -88. el7.centos.x86_64 需要 libapr-1. so.0 ()(64 bit) 被 httpd-2.4 .6 -88. el7.centos.x86_64 需要 libaprutil-1. so.0 ()(64 bit) 被 httpd-2.4 .6 -88. el7.centos.x86_64 需要 [root@localhost centos]# ls /etc/mime.types ls: 无法访问/etc/mime.types: 没有那个文件或目录 #解决依赖关系 [root@localhost centos]# rpm -ivh Packages/mailcap-2.1 .41 -2. el7.noarch.rpm 准备中... ################################# [100 %] 正在升级/安装... 1 :mailcap-2.1 .41 -2. el7 ################################# [100 %] [root@localhost centos]# ls /etc/mime.types /etc/mime.types #解决依赖关系 [root@localhost centos]# rpm -ivh Packages/httpd-tools-2.4 .6 -88. el7.centos.x86_64.rpm 错误:依赖检测失败: libapr-1. so.0 ()(64 bit) 被 httpd-tools-2.4 .6 -88. el7.centos.x86_64 需要 libaprutil-1. so.0 ()(64 bit) 被 httpd-tools-2.4 .6 -88. el7.centos.x86_64 需要 #解决依赖关系(www.rpmfind.net官网查询提供libapr-1. so.0 模块文件的软件包) [root@localhost centos]# rpm -ivh Packages/apr-(tab键) apr-1.4 .8 -3. el7_4.1 .x86_64.rpm apr-util-1.5 .2 -6. el7.x86_64.rpm apr-devel-1.4 .8 -3. el7_4.1 .x86_64.rpm apr-util-devel-1.5 .2 -6. el7.x86_64.rpm [root@localhost centos]# rpm -ivh Packages/apr-1.4 .8 -3. el7_4.1 .x86_64.rpm 准备中... ################################# [100 %] 正在升级/安装... 1 :apr-1.4 .8 -3. el7_4.1 ################################# [100 %] #解决依赖关系(www.rpmfind.net官网查询提供libaprutil-1. so.0 模块文件的软件包) [root@localhost centos]# rpm -ivh Packages/apr-util-(tab键) apr-util-1.5 .2 -6. el7.x86_64.rpm apr-util-devel-1.5 .2 -6. el7.x86_64.rpm [root@localhost centos]# rpm -ivh Packages/apr-util- apr-util-1.5 .2 -6. el7.x86_64.rpm apr-util-devel-1.5 .2 -6. el7.x86_64.rpm [root@localhost centos]# rpm -ivh Packages/apr-util-1.5 .2 -6. el7.x86_64.rpm 准备中... ################################# [100 %] 正在升级/安装... 1 :apr-util-1.5 .2 -6. el7 ################################# [100 %] #安装依赖关系 [root@localhost centos]# rpm -ivh Packages/httpd-tools-2.4 .6 -88. el7.centos.x86_64.rpm 准备中... ################################# [100 %] 正在升级/安装... 1 :httpd-tools-2.4 .6 -88. el7.centos ################################# [100 %] #安装httpd主包 [root@localhost centos]# rpm -ivh Packages/httpd-(tab键) httpd-2.4 .6 -88. el7.centos.x86_64.rpm httpd-manual-2.4 .6 -88. el7.centos.noarch.rpm httpd-devel-2.4 .6 -88. el7.centos.x86_64.rpm httpd-tools-2.4 .6 -88. el7.centos.x86_64.rpm [root@localhost centos]# rpm -ivh Packages/httpd-2.4 .6 -88. el7.centos.x86_64.rpm 准备中... ################################# [100 %] 正在升级/安装... 1 :httpd-2.4 .6 -88. el7.centos ################################# [100 %]
yum软件包管理
yum(软件仓库):提供众多软件包的仓库,并自动解决软件包之间复杂依赖关系
yum常用命令:
yum repolist #列出仓库可用软件包
yum list 软件包名 #查看系统中提供的软件包(包含未安装的软件包)
yum list updates #查看系统中可供本机升级的软件包
yum install 软件包名 #安装软件包,-y自动回答yes
yum update 软件包名 #升级软件包版本
yum remove 软件包名 #卸载软件包
yum clean all #清除仓库缓存
yum provides 文件名 #查看文件由哪个软件包产生(主要用于查找程序文件)
本地yum源配置(本地软件仓库)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 [root@localhost ~] [local ] name=local_centos baseurl=file:// /mnt/ centos enabled=1 gpgcheck=0 [root@localhost centos] 已加载插件:fastestmirror, langpacks 源标识 源名称 状态local local_centos 4 ,021 repolist: 4 ,021 [root@localhost centos] [root@localhost centos] ... Is this ok [y/d/N]: y (y安装/d 下载到本地不安装/N不安装) [root@localhost centos] gcc-4.8 .5 -36 .el7.x86_64 [root@localhost centos] [root@localhost centos] [root@localhost centos] [root@localhost centos] [root@localhost centos] [root@localhost centos] [root@localhost centos] [root@localhost centos] [root@localhost ~] [root@localhost ~] [root@localhost ~] 源标识 源名称 状态local local_centos 4 ,021 repolist: 4 ,021 [root@localhost ~] root@localhost ~] Error downloading packages: vsftpd-3.0 .2 -25 .el7.x86_64: [Errno 256 ] No more mirrors to try. [root@localhost ~] [root@localhost ~] 源标识 源名称 状态local local_centos 0 repolist: 0 [root@localhost ~] mount: /dev/sr 0 写保护,将以只读方式挂载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [base] name=CentOS-$releasever - Base - mirrors.aliyun.com failovermethod=priority baseurl=http://mi rrors.aliyun.com/centos/ $releasever /os/ $basearch / http://mi rrors.aliyuncs.com/centos/ $releasever /os/ $basearch / http://mi rrors.cloud.aliyuncs.com/centos/ $releasever /os/ $basearch / gpgcheck=1 gpgkey=http://mi rrors.aliyun.com/centos/ RPM-GPG-KEY-CentOS-7 [root@localhost ~] [local] name=local_centos baseurl=file:// /mnt/ centos/ enabled=1 gpgcheck=0 [tuna.tsinghua.edu.cn] name=tuna.tsinghua.edu.cn baseurl=https://mi rrors.tuna.tsinghua.edu.cn/centos/ 7 /os/ x86_64/ enabled=1 gpgcheck=0 [root@localhost ~] ... 元数据缓存已建立
设置yum源优先级
1 2 3 4 5 6 7 8 [root@localhost ~] [local] name =local_centosbaseurl =file:///mnt/centosenabled =1 gpgcheck =0 priority =1
源码包安装方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 http://nginx .org/ [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost nginx-1.20 .0 ] auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src [root@localhost nginx-1.20 .0 ] nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx modules path: "/usr/local/nginx/modules" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp" [root@localhost nginx-1.20 .0 ] [root@localhost nginx-1.20 .0 ] [root@localhost nginx-1.20 .0 ] [root@localhost nginx] conf html logs sbin
源码包管理方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@localhost nginx]- a 显示所有端口信息- n 以数字格式显示端口号- t 显示TCP连接的端口- u 显示UDP连接的端口- l 显示服务正在监听的端口信息- p 显示监听端口的服务名称是什么(也就是程序名) [root@localhost ~] tcp LISTEN 0 128 *:80 [root@localhost nginx] [root@localhost nginx] [root@localhost nginx]
systemd管理服务
systemd是内核加载的第一个进程(PID=1),systemd负责整个Linux系统的运行与服务控制,systemd为用户提供systemctl命令来管理RPM包安装的服务,如:启动服务、重启服务、关闭服务、查看服务状态,服务随机自启
服务的启动有两个阶段,一是系统开机时随着系统的启动而启动(随机自启),二是系统启动以后用户手动将服务启动
常用命令:
systemctl start 程序名 #启动服务
systemctl restart 程序名 #重启服务
systemctl stop 程序名 #停止服务
systemctl enable 程序名 #设置服务随机自启
systemctl disable 程序名 #设置服务不随机自启
systemctl status 程序名 #查看服务状态
systemctl is-enabled 程序名 #查看服务是否被设置随机自启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 [root@localhost nginx] [root@localhost nginx] .../usr/ sbin/vsftpd [root@localhost nginx] [root@localhost nginx] ● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/ lib/systemd/ system/vsftpd.service; disabled; vendor preset: disabled) Active: active (running) since 二 2021 -05 -04 17 :58 :38 CST; 1 min 7 s ago Process: 14028 ExecStart=/usr/ sbin/vsftpd / etc/vsftpd/ vsftpd.conf (code=exited, status=0 /SUCCESS) Main PID: 14030 (vsftpd) [root@localhost nginx] tcp LISTEN 0 32 :::21 :::* users:(("vsftpd" ,pid=14030 ,fd=4 )) [root@localhost nginx] [root@localhost nginx] [root@localhost nginx] [root@localhost nginx] Created symlink from /etc/ systemd/system/mu lti-user.target.wants/vsftpd.service to /u sr/lib/ systemd/system/ vsftpd.service. [root@localhost nginx] enabled [root@localhost nginx] Removed symlink /etc/ systemd/system/mu lti-user.target.wants/vsftpd.service. [root@localhost nginx] disabled [root@localhost nginx] enabled
课后作业
1.请说出RAID0、RAID1、RAID5、RAID10的特点
RAID0:等量存储,至少由两块磁盘组成,同一个文档分散并行存储,提高数据的读写速度,没有冗余功能
RAID1:完整备份,至少由两块磁盘组成,同一个文档复制成多份分散存储,提高数据的安全性,没有提高读写速度
RAID5:至少由三块磁盘组成,同一份文档分散写入不同磁盘,每个磁盘中都有校验数据,允许坏一块磁盘的数据,校验数据会占用磁盘的三分之一存储空间
RAID10:至少需要4快磁盘组成,先将4快磁盘组成两组RAID1,在将两组RAID1组成一个RAID0,既能够提高数据读写速度,还有冗余功能,可用容量是总容量一半
2.如何查看系统中的进程树,并显示每个进程的PID
pstree -p
3.如何查找到系统中lisi用户开启了哪些进程?
pstree -p lisi
4.如何将进程放入后台运行?
&
5.如何将后台运行进程调度到前台运行?
fg 进程编号
6.如何查看后台进程?
jobs
7.kill与killall命令的区别是什么?
kill 结束进程时,按照进程的PID结束
killall 结束进程时候,按照进程名字结束
8.如何将lisi用户提出系统?
killall -9 -u lisi
9.如何查看系统中登录失败的用户?
lastb
10.如何查看系统中登录成功的用户?
last
11.如何查询一个软件包在系统中安装了哪些文件与目录?
rpm -ql 软件包名
12.如何查询ifconfig命令是由哪个软件包产生?
[root@ localhost ~]# which ifconfig
/usr/sbin/ifconfig
[root@ localhost ~]# rpm -qf /usr/sbin/ifconfig
net-tools-2.0-0.24.20131004git.el7.x86_64
13.如何查看一个软件包是否被安装在系统中?
rpm -q 软件包名
14.如何卸载一个软件包?
卸载RPM包:rpm -e 软件包名
卸载源码包:直接删除源码包安装路径
15.说明本地yum仓库每一行的配置含义
[仓库名字]
name=仓库描述
baseurl=仓库地址
enabled=仓库状态(1/0,启用/不起用)
16.源码包的安装过程大体步骤
下载源码包
安装源码包依赖关系
解压源码包,进入源码包路径
./configure 安装参数
make 编译
make install 安装
17.如何查看一个服务占用的端口信息?
ss/netstat -anptul | grep 程序名称
18.如何启动vsftpd服务?
systemctl start vsftpd
19.如何查看vsftpd运行状态?
systemctl status vsftpd
20.如何设置vsftpd服务随机自启?
systemctl enable vsftpd
21.如何停止vsftpd服务?
systemctl stop vsftpd
shell概述
shell是一个程序,它连接了用户和Linux内核,它可以解释用户输入的命令传递给内核,让用户可以更加方便的使用Linux系统
shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序
shell具备编程的能力,shell也是一种语言,C,C++,java,Python,Go等
语言分为编译型语言,C,C++,Go,需要提前编译,编译语言都有编译器
解释型语言,shell,Python,php,不需要提前编译,一边执行,一边编译,每种解释型语言都有解释器
shell语言支持大部分编程语言都具备的功能:if判断,for循环,变量,数组,函数,加减乘除,逻辑运算
规范shell脚本组成
1 2 3 4 [root@test ~]# vim user.sh#!/bin/bash(环境声明) #注释信息 可执行代码…
如何写好一个shell脚本
明确任务需求
按需求整理好每一个步骤,先做什么,后做什么
运行脚本,并根据运行结果排除错误
优化脚本并达到最终效果
编写脚本
1 2 3 4 5 6 7 8 9 10 11 [root@localhost ~]# vim hello.sh #!/bin/bash #hello word echo hello word#赋予执行权限 [root@localhost ~]# chmod u+x hello.sh #执行脚本 [root@localhost ~]# /root/hello.sh hello word
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@localhost ~]# vim user.sh#!/bin/bash useradd abc passwd abc [root@localhost ~]# chmod u+x user.sh #非交互 [root@localhost ~]# vim user.sh#!/bin/bash useradd yyyy echo 1 | passwd --stdin yyyy [root@localhost ~]# ./user.sh 更改用户 yyyy 的密码 。 passwd:所有的身份验证令牌已经成功更新。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [root@localhost ~] cat /etc/redhat-release uname -r free -h ifconfig ens32 hostname [root@localhost ~] [root@localhost ~] CentOS Linux release 7.6.1810 (Core) 3.10.0-957.el7.x86_64 total used free shared buff/cache available Mem: 972M 480M 147M 16M 344M 260M Swap: 2.0G 239M 1.8G ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::8903:cb8:127b:dbc8 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:a0:e8:12 txqueuelen 1000 (Ethernet) RX packets 230110 bytes 325471733 (310.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20635 bytes 1385581 (1.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 localhost.localdomain
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 [root@localhost ~]mkdir /mnt/centos mount /dev/cdrom /mnt/centosecho '/dev/cdrom /mnt/centos iso9660 defaults 0 0' >> /etc/fstabrm -rf /etc/yum.repos.d/*touch /etc/yum.repos.d/local.repoecho "[local]" > /etc/yum.repos.d/local.repoecho "name=local_centos" >> /etc/yum.repos.d/local.repoecho "baseurl=file:///mnt/centos" >> /etc/yum.repos.d/local.repoecho "enabled=1" >> /etc/yum.repos.d/local.repoecho "gpgcheck=0" >> /etc/yum.repos.d/local.repo [root@localhost ~]mkdir /mnt/centos mount /dev/cdrom /mnt/centosecho '/dev/cdrom /mnt/centos iso9660 defaults 0 0' >> /etc/fstab mount -arm -rf /etc/yum.repos.d/*echo "[local] name=local_centos baseurl=file:///mnt/centos enabled=1 gpgcheck=0" > /etc/yum.repos.d/local.repo [root@localhost ~]echo "正在配置本地yum仓库..." mkdir /mnt/centos mount /dev/cdrom /mnt/centos &> /dev/nullecho '/dev/cdrom /mnt/centos iso9660 defaults 0 0' >> /etc/fstab mount -arm -rf /etc/yum.repos.d/*echo "[local] name=local_centos baseurl=file:///mnt/centos enabled=1 gpgcheck=0" > /etc/yum.repos.d/local.repoecho "本地yum仓库配置以完成..." yum clean all &> /dev/null yum repolist | tail -1echo "仓库软件包数量" [root@localhost ~] 正在配置本地yum仓库... 本地yum仓库配置以完成... repolist: 4,021 仓库软件包数量
脚本的执行方式
执行一个脚本的方法有很多种
方法一:赋予脚本执行权限后,可用绝对路径或者当前路径执行
方法二:调用解释器执行脚本文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] -bash: /root/hello.sh: 权限不够 [root@localhost ~] -bash: ./hello.sh: 权限不够 [root@localhost ~] hello word [root@localhost ~]/bin/sh /bin/bash /usr/bin /sh /usr /bin/bash /bin/tcsh /bin/csh [root@localhost ~] hello word [root@localhost ~] hello word [root@localhost ~] hello word
常用特殊符号补充
“ “ #双引号,引用整体
‘ ’ #单引号,引用整体并取消所有特殊字符含义
$[] #四则运算(+ - * / % 取余数)
$() #将命令的输出结果作为参数
反撇 `` 将命令的输出结果作为参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #引用整体,不屏蔽特殊符号的功能 [root@localhost ~]# echo "$PATH" /usr/local /sbin:/usr/local /bin:/usr/sbin:/usr/bin:/root/bin#引用整体,屏蔽特殊符号的功能 [root@localhost ~]# echo '$PATH' $PATH#没有特殊符号单引双引都可以 [root@localhost ~]# echo "xxoo" xxoo [root@localhost ~]# echo 'xxoo' xxoo#四则运算 [root@localhost ~]# echo $[1+1] 2 [root@localhost ~]# echo $[1+5] 6 [root@localhost ~]# echo $[10-5] 5 [root@localhost ~]# echo $[10*5] 50 [root@localhost ~]# echo $[10/5] 2 [root@localhost ~]# echo $[1+3+4+5+7] 20 [root@localhost ~]# echo $[10/3] 3 [root@localhost ~]# echo $[10%3] 1 #$()取命令结果作为参数 root@localhost ~]# touch $(date +%F)-abc.txt 2021 -05 -09 -abc.txt #``取命令结果作为参数 [root@localhost ~]# touch `date +%F`-xxoo.txt 2021 -05 -09 -xxoo.txt
变量
以固定的名称存放可能变化的值,提高脚本的灵活度来适应多变的环境
定义变量:变量名=变量值,如:a1=abc(等号两边不要有空格)
取消变量:unset 变量名
定义变量注意事项:
变量名由字母/数字/下划线组成,区分大小写,不能以数字开头,不要使用命令和特殊符号
若指定的变量名已经存在,相当于为此变量重新赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 root@localhost ~] [root@localhost ~] haha [root@localhost ~] [root@localhost ~] abcd [root@localhost ~] [root@localhost ~]5 [root@localhost ~]10 [root@localhost ~] user=wangxin useradd $user echo 1 | passwd --stdin $user [root@localhost ~] 更改用户 wangxin 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@localhost ~] user=sdd useradd $user echo 1 | passwd --stdin $user [root@localhost ~] 更改用户 sdd 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@localhost ~] user=panghu useradd $user echo "用户$user创建成功" echo 1 | passwd --stdin $user &> /dev/null echo "用户$user密码设置成功" [root@localhost ~] 用户panghu创建成功 用户panghu密码设置成功
read标准输入取值
read 读取用户在键盘上输入的内容,并把内容存放在变量里,可以降低脚本的使用难度
命令格式:read -p “提示信息” 变量名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@localhost ~]read -p '请输入用户名:' user useradd $user echo "用户$user 创建成功" read -p '请设置用户密码:' passecho $pass | passwd --stdin $user &> /dev/nullecho "用户$user 密码设置成功" [root@localhost ~] 请输入用户名:wuhan 用户wuhan创建成功 请设置用户密码:1 用户wuhan密码设置成功 [root@localhost ~] 请输入用户名:liangjing 用户liangjing创建成功 请设置用户密码:xxoo 用户liangjing密码设置成功
变量种类
环境变量:变量名一般都大写,用来设置用户/系统环境
位置变量:bash内置,存储执行脚本时提供的命令参数
预定义变量:bash内置,可直接调用的特殊值,不能直接修改
自定义变量:用户自定义
env 命令查看系统所有环境变量
set 命令查看系统所有变量,包括用户自定义变量
环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [root@localhost etc] MAIL=/var/ spool/mail/ root PATH=/usr/ local/sbin:/u sr/local/ bin:/usr/ sbin:/usr/ bin:/root/ bin PWD=/root LANG=zh_CN.UTF-8 SELINUX_LEVEL_REQUESTED= HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root XDG_DATA_DIRS=/root/ .local/share/ flatpak/exports/ share:/var/ lib/flatpak/ exports/share:/u sr/local/ share:/usr/ share SSH_CONNECTION=192.168 .0.1 51791 192.168 .0.100 22 LESSOPEN=||/usr/ bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/u ser/0 DISPLAY=localhost:10.0 _=/usr/ bin/env OLDPWD=/root [root@localhost etc]/bin/ bash [root@localhost ~] /root [root@localhost ~] [root@localhost ~]
位置变量
$0 #脚本名称
$1 #第一个参数
$2 #第二个参数
$3 #第三个参数
$4 #第四个参数
$n… #第n个参数
预定义变量
$0 #代表脚本本身
$* #显示所有参数内容
$# #显示有多少个参数
$? #显示上一条命令的执行结果(0代表正确,非0代表错误)
$$
#显示脚本进程号(PID)
$$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@localhost ~]echo $0 echo $1 echo $2 echo $3 echo $*echo $# echo $$echo $? [root@localhost ~] ./test.sh $0 xx $1 oo $2 dd $3 xx oo dd $* 3 $# 15594 $$ 0 $?
判断文件状态
-e #判断文档(文件/目录)是否存在,存在为真
-d #判断目录是否存在,存在为真
-f #判断文件是否存在,存在为真
-r #可读为真
-w #可写为真
-x #可执行为真
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #判断文档是否存在 [root@localhost ~]# [ -e /etc/ ] [root@localhost ~]# echo $? 0 #为真 #判断目录是否存在 [root@localhost ~]# [ -d /opt ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ -d /etc/passwd ] [root@localhost ~]# echo $? 1 [root@localhost ~]# [ -f /etc/passwd ] [root@localhost ~]# echo $? 0 #判断是否可读(以当前用户身份判断) [root@localhost ~]# [ -r /etc/passwd ] [root@localhost ~]# echo $? 0 #判断是否可写 [root@localhost ~]# [ -w /etc/passwd ] [root@localhost ~]# echo $? 0 #判断是否可执行 [root@localhost ~]# [ -x /etc/passwd ] [root@localhost ~]# echo $? 1 [root@localhost ~]# ll /etc/passwd -rw-r--r--. 1 root root 3294 5 月 9 16 :43 /etc/passwd
整数比较
-gt 大于
-ge 大于等于
-eq 等于
-lt 小于
-le 小于等于
-ne 不等于
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@localhost ~]# [ 1 -gt 1 ] [root@localhost ~]# echo $? 1 [root@localhost ~]# [ 1 -eq 1 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ 1 -ge 1 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ 1 -ge 2 ] [root@localhost ~]# echo $? 1 [root@localhost ~]# [ 1 -lt 2 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ 1 -le 2 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ 1 -le 10 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ 10 -le 10 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ 1 -ne 2 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ 2 -ne 2 ] [root@localhost ~]# echo $? 1
字符串对比
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@localhost ~]# [ root == xxoo ] [root@localhost ~]# echo $? 1 [root@localhost ~]# [ root == $USER ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ $USER == root ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ abc == bcd ] [root@localhost ~]# echo $? 1 [root@localhost ~]# [ abc != bcd ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ $USER != root ] [root@localhost ~]# echo $? 1