一、管理文件系统
1、文件系统类型
- ext2:早期Linux中常用的文件类型。
- ext3:ext2的升级版,带日志功能。
- RAMFS:内存文件系统,速度很快。
- NFS:网络文件系统,由SUM发明,主要用于远程文件共享
- PROC:虚拟的进程文件。
- ISO9660:大部分光盘所采用的文件系统。
2、Linux文件系统的目录结构
/ | 根目录,整个文件系统的根目录 |
/dev | 存放Linux系统下的设备文件 |
/etc | 存放系统的配置文件 |
/home | 系统默认的用户主目录 |
/root | 超级权限用户的root目录 |
/opt | 自定义软件包 |
3、硬链接和软链接
- 硬链接:即便原始文件被删除,依然可以通过硬链接文件来访问。
- 软链接:当原始文件被删除后,链接文件也将失效。
4、命令
1、工作目录切换类:
- pwd [目录名称] :显示或查看当前所在的目录路径。
- cd [目录名称]:切换工作目录。
- cd-:返回上一次所处的目录
- cd..:进入上级目录
- cd~:切换到当前用户的家目录
- ls [选项] [文件]:
- ls ./:查看当前目录的所有文件和目录,可省略./
- ls -l:查看当前目录所有的文件和目录的详细信息
- ls -a:查看文件的属性、大小等详细信息。
2、文本文件查看类:
- cat [选项] [文件]:查看纯文本文件(内容较少的)
- cat -n [文件]:显示行号
- more [选项] [文件]:查看纯文本文件(内容较多的),空格键向下翻页或回车键向下翻行,只能向前浏览,按q退出more程序。
- less [选项] [文件]:查看纯文本文件(内容较多的),允许向前向后浏览文件,PageUP或b键向上翻页,用PageDown或空格向下翻页。按q键可退出。
- head [选项] [文件]:查看纯文本文档前面部分的内容。
- head -n 20 [文件]:查看纯文本中前20行的内容。
- tail [选项] [文件]:查纯文本中后面部分或持续刷新内容。
- tail -n 20:查看文本内容的最后20行。
- tail -f 文件名:可以实时查看最新日志文件的效果。
- wc [参数] [文件]:统计指定文本的行数、字数、字节数。
-l 只显示行数 -w 只显示单词数 -c 只显示字节数
3、目录操作类:
- mkdir [选项] [目录]:创建空白的目录
- mkdir -p a/b/c/d:创建具有嵌套的文件目录。
- rmdir [选项] [目录]:删除空白目录
- 可以结合-p删除具有嵌套叠层关系的文件目录。
4、文件操作类:
- touch [选项] [文件]:创建空文件或设置文件的时间。
-a 仅修改“读取时间”(atime) -m 仅修改“修改时间”(mtime) -d 同时修改atime与mtime - cp [选项] [源文件] [目标文件]:复制文件或目录。
- 如果目标文件是目录,则会把源文件复制到该目录中。
- 如果目标文件是存在的普通文件,则会询问是否要覆盖它。
- 如果目标文件不存在,则执行正常的复制操作。
-p 保留原始文件的属性 -d 若对象为“链接文件”,则保留其属性 -r 递归持续复制(用于目录) -i 若目标文件存在则询问是否覆盖 -f,--force 强行复制文件或目录,不论目标文件或目录是否已存在 -a 相当于-pdr
- mv [选项] [源文件] [目标路径] [目标文件名]:剪切文件或将文件重命名
- rm [选项] [文件]:删除文件或目录。
- rm -f:强制删除。
- rm -r:删除一个目录。
- diff [参数] [文件]:比较多个文本文件的差异。
- diff --brief:判断文件是否相同。
- diff -c:描述出文件内容具体的不同。
- dd [参数]:按照指定大小和个数的数据块来复制文件或转换文件
if 输入的文件名称 of 输出的文件名称 bs 设置每个“块”的大小 count 设置要复制“快”的个数 - ln [选项] 目标:创建链接文件。
-s 创建“符号链接”(如果不带-s参数,则默认创建硬链接) -f 强制创建文件或目录的链接 -i 覆盖前先询问 -v 显示创建链接的过程
5、压缩解压命令:
- tar [选项] [文件]:建立,还原备份文件。
-c 创建新的文档 -v 显示详细的tar处理的文件信息 -f 要操作的文件名,切记,这个参数是最后一个参数 -x 解压 -t 查看内容 -z 有gzip属性的 -j 有bz2属性的 -r 表示增加文件,把要增加的文件追加在压缩文件的末尾 - gzip [参数] [文件]:文件压缩工具。
- gzip -c能指定输出并保留源文件。
- gunzip [参数] [文件]:解压缩gzip格式的文件。(会删除源文件)
-l 创建新的文档 -d 指定文件解压缩后要存储的目录 -f 要操作的文件名,切记,这是最后一个参数 - zip [参数] [打包后的文件名] [打包的文件路径]:压缩文件,适用于压缩多个文件的格式
-r 递归压缩子目录下的所有文件,不然只压出来一个空目录 -y 保持符号链接,而不用把符号链接指向的文件也压进来 -f 要操作的文件名,这是最后一个参数 - unzip [参数] [文件名.zip]:解压缩zip文件。
-l 创建新的文档 -d 指定文件解压缩后所要存储的目录 -f 要操作的文件名,这是最后一个参数
6、查找类命令:
- which [参数] [命令名称]:查找系统PATH目录下的可执行文件命令所在的位置。
- whereis [参数] [命令名称]:寻找二进制程序、源代码文件和man手册等相关文件的路径。
- locate [参数] [文件名.zip]:查找文件或目录。
- find [查找路径] [寻找条件操作]:按指定条件来寻找文件。
-name 匹配名称 -perm 匹配权限(mode为完全匹配,-mode为包含即可) -user 匹配所有者 -group 匹配所有组 -mtime-n+n 匹配修改内容的时间(-n指n天以内,+n指n天以前) -atime-n+n 匹配访问文件的时间(-n指n天以内,+n指n天以前) -ctime-n+n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) -nouser 匹配无所有者的文件 -nogroup 匹配无所有组的文件 -newer f1 ! f2 匹配比文件f1新但比f2旧的文件 --type b/d/c/p/l/f 匹配文件类型(后面字母依次表示设备、目录、字符设备、管道、链接文件、普通文件) -size 匹配文件的大小(+50为查找超过50KB的文件) -prune 忽略某个目录 -exec...{}\; 后面可跟用于进一步处理搜索结果的命令
7、修改文件权限命令:
- chmod [选项] [模式,模式] [文件]:修改文件或目录的权限。
- 数字法:将读取(r)、写入(w)、执行(x)分别以4、2、1来表示。
- 文字法:
- u:user,表示所有者。
- g:group,表示属组。
- o:other,表示其他用户。
- a:all,表示以上三种用户。
- r:read,可读。
- w:write,写入。
- x:execute,执行。
8、文件的隐藏属性
- chattr [参数] [文件]:设置文件的隐藏权限。用+-某个功能。
- lsattr [参数] [文件]:显示文件的隐藏权限。lsattr -al
二、shell与文本处理
1、Vim编辑器
dd | 删除(剪切)光标所在整行 |
5dd | 删除(剪切)从光标开始的5行 |
yy | 复制光标所在整行 |
5yy | 复制从光标处开始的5行 |
n | 显示搜索命令定位到的下一个字符串 |
N | 显示搜索命令定位到的上一个字符串 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
:w | 保存 |
:q | 退出 |
:q! | 强制退出(放弃对文档的修改) |
:wq! | 强制保存退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:命令 | 执行该命令 |
:整数 | 跳转到该行 |
2、通配符
用于匹配文件名,通常包含四种“*,?,[],{}”。
* | 匹配0或多个字符 | a*b:a与b之间可以有任意长度的任意字符,也可以无。如aabcd、a012b、ab。 |
? | 匹配任意一个字符 | a?b:a与b之间必须也只能有一个字符,可以是任意字符,如aab、abb、a0b。 |
[list] | 匹配list中的任意单一字符 | a[xyz]b:a与b之间必须也只能有一个字符,只能是x或y或z,如axb、ayb,azb。 |
[! list] 或 [^list] | 匹配除list中的任意单一字符 | 同上,不能是x或y或z。 |
[c1-c2] | 匹配c1-c2中的任意单一字符,如[0-9] | |
[! c1-c2]或[^c1-c2] | 与上相反 | |
{string1,string2,...} | 匹配string1或string2其单一字符 |
3、基本正则表达式
^ | 匹配以...开头的行 | ^ab匹配以ab开头的行 |
$ | 匹配以...结尾的行 | ab$匹配以ab结尾的行 |
^$ | 匹配空行 | ^$匹配空行,不匹配空格 |
. | 匹配任意单个字符 | ab.匹配abc或abb等,不匹配abcd,包括空格 |
\ | 转义符,将特殊字符符号进行转义 | a\.b匹配a.b。不匹配ajb |
* | 匹配前面项0次或多次 | ab*匹配a或ab或abbb |
. * | 匹配任意字符 | ab.*匹配ab或abc或abcd,包含空行 |
4、重定向与管道命令
- 标准输入:stdin,由0表示,默认接收来自键盘的输入。
- 标准输出:stdout,由1表示,默认输出到终端窗口。
- 标准错误:stderr,由2表示,默认输出到终端窗口。
- 管道命令:“|”:把前一个命令原本要输出到屏幕的标准正常数据当做是后一个命令的标准输入
三、管理Linux服务器的用户组群及特殊权限
- 管理员UID为0:系统的管理员用户。
- 系统用户UID为1~999:默认服务器程序会有独立的系统用户负责运行。
- 普通用户UID从1000开始:由管理员创建的普通用户的UID默认是从1000开始的。
1、用户账户文件
- /etc/passwd:例子:bin:x:2:2:bin:/bin:/bin/sh,共有七个域:
- 账号名称
- 口令
- UID
- GID
- 用户信息说明栏
- 家目录
- shell
- etc/shadow:了解不同账号的权限。例子:bin:*:14126:0:99999:7:::,有九个字段:
- 账号名称
- 口令
- 最近更改口令的日期(14126)
- 口令不可被更动的天数
- 口令需要重新变更的天数(与第三字段相比)
- 口令需要变更期限前的警告天数(与第五段相比)
- 口令过期后的账号宽限时间(口令失效日)
- 账号失效日期
- 保留
2、用户组文件
- /etc/group:记录GID与组名的对应关系。例:root:x:0:,有四栏:
- 组名
- 群组口令
- GID
- 此群组支持的账号名称
- /etc/gshadow:是上面的加密资讯文件,比如用户组(Group)管理员密码就是存放在这个文件中。
3、命令
1、用户账号的创建和管理
- su:切换用户
- useradd [选项] [用户名]
-d 指定用户的家目录(默认/home/username) -e 账户的到期时间,格式为YYYY-MM-DD -u 指定该用户的默认UID -g 指定一个初始的用户基本组 -G 指定一个或多个扩展用户组 -N 不创建于用户名同名的基本用户组 - passwd [选项] [用户名]:设置用户口令。
-l 锁定用户,禁止其登录 -u 解除锁定,允许用户登录 -d 使该用户可用空密码登录 -e 强制用户在下次登录时修改密码 - username [选项] [用户名]:修改用户的属性。
-f 强制删除用户 -r 同时删除用户及用户家目录
2、组群管理
- groupadd或addgroup [选项] 组群名:创建组群
- groupmod [选项] 组名:修改组群
-g gid 把组群的GID改成gid -n group -name 把组群的名称改为group -name - groupdel [选项] 组名:删除组群。
gpasswd [选项] [用户] [组]:为组群添加用户。
-a | 把用户加入组 |
-d | 把用户从组中删除 |
-r | 取消组的密码 |
-A | 给组指派管理员 |
四、管理磁盘
1、物理设备的命名规范
IDE设备 | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd/[a-p] |
软驱 | /dev/fd/[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/ht0 |
2、磁盘分区-fdisk
- fdisk [磁盘名称]:管理磁盘分区。
p 查看分区信息 n 添加新的分区 w 保存并退出
步骤:管理/dev/sdb硬盘设备
- 输入命令:fdisk /dev/sdb
- 输入p查看硬盘设备内已有的分区信息
- 输入n添加新的分区,系统会要求选择输入p创建主分区或e创建扩展分区,这里用p。
- 系统要求先输入主分区的编号(1~4)
- 起始扇区默认,Last扇区+2G,即创建容量为2GB的硬盘分区
- 输入p再次查看信息,OK后输入w后回车!
- 使用file /dev/sdb1查看文件的属性,若无,则输入partprobe同步。
3、格式化分区-mkfs(建立文件系统)
分区后还要进行格式化操作。
- mkfs.文件类型名称:例如要格式分区为XFS的文件系统
- mkfs
- mkfs.xfs /dev/sdb1
4、挂载分区
1、mount-手动挂载分区
- mount 文件系统 挂载目录;例如:把设备/dev/sdb1挂载到/newFS目录:
- mkdir /newFS
- mount /dev/sdb1 /newFS
2、/etc/fstab-自动挂载分区
3、umount-撤销挂载分区
5、磁盘列阵管理
例:创建RAID5
1、创建四个磁盘分区
- 使用fdisl命令创建4个磁盘分区/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1
2、使用mdadm命令创建RAID5
- mdadm --create /dev/md0 -l 5 -n 3 -x 1 /dev/sd[b-e]1
- --create代表创建一个RAID阵列卡,设备名称/dev/md0;--lever=5参数代表RAID5方案‘--raid-devices=3参数代表使用3块硬盘来部署这个RAID磁盘列阵;--spare-devices=1参数代表使用1块硬盘空闲作为热备,最后在加上4块硬盘设备就OK了
3、为新建立的/dev/md0建立ext4的文件系统
- mkfs -t ext4 -c /dev/md0
4、查看建立的RAID5的具体情况
- mdadm --detail /dev/md0
5、将RAID设备挂载(将RAID设备挂载到指定目录/RAID中)
- mkdir /RAID
- mount /dev/md0 /RAID
- df -h(显示该设备中的内容)
五、Linux系统监视和进程管理
1、进程
- 进程是具有独立功能的程序的一次运行过程,是系统进行资源分配和调度的基本单位。
- 进程不是程序,但由程序产生。
2、作业
-
正在执行的一个或多个相关进程可形成一个作业。
- 前台作业:运行于前台,用户可对其进行交互操作
- 后台作业:运行于后台,不接收终端的输入,但向终端输出执行结果。
3、进程的状态
- 就绪状态:进程已获得除CPU以外的运行所需要的全部资源
- 运行状态:进程占用CPU正在运行
- 等待状态:进程正在等待某一事件或某一资源
- 挂起状态:正在运行的进程因为某个原因失去CPU而暂时停止运行
- 终止状态:进程已结束
- 休眠状态:进程主动暂时停止运行
- 僵死状态:进程 已停止运行,但是相关控制信息仍保留
4、进程调度
对于偶尔运行的进程,采用at调度或batch调度
对于特定时间重复运行的进程,采用cron调度
- at [选项] [时间]:设置指定时间执行指定的命令。
- batch [选项] [时间]
六、网络配置与网络服务部署
1、NetworkManager
- nmcli是命令行的管理NetworkManager的工具,会自动把配置写到/etc/sysconfig/network-scripts/目录下。
2、网络接口配置文件
在网卡配置文件中,各字段的作用如下:
- DEVICE=name:name是物理设备名。
- IPADDR=addr:addr是IP地址。
- HWADDR=addr:addr是物理地址。
- NETMASK=mask:mask是网络掩码值。
- NETWORK=addr:addr是网络地址
- BROADCAST=addr:addr是广播地址。
- GATEWAY=addr:addr是网关地址。
- ONBOOT=answer:answer是yes(引导时激活设备)/no
3、DHCP服务器
工作原理:
- 客户端主机使用0.0.0.0IP地址和UDP68端口在局域网内发送DHCPDISCOVER广播包(包含了客户端计算机网卡的MAC地址和NetBIOS名称)寻找DHCP服务器。
- DHCP服务器收到DHCPDISCOVER广播包,在局域网中使用UDP67端口,发送DHCPOFFER广播数据包,包含待出租的IP地址及地址租期等。
- 局域网中客户端主机发送DHCPREQUEST广播包(包含选择的DHCP服务器的IP地址),正式向服务器请求租用分配服务器已提供的IP地址。
- DHCP服务器向请求的客户端主机发送DHCPACK单播包,正式确认客户端主机的租用请求。
七、Shell编程
1、求两个数相加,编写add.sh文件
[root@localhost script]# vim add.sh
[root@localhost script]# cat add.sh
#!/bin/bash
#文件名为:add.sh
#版本:v1.1
#功能:求和
VAR=`expr 3 + 6`
echo "两个数相加为:" $VAR
[root@localhost script]# chmod a+x add.sh
[root@localhost script]# . add.sh
两个数相加为: 9
[root@localhost script]#
-
2、算术运算符,进行综合运算
-
算术运算符有以下几个。
- (1)+ 加法。如: `expr $X + $Y`。
- (2)- 减法。如: `expr $X - $Y`。
- (3)* 乘法。如: `expr $X \* $Y`。
- (4)/ 除法。如: `expr $X / $Y`。
- (5)% 取余。如: `expr $X % $Y`。
- (6)= 赋值。如:X=$Y,将把变量Y的值赋给A。
- (7)= = 相等。用于比较两个数字,相同则返回true。
- (8)!= 不相等。用于比较两个数字,不相同则返回true。
[root@localhost script]# vim zhys.sh
[root@localhost script]# cat zhys.sh
#!/bin/bash
#文件名为:zhys.sh
#版本:v1.1
#功能:综合运算
X=100
Y=5
VAR=`expr $X + $Y`
echo "X+Y=$VAR"
VAR=`expr $X - $Y`
echo "X-Y=$VAR"
VAR=`expr $X \* $Y`
echo "X*Y=$VAR"
VAR=`expr $X / $Y`
echo "X/Y=$VAR"
VAR=`expr $X + $Y`
if [ $X == $Y ]; then
echo "X等于Y"
fi
if [ $X != $Y ]; then
echo "X不等于Y"
fi
[root@localhost script]# . zhys.sh
X+Y=105
X-Y=95
X*Y=500
X/Y=20
X不等于Y
[root@localhost script]#
乘号(*)前边必须加反斜杠(\)才能实现乘法运算,条件表达式必须放在方括号之间,并且要有空格。
3、关系运算符,进行综合运算
运算符 | 功能说明 | 举例 |
-eq | 检测两个数是否相等,相等返回 true | [ $X -eq $Y ] 返回 false |
-ne | 检测两个数是否不相等,不相等返回 true | [ $X -ne $Y ] 返回 true |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true | [ $X -gt $Y ] 返回 false |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true | [ $X -lt $Y ] 返回 true |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true | [ $X -ge $Y ] 返回 false |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true | [ $X -le $Y ] 返回 true |
运算关系综合运算
[root@localhost script]# vim gxys.sh
[root@localhost script]# cat gxys.sh
#!/bin/bash
#文件名为:gxys.sh
#版本:v1.1
#功能:运算关系综合运算
X=10
Y=20
if [ $X -eq $Y ]
then
echo "$X -eq $Y : X 等于 Y"
else
echo "$X -eq $Y: X 不等于 Y"
fi
if [ $X -ne $Y ]
then
echo "$X -ne $Y: X 不等于 Y"
else
echo "$X -ne $Y : X 等于 Y"
fi
if [ $X -gt $Y ]
then
echo "$X -gt $Y: X 大于 Y"
else
echo "$X -gt $Y: X 不大于 Y"
fi
if [ $X -lt $Y ]
then
echo "$X -lt $Y: X 小于 Y"
else
echo "$X -lt $Y: X 不小于 Y"
fi
if [ $X -ge $Y ]
then
echo "$X -ge $Y: X 大于或等于 Y"
else
echo "$X -ge $Y: X 小于 Y"
fi
if [ $X -le $Y ]
then
echo "$X -le $Y: X 小于或等于 Y"
else
echo "$X -le $Y: X 大于 Y"
fi
[root@localhost script]# . gxys.sh //执行脚本
10 -eq 20: X 不等于 Y
10 -ne 20: X 不等于 Y
10 -gt 20: X 不大于 Y
10 -lt 20: X 小于 Y
10 -ge 20: X 小于 Y
10 -le 20: X 小于或等于 Y
[root@localhost script]#
4、流程控制
if多分支语句测试:
[root@localhost script]# vim if-select.sh
[root@localhost script]# cat if-select.sh
#!/bin/bash
#文件名为:if-select.sh
#版本:v1.1
#功能:if多分支语句测试
read -p "请输入您的成绩:" x
if [ "$x" == "" ];then
echo "您没有输入成绩...."
exit 5
fi
if [[ "$x" -ge "90" && "$x" -le "100" ]];then
echo "您的成绩为:A(优秀)"
elif [[ "$x" -ge "80" && "$x" -le "89" ]];then
echo "您的成绩为:B(良好)"
elif [[ "$x" -ge "70" && "$x" -le "79" ]];then
echo "您的成绩为:(中等)"
elif [[ "$x" -ge "60" && "$x" -le "69" ]];then
echo "您的成绩为:(合格)"
elif [[ "$x" -lt "60" ]];then
echo "您的成绩为:(不合格)"
else
echo "输入错误"
fi
[root@localhost script]# chmod a+x if-select.sh
[root@localhost script]# . if-select.sh
请输入您的成绩:88
您的成绩为:B(良好)
[root@localhost script]#
case命令语句测试
[root@localhost script]# vim case.sh
[root@localhost script]# cat case.sh
#!/bin/bash
#文件名为:case.sh
#版本:v1.1
#功能:case命令语句测试
read -p "【1:优秀,2:良好,3:中等,4:合格,5:不合格】请输入数字(1-4):" x
case $x in
1) echo "您的成绩为:A(优秀)"
;;
2) echo "您的成绩为:B(良好)"
;;
3) echo "您的成绩为:C(中等)"
;;
4) echo "您的成绩为:D(合格)"
;;
5) echo "您的成绩为:E(不合格)"
;;
esac
[root@localhost script]# . case.sh
【1:优秀,2:良好,3:中等,4:合格,5:不合格】请输入数字(1-4):3
您的成绩为:C(中等)
[root@localhost script]#
for循环实现从1+2+...+N之和:
[root@localhost script]# vim for.sh
[root@localhost script]# cat for.sh
#!/bin/bash
#文件名为:for.sh
#版本:v1.1
#功能:for循环实现从1+2+...+N之和
read -p "请输入数字,将要计算1+2+...+N之和:" N
sum=0
for (( i=1; i<=$N; i=i+1 ))
do
sum=$(( $sum + $i ))
done
echo "结果为‘1+2+...+$N’==>$sum"
[root@localhost script]# chmod a+x for.sh
[root@localhost script]# . for.sh //执行脚本
请输入数字,将要计算1+2+...+N之和:100 //1到100之和
结果为‘1+2+...+100’==>5050
[root@localhost script]#
......