linux学习笔记

一、基本命令

1、linux各目录的作用

/bin/ 存放系统命令的目录,普通用户和超级用户都可以执行,不过放在/bin下的命令在单用户模式下也可以执行。

/sbin/ 保护和系统环境配置相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但有些命令可以允许普通用户查看

/usr/sbin/ 存放根目录系统不必要的系统管理命令,例如多数服务程序。只有超级用户可以使用。大家其实可以注意到Linux的系统,在所有“sbin”目录中保存的命令只有超级用户可以使用,“bin”目录中保存的命令所有用户都可以使用。

/boot/ 系统启动目录,保存系统启动相关文件,如内核文件和启动引导程序(grub)文件灯

/dev/ 设备文件保存位置,我们已经说过Linux中所有内容以文件形式保存,包括硬件。那么这个目录就是用来保存所有硬件设备文件的。

/etc/ 配置文件保存位置。系统内所有采用默认安装方式(rpm安装)的服务的配置文件全都保存在这个目录当中,如用户账号和密码,服务的启动脚本,常用服务的配置文件等。

/home/ 普通用户的家目录。建立每个用户时,每个用户要有一个默认登陆位置,这个位置就是这个用户的家目录。

/lib/ 系统调用的函数库保存位置

/lost+found/ 当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。这个目录只有在每个分区中出现,例如/lost+found就是根分区的备份恢复目录,/boot/lost+found就是/boot分区的备份恢复目录。

/media/ 挂载目录。系统建议是用来挂载媒体设备的,例如软盘和光盘。

/mnt/ 挂载目录,早期Linux中只有这一个挂载目录,并没有细分。现在这个目录系统建议挂载额外设备,如U盘,移动硬盘和其他操作系统的分区。

/misc/ 挂载目录。系统建议用来挂载NFS服务的共享目录。哪个目录挂载什么由管理员自己决定,如/mnt/cdrom挂载光盘,/mnt/usb挂载U盘,都是可以的。

/opt/ 第三方安装的软件保存位置。手工安装的源码包软件都可以安装到这个目录,/usr/local/目录中也可以用来安装软件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56Np0Y22-1637293206018)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20201217153633766.png)]

2、文件处理命令

1、ls

ls -a 查看隐藏文件

ls -l 查看文件详细信息

ls -lh 人性化显示

ls -d 查看目录属性

ls -i 查看文件i节点

2、mkdir

mkdir -p 递归创建

3、cd

4、pwd

​ 显示当前目录绝对路径

5、rmdir

​ 删除空目录

6、cp

​ cp -r 复制目录

​ cp -p 保留文件属性

7、mv

​ 剪切或改名

8、rm

​ rm -r 删除目录

​ rm -f 强制执行

​ rm -rf 删除整个目录

9、touch

​ 创建文件

10、cat

​ cat -n 加行号

​ tac 倒着显示

11、more

​ 分页显示文件内容

​ (空格)或f 翻页

​ (Enter) 换行

​ q或Q 退出

12、less

​ 可以向上翻页和搜索的more

​ / 搜索 n 向下查找

13、head

​ head -n 指定行数

​ head -n 7 /filename 只查看前几行(默认前10行)

14、tail

​ 查看后几行

​ tail -f 动态查看文件末尾内容(查看日志文件)

15、ln

​ 生成链接文件

​ ln 创建硬链接(相当于cp -p 但是可以同步更新)

​ ln -s [源文件] [目标文件] 创建软链接(类似于windos的快捷方式)

​ 区别:

​ 1、硬链接不能跨分区

​ 2、硬链接不能链接目录文件

​ 3、软链接文件权限rwx rwx rwx,文件很小,箭头指向源文件

​ 4、通过i节点识别

3、权限管理命令

1、chmod

​ 命令所在路径:/bin/chmod

​ chmod u+x filename 所有者增加执行权限

​ chmod g+w,o-r filename 所属组增加写权限,其他人减少读权限

​ chmod g=rwx filename 所属组权限更改为rwx

​ chmod 640 filename rw-r-----

​ chmod -R 777 filename 递归修改,更改目录和该目录下所有文件的权限为777

权限对文件和文件夹的区别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QEdWdK6f-1637293206020)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20201222151221679.png)]

2、chown

​ 命令所在路径:/bin/chown

​ chown majiasheng filename 改变文件所有者为majiasheng

3、chgrp

​ 改变文件的所属组

​ chgrp majiasheng filename 改变文件所属组为majiasheng

4、umask

​ Shell内置命令

​ umask -S 查看缺省创建文件的权限

4、文件搜索命令

1、find

​ find /etc -name init 在/etc目录下查找文件名为init的文件

​ find /etc -name init* 以init开头的文件

​ find /etc -name init??? 以init开头并且后面有三个字符(匹配单个字符)

​ -iname 不区分大小写

​ find / -size +204800 查找/目录下大于100M的文件

​ find /home -user majiasheng 根据所属组查找

​ find /etc -cmin -5 在/etc下查找5分钟内被修改过属性的文件和目录

​ -amin 访问时间access

​ -cmin 文件属性change

​ -mmin 文件内容modify

​ find /etc -size +163840 -a -size -204800 在/etc下查找大于80MB小于100MB的文件

​ -a 两个条件同时满足

​ -o 两个条件满足任意一个即可

​ -type 指定文件类型 f d l

​ find /etc -name filename -exec ls -l {} ; 在/etc下查找filename文件并显示其详细信息

​ -exec/-ok 命令 {} ; 对搜索结果执行操作

​ find . -inum 31531 -exec rm {} ; 在当前目录下查找i节点为31531的文件并删除

​ -inum 根据i节点查找

2、locate

​ 命令所在路径:/usr/bin/locate

​ locate filename 在文件资料库中查找文件

​ updatedb 升级文件资料库

​ locate -i 不区分大小写查找

3、which

​ 搜索命令所在目录及别名信息

​ which ls

4、whereis

​ 搜索命令所在目录及帮助文档路径

5、grep

​ 在文件中搜索字符串匹配的行并输出

​ -i 不区分大小写

​ -v 排除指定字串

​ grep mysql /root/install.log

5、帮助命令

1、man

​ man ls /经行检索

​ 例:/-l

​ man services 查看配置文件service的帮助信息(不需要写配置文件的绝对路径)

​ man 5 passwd 查看配置文件passwd的帮助手册(root用户下有效)

​ man passwd 查看命令passwd的帮助手册

​ 1 命令

​ 5 配置文件

​ --help 列出常见的选项

​ touch --help

​ date 查看时间 ,可以通过man date查看时间格式来修改时间

2、help

​ 命令所在路径:shell内置命令

​ umask -S 查看默认创建文件的权限,忘记跟什么时可用help umask查看

6、用户管理命令

1、useradd

​ 所在路径:/usr/sbin/useradd

​ 执行权限:root

​ useradd majiashesng

2、passwd

​ 所在路径:/usr/bin/passwd

​ 执行权限:所有用户

​ 设置用户密码

​ passwd majiasheng

3、who

​ 所在路径:/usr/bin/who

​ 执行权限:所有用户

​ 查看登录用户信息

4、w

​ 所在路径:/usr/bin/w

​ 执行权限:所有用户

​ 查看登录用户详细信息

7、压缩解压命令

1、gzip

​ 压缩文件(不能压缩目录)

​ 命令所在路径:/bin/gzip

​ 压缩格式:.gz

2、gunzip

​ 解压.gz的压缩文件

​ 命令所在路径:/bin/gunip

3、tar

​ 打包目录

​ 命令所在路径:/bin/tar

​ 语法:tar 选项[-zcf] 压缩后的文件名 目录

​ -c 打包

​ -v 显示详细信息

​ -f 指定文件名

​ -z 打包同时压缩

​ 例:tar -zcf Japan.tar.gz Japan

​ tar目录解压缩语法:

​ -x 解包

​ -v 显示详细信息

​ -f 指定压缩文件

​ -z 解压缩

​ 例:tar -zxvf Japan.tar.gz

4、zip

​ 压缩文件或命令

​ 命令所在路径:/usr/bin/zip

​ 语法:zip 选项[-r] 压缩后的文件名

​ -r 压缩目录

5、unzip

​ 解压.zip的压缩文件

​ unzip test.zip

6、bzip2

​ 压缩文件 .bz2 (压缩比高,压缩大文件推荐使用)

​ /usr/bin/bzip2

​ 语法:bzip2 选项[-k] 文件

​ -k 产生压缩文件后保留原文件

​ 例:bzip2 -k boduo

​ tar -cjf Japan.tar.bz2 Japan

总结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d7z4vO4m-1637293206021)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20201224114016988.png)]

8、网络命令

1、write

​ 命令所在文件夹:/usr/bin/write

​ 功能:给用户发送信息,以Ctrl+D保存结束

​ 语法:write <用户名>

2、wall

​ 发广播信息

​ 命令所在文件夹:/usr/bin/wall

3、ping

​ 测试网络连通性

​ 命令所在路径:/bin/ping

​ ping -c 3 192.168.1.156 //ping3次

4、ifconfig

​ 查看和设置网卡信息

​ 命令所在路径:/sbin/ifconfig

​ 语法:ifconfig 网卡名称 IP地址

​ 设置linux的IP地址

​ ifconfig eth0 192.168.1.156

5、mail

​ 查看发送电子邮件

​ 命令所在路径:/bin/mail

6、last

​ 列出目前与过去登入系统的用户信息

7、lastlog

​ 查看最后一次登录的用户

8、traceroute

​ 显示数据包到主机间的路径

​ 命令所在路径:/bin/traceroute

9、netstat

​ 显示网络相关信息

​ 命令所在路径:/bin/netstat

​ netstat [选项]

​ 选项:

​ -t : TCP协议

​ -u : UDP协议

​ -l : 监听

​ -r : 路由

​ -n : 显示IP地址和端口号

​ 范例:

​ netstat -tlum 查看本机监听的端口

​ netstat -an 查看本机所有网络连接

​ netstat -rn 查看本机路由列表

10、setup

​ 配置网络

​ 命令所在路径:/usr/bin/setup

​ service network restart //重启网络服务

11、mount

​ 挂载命令

​ 所在路径:/bin/mount

​ 命令语法:mount [-t 文件系统] 设备文件名 挂载点

​ 范例:mount -t iso9660 /dev/sr0 /mnt/cdrom

12、umount

​ 取消挂载(卸载)

​ 语法:umount 设备文件名/挂载点

9、关机重启命令

1、shutdown

​ shutdowm -h 3:00 //定时关机

​ shutdowm -r now //重启

​ -c //取消前一个关机命令

2、其他关机命令

​ halt

​ poweroff

​ init 0

3、其他重启命令

​ reboot

​ init 6

4、系统运行级别

​ 0 关机

​ 1 单用户

​ 2 不完全多用户,不含NFS服务

​ 3 完全多用户

​ 4 未分配

​ 5 图形界面

​ 6 重启

​ 修改系统默认运行级别:

​ id:3:initdefault:

​ runlevel //查询当前系统运行级别

二、vim编辑器

1、vim基本命令

1、插入模式命令

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F8f4LopF-1637293206022)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210119143659586.png)]

2、编辑模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yphYt2VZ-1637293206023)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210119144125873.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTUIf95s-1637293206024)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210119144151795.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sIXeoIut-1637293206025)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210119144331147.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iAAMGip7-1637293206026)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210119144646320.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWbqVcwT-1637293206026)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210119144709490.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4wb6zYhj-1637293206027)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210119144934571.png)]

2、使用技巧

1、导入文件内容:

​ :r !文件名

2、定义快捷键

​ map 快捷键 触发命令

​ 范例:

​ :map ^P I#

​ :map ^B 0x

3、连续行注释

​ :n1,n2s/^/#/g

​ :n1,n2s/^#//g

​ :n1,n2s/^g

4、替换

​ :ab mymail [email protected]

三、软件包管理

1、软件包分类

1、源码包

脚本安装包

​ 源码包的优点:

​ 1、开源,如果有足够的能力,可以修改源代码

​ 2、可以自由选择所需的功能

​ 3、软件是编译安装,所以更加适合自己的系统,更加稳定效率也高

​ 4、卸载方便

​ 源码包的缺点:

​ 1、安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误

​ 2、编译时间较长,安装比二进制安装时间长

​ 3、因为时编译安装,安装过程中一旦报错新手很难解决

2、二进制包(RPM包、系统默认包)

​ 二进制包的优点:

​ 1、包管理系统简单,只通过几个命令就可以安装包的安装、升级、查询和卸载

​ 2、安装速度比源码包安装快的多

​ 二进制包的缺点:

​ 1、经过编译,不再可以看到源代码

​ 2、功能选择不如源码包灵活

​ 3、依赖性

2、RPM包管理-rpm命令管理

1、RMP包命名规则

​ httpd-2.2.15-15.e16.centos.1.i686.rpm

​ httpd 软件包名

​ 2.2.15 软件版本

​ 15 软件发布次数

​ e16.centos 适合Linux平台

​ i686 适合的硬件平台

​ rpm rpm包的扩展名

2、rpm包的依赖性

​ 树形依赖:a->b->c

​ 环形依赖:a->b->c->a

​ 模块依赖:模块依赖查询网站:

​ www.rpmfind.net

3、包全名和包名

​ 包全名:操作的包是没有安装的软件包时,使用包全名。而且 要注意路径。

​ 包名:操作已经安装的软件包时,使用包名。是搜 索/var/lib/rpm/中的数据库。

4、RPM安装

​ rpm -ivh 包全名

​ 选项:

​ -i(install) 安装

​ -v(verbose) 显示详细信息

​ -h(hash) 显示进度

​ --nodeps 不检测依赖性

5、RPM包升级

​ rpm -Uvh 包全名

​ 选项:

​ -U(upgrade) 升级

6、卸载

​ rpm -e 包名

​ 选项:
​ -e(erase) 卸载

​ --nodeps 不检查依赖性

7、查询是否安装

​ rmp -q 包名

​ 功能:查询包是否安装

​ 选项:

​ -q(query) 查询

​ rpm -qa

​ 功能:查询所有已安装的RPM包

​ 选项:

​ -a(all) 所有

8、查询软件包的详细信息

​ rpm -qi 包名

​ 选项:

​ -i 查询软件信息(information)

​ -p 查询未安装的包信息(package)

9、查询包中文件安装位置

​ rpm -ql 包名

​ 选项:

​ -l 列表(list)

​ -p 查询未安装包信息(package)

10、查询系统文件属于那个RPM包

​ rpm -qf 系统文件名

​ 选项:

​ -f 查询系统文件属于哪个软件包(file)

11、查询软件包的依赖性

​ rpm -qR 包名

​ 选项:

​ -R 查询软件包的依赖性(requires)

​ -p 查询未安装包信息(package)

12、RPM包的校验

​ rpm -V 已安装的包名

​ -V 校验指定RPM包中的文件(verify)

​ 验证内容中的8个信息的具体内容如下:

​ S 文件大小是否改变

​ M 文件的类型或文件的权限(rwx)是否被改变

​ 5 文件MD5校验和是否改变(可以看成文件内容是否改变)

​ D 设备的中,从代码是否改变

​ L 文件路径是否改变

​ U 文件的属主(所有者)是否改变

​ G 文件的属组是否改变

​ T 文件的修改时间是否改变

​ 文件类型

​ c 配置文件(config file)

​ d 普通文件(documentation)

​ g ”鬼“文件(ghost file),很少见,就是该文件不应该被这个RPM包包含

​ l 授权文件(license file)

​ r 描述文件(read me)

13、RPM包中文件提取

​ rpm2cpio 包全名 | cpio -idv .文件绝对路径

​ rpm2cpio 将rpm包转换为cpio格式的命令

​ cpio 是一个标准工具,它用于创建软件档案文件和从档案中提取文件

​ cpio 选项 < [文件|设备]

​ -i:copy-in模式,还原

​ -d:还原时自动新建目录

​ -v:显示还原过程

​ rpm -qf /bin/ls 查询ls命令属于哪个软件包

​ mv /bin/ls /tmp/ 造成ls命令误删除的现象

​ rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.e16.i686.rpm | cpio -idv ./bin/ls 提取RPM包中ls命令到当前目录的/bin/ls下

​ cp /root/bin/ls /bin/ 把ls命令复制到/bin/目录,修复文件丢失

3、RPM包管理-yum在线管理

1、IP地址配置和网络yum源

​ setup //使用setup工具

​ vi /etc/sysconfig/network-scripts/ifcfg-eth0

​ 把ONBOOT=“no”改为ONBOOT=“yes” //启动网卡

​ service network restart //重启网络服务

2、网络yum源

​ vi /etc/yum.repos.d/CentOS-Base.repo

​ [base] 容器名称,一定要放在[]中

​ name 容器说明,可以自己随便写

​ mirrorlist 镜像站点,这个可以自己注释掉

​ baseurl 我们的yum源服务器的地址。默认为CentOS官方的yum源服务器,是可以免费使用的,如果你觉得慢可以改成你喜欢的yum源地址

​ enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效

​ gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效

​ gpgkey 数字证书的公钥文件保存位置。不用修改

3、yum命令

1、查询

​ yum list //查询所有可用的软件包列表

​ yum search 关键字 //搜索服务器上所有和关键字相关的包

2、安装

​ yum -y install 包名

​ 选项:

​ install 安装

​ -y 自动回答yes

3、升级

​ yum -y update 包名

​ 选项:

​ update 升级

​ -y 自动回答yes

4、卸载

​ yum -y remove 包名

​ 选项:

​ remove 卸载

​ -y 自动回答yes

​ 4、YUM软件组管理

​ yum grouplist //列出所有可用的软件组列表

​ yum groupinstall 软件组名 //安装指定的软件组,组名可以由grouplist查询出来

​ yum groupremove 软件包名 //卸载指定软件组

4、源码包管理

1、源码包和PRM包的区别

1、区别

​ 安装之前的区别:概念上的区别

​ 安装后的区别:安装位置不同

2、RPM包的安装位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BdRdiW7I-1637293206027)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210207161111417.png)]

3、源码包的安装位置

​ 安装在指定位置中,一般是:/usr/local/软件名/

4、安装位置带来的影响

​ RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是:

​ /etc/rc.d/init.d/httpd start

​ service httpd start

​ 而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:

​ /usr/local/apache2/bin/apachectl start

2、源码包的安装过程

1、安装准备

​ 安装c语言编译器(gcc)

​ 下载源码包

​ http://mirror.bit.edu.cn/apache/httpd/

2、安装注意事项

​ 源代码保存位置:/usr/local/src/

​ 软件安装位置:/usr/lcoal

​ 如何确定安装过程报错

​ 安装过程停止

​ 并出现error、warning或no的提示

3、源码包安装过程

1、下载源码包
2、解压缩下载的源码包
3、进入解压缩目录
4、./configure 软件配置与检查

​ 定义需要的功能选项

​ 检测系统环境是否和安装要求

​ 把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。

5、make 编译
6、make install 编译安装

5、脚本安装包

1、脚本安装包

​ 脚本安装包并不是独立的软件包类型,常见安装的是源码包。

​ 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。

​ 非常类似于Windows下软件的安装方式。

2、Webmin的作用

​ Webmin是一个基于Web的Linux系统管理界面。您就可以通过图形化的方式设置用户账号、Apache、DNS、文件共享等服务。

3、Webmin安装过程

​ 下载软件

​ http://sourceforge.net/projects/webadmin/files/webmin/

​ 解压缩,并进入解压缩目录

​ 执行安装脚本

四、用户和用户组管理

1、用户配置文件

1、用户信息文件 /etc/passwd

​ 第1字段:用户名称

​ 第2字段:密码标志

​ 第3字段:UID(用户ID)

​ 0: 超级用户

​ 1-499: 系统用户(伪用户)

​ 500-65535: 普通用户

​ 第4字段:GID(用户初始组ID)

​ 第5字段:用户说明

​ 第6字段:家目录

​ 普通用户:/home/用户名/

​ 超级用户:/root/

​ 第7字段:登录之后的Shell

1、初始组和附加组

​ 初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。

​ 附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。

2、Shell是什么

​ Shell就是就是Linux的命令解释器。

​ 在/etc/passwd当中,除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin。

3、影子文件 /etc/shadow

​ 第1字段:用户名

​ 第2字段:加密密码

​ 加密算法升级为SHA512散列加密算法

​ 如果密码位是"!!“或”*"代表没有密码,不能登录

​ 第3字段:密码最后一次修改日期

​ 使用1970年1月1日作为标准时间,每过一天时间戳加1

​ 第4字段:两次密码的修改间隔时间(和第3字段相比)

​ 第5字段:密码有效期(和第3字段相比)

​ 第6字段:密码修改到期前的警告天数(和第5字段相比)

​ 第7字段 :密码过期之后的宽限天数(和第5字段相比)

​ 0:代表密码过期后立即失效

​ -1:则代表密码永远不会失效

​ 第8字段:账号失效时间

​ 要用时间戳表示

​ 第9字段:保留

4、时间戳换算

​ 把时间戳换算成日期

​ date -d “1970-01-01 16066 days”

​ 把日期换算为时间戳

​ echo ( ( (( (((date --date=“2014/01/06”+%s)/86400+1))

5、组信息文件 /etc/group

​ 第一字段:组名

​ 第二字段:组密码标志

​ 第三字段:GID

​ 第四字段:组中附加用户

6、组密码文件 /etc/gshadow

​ 第一字段:组名

​ 第二字段:组密码

​ 第三字段:组管理员用户名

​ 第四字段:组中附加用户

2、用户管理命令

1、用户的家目录

​ 普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700

​ 超级用户:/root/,所有者和所属组都是root用户,权限是550

2、用户的邮箱

​ /ver/spool/mail/用户名/

3、用户模板目录

​ /etc/skel

4、用户添加命令useradd

1、useradd命令格式

​ useradd [选项] 用户名

​ 选项:

​ -u UID:手工指定用户的UID号

​ -d 家目录:手工指定用户的家目录

​ -c 用户说明:手工指定用户的说明

​ -g 组名:手工指定用户的初始组

​ -G 组名:指定用户的附加组

​ -s shell:手工指定用户的登录shell。默认是/bin/bash

2、添加默认用户

​ useradd sc

​ grep sc /etc/passwd

​ grep sc /etc/shadow

​ grep sc /etc/group

​ grep sc /etc/gshadow

​ ll -d /home/lamp/

​ ll /ver/spool/mail/lamp

3、指定选项添加用户

​ useradd -u 500 -G root,bin -d /home/lamp 1\

​ -c “test user” -s /bin/bash sc

4、用户默认值文件

​ /etc/default/useradd

​ GROUP=100 用户默认组

​ HOME=/home 用户家目录

​ INACTIVE=-1 密码过期宽限天数(shadow文件7字段)

​ EXPIRE= 密码失效时间(8)

​ SHELL=/bin/bash 默认shell

​ SKEL=/etc/skel 模板目录

​ CREATE_MAIL_SPOOL=yes 是否建立邮箱

​ /etc/login.defs

​ PASS_MAX_DAYS 99999 密码有效期(5)

​ PASS_MIN_DAYS 0 密码修改间隔(4)

​ PASS_MIN_LEN 5 密码最小5位(PAM)

​ PASS_WARN_AGE 7 密码到期警告(6)

​ UID_MIN 500 最小和最大UID范围

​ UID_MAX 60000

​ ENCRYPT_METHOD SHA512 加密模式

5、修改用户命令passwd

1、passwd命令格式

​ passwd [选项] 用户名

​ 选项:

​ -S 查询用户密码的密码状态。仅root用户可用

​ -l 暂时锁定用户。仅root用户可用

​ -u 解锁用户。仅root用户可用

​ --stdin 可以通过管道符输出的数据作为用户的密码

2、查看密码状态

​ passwd -S lamp

​ lamp PS 2013-01-06 0 99999 7 -1

​ 用户密码设定时间(2013-01-06)密码修改间隔时间(0)

​ 密码有效期(99999)警告时间(7)密码不失效(-1)

3、锁定用户和解锁用户

​ passwd -l lamp 锁定

​ passwd -u lamp 解锁

4、使用字符串作为用户的密码

​ echo “123” | passwd --stdin lamp

6、修改用户信息usermod,修改用户密码状态chage

​ usermod [选项] 用户名

​ 选项:

​ -u UID: 修改用户的UID号

​ -c 用户说明: 修改用户的说明信息

​ -G 组名: 修改用户的附加组

				-L:						临时锁定用户(Lock)

​ -U: 解锁用户锁定(Unlock)

​ usermod -c “test user” lamp 修改用户的说明

​ usermod -G root lamp 把lamp用户加入root组

​ usermod -L lamp 锁定用户

​ usermod -U lamp 解锁用户

​ chage [选项] 用户名

​ 选项:

​ -l: 列出用户的详细密码状态

​ -d 日期: 修改密码最后一次更改日期(shadow3字段)

​ -m 天数: 两次密码修改间隔(4字段)

​ -M 天数: 密码有效期(5字段)

​ -W 天数: 密码过期前警告天数(6字段)

​ -I 天数: 密码过期后宽限天数(7字段)

​ -E 日期: 账号失效时间(8字段)

​ chage -d 0 lamp

​ 这个命令其实是把密码修改日期归0了(shadow第3字段)

​ 这样用户一登陆就要修改密码

7、删除用户userdel、用户切换命令su

1、删除用户

​ userdel [-r] 用户名

​ 选项:

​ -r 删除用户的同时删除用户的家目录

​ 手工删除用户

​ vi /etc/passwd

​ vi /etc/shadow

​ vi /etc/group

​ vi /etc/gshasow

​ rm -rf /var/spool/mail/lamp

​ rm -rf /home/lamp

2、查看用户ID

​ id 用户名

3、切换用户身份su

​ su [选项] 用户名

​ 选项:

​ -: 选项只使用“-”代表连带用户的环境变量一起切换

​ -c 命令: 仅执行一次命令,而不切换用户身份

​ su - root 切换成root

​ su - root -c “useradd user1”

​ 不切换成root,但执行useradd命令添加user1用户

3、用户组管理命令

1、添加用户组

​ groupadd [选项] 组名

​ 选项:

​ -g GID: 指定组ID

2、修改用户组

​ groupmod [选项] 组名

​ 选项:

​ -g GID: 修改组ID

​ -n 新组名: 修改组名

​ groupmod -n testgrp group 1

​ 把组名group1修改为testgrp

3、删除用户组

​ groupdel 组名

​ 4、把用户添加入组或从组中删除

​ gpasswd 选项 组名

​ 选项:

​ -a 用户名: 把用户加入组

​ -d 用户名: 把用户从组中删除

五、权限管理

1、ACL权限

1、ACL权限

1、ACL权限简介和开启方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MzsMSx24-1637293206028)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210224192719384.png)]

2、查看分区ACL权限是否开启

​ dumpe2fs -h /dev/sda3

​ dumpe2fs命令是查询指定分区详细文件系统信息的命令

​ 选项:

​ -h:仅显示超级块中信息,而不显示磁盘块组的详细信息

3、临时开启分区ACL权限

​ mount -o remount,acl/

​ 重新挂载根分区,并挂载加入ACL权限

4、永久开启分区ACL权限

​ vi /etc/fstab

​ 加入acl

​ mount -o remount /

​ 重新挂载文件系统或重启系统,使修改生效

2、查看和设定ACL权限

1、查看ACL命令

​ getfacl 文件名

​ 查看acl权限

2、设定ACL权限

​ setfacl 选项 文件名

​ 选项:

​ -m 设定ACL权限

​ -x 删除指定的ACL权限

​ -b 删除所有ACL权限

​ -d 设定默认ACL权限

​ -k 删除默认ACL权限

​ -R 递归设定ACL权限

3、给用户设定ACL权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jfFcpTVr-1637293206030)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210224195532848.png)]

4、给用户组设定ACL权限

​ groupadd tgroup2

​ setfacl -m g:tgroup2:rwx project/

​ 为tgroup2分配ACL权限。使用"g:组名:权限"格式

3、最大有效权限与删除ACL权限

1、最大有效权限mask

​ mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限"相与"才能得到用户的真正权限

​ 修改最大有效权限

​ setfacl -m m:rx 文件名

​ 设定mask权限为r-x。使用”m:权限“格式

2、删除ACL权限

​ setfacl -x u:用户名 文件名

​ 删除指定用户的ACL权限

​ setfacl -x g:组名 文件名

​ 删除指定用户组的ACL权限

​ setfacl -b 文件名

​ 删除文件下的所有ACL权限

4、默认ACL权限和递归ACL权限

1、递归ACL权限

​ 递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限

​ setfacl -m u:用户名:权限 -R 文件名

2、默认ACl权限

​ 默认ACl权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限

​ setfacl -m d:u:用户名:权限 文件名

2、文件特殊权限

1、SetUID

1、SetUID的功能

​ 只有可以执行的二进制程序才能设定SUID权限

​ 命令执行者要对改程序拥有x(执行)权限

​ 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)

​ SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

​ passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码

​ ll /usr/bin/passwd

​ cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

​ ll /bin/cat

2、设定SetUID的方法

​ 4代表SUID

​ chmod 4755 文件名

​ chmod u+s 文件名

3、取消SetUID的方法

​ chmod 755 文件名

​ chmod u-s 文件名

4、危险的SetUID

​ 关键目录应严格控制写权限。比如”/“、”/usr“等

​ 用户的密码设置要严格遵守密码三原则

​ 对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限

2、SetGID

1、SetGID针对文件的作用

​ 只有可执行的二进制程序才能设置SGID权限

​ 命令执行者要对该程序拥有x(执行)权限

​ 命令执行者在执行程序的时候,组身份升级为该程序文件的属组

​ SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

​ 例:

​ /usr/bin/locate是可执行二进制程序,可以赋予SGID

​ 执行用户lamp对/usr/bin/locate命令拥有执行权限

​ 执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库

​ 命令结束,lamp用户的组身份返回为lamp组

2、SetGID针对目录的作用

​ 普通用户必须对此目录拥有r和x权限,才能进入此目录

​ 普通用户在此目录中的有效组会变成此目录的属组

​ 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组

3、设定SetGID

​ 2代表SUID

​ chmod 2755 文件名

​ chmod g+s 文件名

​ 例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MnlPQRzl-1637293206031)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210226165500967.png)]

3、Sticky BIT

3、文件系统属性chattr权限

1、chattr命令格式

​ chattr [±=] [选项] 文件或目录名

​ +:增加权限

​ -:删除权限

​ =:等于某权限

​ 选项:

​ i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。

​ a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除

2、查看文件系统属性

​ lsattr 选项 文件名

​ 选项:
​ -a:显示所有文件和目录

​ -d:若目标是目录,仅列出目录本身的属性,而不是子文件的

4、sudo权限

1、sudo权限

​ root把本来只能超级用户执行的命令赋予普通用户执行。

​ sudo的操作对象是系统命令

2、sudo使用

​ visudo

​ 实际修改的是/etc/sudoers文件

​ root ALL=(ALL) ALL

​ 用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

​ # %wheel ALL=(ALL) ALL

​ #%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

3、授权sc用户可以重启服务器

​ visudo

​ sc ALL=/sbin/shutdown -r now

4、普通用户执行sudo赋予的命令

​ su - sc

​ sudo -l

​ 查看可用的sudo命令

​ sudo /sbin/shutdown -r now

​ 普通用户执行sudo赋予的命令

六、文件管理系统

1、回顾分区和文件系统

1、分区类型

​ 主分区:总共最多只能分四个

​ 扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。

​ 逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘Linux最多支持11个逻辑分区。

2、分区表示方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UD3GP87E-1637293206033)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210228143907049.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bGbK2Cbq-1637293206034)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210228143948787.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHGRDJyG-1637293206035)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210228144250993.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4IbTzfCr-1637293206036)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210228144315690.png)]

3、文件系统

​ ext2:是ext文件系统的升级版本,Red Hat Linux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件(1TB=1024GB=1024*1024KB)

​ ext3:ext3文件系统是ext2文件系统的升级版本,最大的区别就是带日志功能,以在系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和最大2TB的文件

​ ext4:它是ext3文件系统的升级版。ext4在性能、伸缩性和可靠性方面进行了大量的改进。ext4的变化可以说是翻天覆地的,比如向下兼容ext3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟日志。持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用barrier等。是CentOS 6.3默认文件系统(1EB=1024PB=1024*1024TB)

2、文件系统常用命令

1、df命令、du命令、fsck命令和dump2fs命令

1、文件系统查看命令df

​ df [选项] [挂载点]

​ 选项:

​ -a 显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs

​ -h 使用习惯单位显示容量,如KB、MB和GB等

​ -T 显示文件系统类型

​ -m 以MB为单位显示容量

​ -k 以KB为单位显示容量。默认就是以KB为单位

2、统计目录或文件大小

​ du [选项] [目录或文件名]

​ 选项:

​ -a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量

​ -h 使用习惯单位显示磁盘占用量,如KB、MB或GB等

​ -s 统计总占用量,而不列出子目录和子文件的占用量

3、du命令和df命令的区别:

​ df命令是从文件系统考虑的,不光考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)

​ du命令是面向文件的,只会计算文件或目录占用的空间

4、文件系统修复命令fsck

​ fsck [选项] 分区设备文件名

​ 选项:

​ -a 不用显示用户提示,自动修复文件系统

​ -y 自动修复。和-a作用一致,不过有些文件系统只支持-y

5、显示磁盘状态命令dumpe2fs

​ dumpe2fs 分区设备文件名

2、挂载命令

1、查询和自动挂载

​ mount [-l]

​ 查询系统中已经挂载的设备,-l会显示卷标名称

​ mount -a

​ 依据配置文件/etc/fstab的内容,自动挂载

2、挂载命令格式

​ mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点

​ 选项:
​ -t 文件系统:加入文件系统类型来指定挂载的类型,科 以ext3、ext4、ios9660等文件系统

​ -L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载

​ -o 特殊选项:可以指定挂载的额外选项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VO3BQzAc-1637293206037)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210228193933482.png)]

​ mount -o remount,noexec /home

​ 重新挂载/boot分区,并使用noexec权限

​ cd /home

​ vi hello.sh

​ chmod 775 hello.sh

​ ./hello.sh

​ mount -o remount,exec /home

3、挂载光盘与U盘

1、挂载光盘

​ mkdir /mnt/cdrom/

​ 建立挂载点

​ mount -t ios9660 /dev/cdrom /mnt/cdrom/

​ 挂载光盘

​ mount /dev/sr0 /mnt/cdrom/

2、卸载命令

​ umount 设备文件名或挂载点

​ umount /m nt/cdrom

3、挂载U盘

​ fdisk -l

​ 查看U盘设备文件名

​ mount -t vfat /dev/sdbl /mnt/usb/

​ 注意:Linux默认是不支持NTFS文件系统的

4、支持NTFS文件系统

1、下载NTFS-3G插件

​ http://www.tuxera.com/community/ntfs-3g-download

2、安装NTFS-3G

​ tar -zxvf ntfs-3g_ntfsprogs-2013.1.13.tgz

​ 解压

​ cd ntfs-3g_ntfsprogs-2013.1.13

​ 进入解压目录

​ ./configure

​ 编译器准备。没有指定安装目录,安装到默认位置中

​ make

​ 编译

​ make install

​ 编译安装

3、使用

​ mount -t ntfs-3g 分区设备文件名 挂载点

3、fdisk分区

1、fdisk命令分区过程

1、添加新硬盘

​ 关闭虚拟机添加

2、查看新硬盘

​ fdisk -l

3、使用fdisk命令分区

​ fdisk /dev/sdb

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLFKUMMf-1637293206038)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301115133734.png)]

4、重新读取分区表信息

​ partprobe

5、格式化分区

​ mkfs -t ext4 /dev/sdb1

6、建立挂载点并挂载

​ mkdir /disk1

​ mount /dev/sdb1 /disk1/

2、分区自动挂载与fstab文件修复

1、/etc/fstab文件

​ 第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)

​ 第二字段:挂载点

​ 第三字段:文件系统名称

​ 第四字段:挂载参数

​ 第五字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份

​ 第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高

2、分区自动挂载

​ vi /etc/fstab

​ …省略部分输出…

​ /dev/sdb1 /disk1 ext4 defaults 1 2

​ mount -a

​ 依据配置文件/etc/fstab的内容,自动挂载

3、/etc/fstab文件修复

​ mount -o remount,rw /

七、shell基础

1、Shell概述

1、Shell是什么

​ Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

​ Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

2、Shell的分类

​ Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。

​ C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相似而得名

​ Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh

​ Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

3、Linux支持的Shell

​ /etc/shells

2、Shell脚本的执行方式

1、echo输出命令

​ echo [选项] [输出内容]

​ 选项:

​ -e:支持反斜线控制的字符转换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xE3qE2gO-1637293206038)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301175006221.png)]

​ 例:

​ echo -e “ab\bc”

​ 删除左侧字符

​ echo -e “a\tb\tc\nd\te\tf”

​ 制表符与换行符

​ echo -e “\x61\t\x62\t\x63\n\x64\t\x65\t\x66”

​ 按照十六进制ASCII码也同样可以输出

​ echo -e “\e[1;31m abcd \e[0m”

​ 输出颜色

​ 30m=黑色,31m=红色,32m=绿色,33m=黄色

​ 34m=蓝色,35m=洋红,36m=青色,37m=白色

2、第一个脚本

​ vi hello.sh

​ #!/bin/Bash

​ #The first program

​ #Author:majiasheng (E-mail:[email protected])

​ echo -e “Mr.Ma JiaSheng is the most honest man in LampBrother”

3、脚本执行

​ 赋予执行权限,直接运行

​ chmod 775 hello.sh

​ ./hello.sh

​ 通过Bash调用执行脚本

​ bash hello.sh

3、Bash的基本功能

1、历史命令与命令补全

​ history [选项] [历史命令保存文件]

​ 选项:

​ -c:清空历史命令

​ -w:把缓存中的历史命令写入命令保存文件

​ ~/.bash_history

​ 历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中修改

​ 历史命令的调用

​ 使用上、下箭头调用以前的历史命令

​ 使用“!n”重复执行第n条历史命令

​ 使用“!!”重复执行上一条命令

​ 使用“!字串”重复执行最后一条以该字串开头的命令

2、命令与文件的补全

​ 在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件的时候,按“Tab”键就会自动补全

3、命令别名与常用快捷键

1、命令别名

​ alias 别名=‘原命令’

​ 设定命令别名

​ alias

​ 查询命令别名

2、命令执行时顺序

​ 1、第一顺位执行用绝对路径或相对路径执行的命令

​ 2、第二顺位执行别名

​ 3、第三顺位执行Bash的内部命令

​ 4、第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

​ 让别名永久生效

​ vi /root/.bashrc

​ 删除别名

​ unalias 别名

3、Bash常用快捷键

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hzOjGP37-1637293206039)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301195830499.png)]

4、输入输出重定向

1、标准输入输出

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0Acpb7D-1637293206040)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301200432098.png)]

2、输出重定向

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z0rYktPY-1637293206044)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301200454693.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXy9zn6c-1637293206045)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301201010664.png)]

3、输入重定向

​ wc [选项] [文件名]

​ 选项:

​ -c 统计字节数

​ -w 统计单词数

​ -l 统计行数

​ 命令<文件 把文件作为命令的输入

5、多命令顺序执行与管道符

1、多命令顺序执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gY2Dux7d-1637293206046)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210302193923852.png)]

​ 例子:

​ ls ; date ; cd /user ; pwd

​ dd if=输出文件 of=输出文件 bs=字节数 count=个数

​ 选项:

​ if=输出文件 指定源文件或原设备

​ of=输出文件 指定目标文件或目标设备

​ bs=字节数 指定一次输入/输出多少字节,即把这些字节看作一个数据块

​ count=个数 指定输入/输出多少个数据块

​ 例子:

​ date ; dd if=/dev/zero of=/root/testfile bs=lk count=100000 ; date

​ ls anaconda-ks.cfg && echo yes

​ ls /root/test || echo "no

​ 命令 && echo yes || echo no

2、管道符

​ 命令格式:

​ 命令1 | 命令2

​ 命令1的正确输出作为命令2的操作对象

​ 颜色显示

​ 例子:

​ ll -a /etc/ | more

​ netstat -an | grep “ESTABLISHED”

​ grep [选项] “搜索内容” 文件名

​ 选项:

​ -i: 忽略大小写

​ -n: 输出行号

​ -v: 反向查找

​ --color=auto 搜索出的关键字颜色显示

6、通配符和特殊符号

1、通配符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w1cv67Tg-1637293206046)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210303191634508.png)]

​ 例:

​ cd /tmp/

​ rm -rf *

​ touch abc

​ touch abcd

​ touch 012

​ touch 0abc

​ ls ?abc

​ ls [0-9]*

​ ls [^0-9]*

2、Bash中其他特殊符号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hlNBLDLH-1637293206047)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210303192721986.png)]

​ 单引号与双引号

​ name=sc

​ echo ‘$name’

​ echo “$name”

​ echo ‘$(date)’

​ echo “$(date)”

4、Bash变量

1、用户自定义变量

1、什么是变量

​ 变量是计算机内存的单元 ,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息 。

2、变量设置规则

​ 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。

​ 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。

​ 变量用等号连接值, 等号左右两侧不能有空格。

​ 变量的值如果有空格,需要使用单引号或双引号包括。

​ 在变量的值中,可以使用“\”转义符。

​ 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“ 变 量 名 ” 或 用 变量名”或用 {变量名}包含。

​ 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。

​ 环境变量名建议大写,便于区分。

3、变量分类

​ 用户自定义变量

​ 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。

​ 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。

​ 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

4、本地变量

​ 变量定义

​ name=“shen chao”

​ 变量叠加

​ aa=123

​ aa="$aa"456

​ aa=${aa}789

​ 变量调用

​ echo $name

​ 变量查看

​ set

​ 变量删除

​ unset name

2、环境变量

1、环境变量是什么

​ 用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。

2、设置环境变量

​ export 变量名=变量值

​ 声明变量

​ env

​ 查询变量

​ unset 变量名

​ 删除变量

3、系统常见环境变量

​ PATH:系统查找命令的路径

​ echo $PATH

​ /user/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:

​ /sbin:/bin/usr/sbin:/usr/bin:/root/bin

​ PATH="$PATH":/root/sh

​ PATH变量叠加

​ PS1:定义系统提示符的变量

​ \d:显示日期,格式为“星期 月 日”

​ \h:显示简写主机名。如默认主机名“localhost”

​ \t:显示24小时制时间,格式为“HH:MM:SS”

​ \T:显示12小时制时间,格式为“HH:MM:SS”

​ \A:显示24小时制时间,格式为“HH:MM”

​ \u:显示当前用户名

​ \w:显示当前所在目录的完整名称

​ \W:显示当前所在目录的最后一个目录

​ \ #:执行的第几个命令

​ \ KaTeX parse error: Expected 'EOF', got '#' at position 23: …是root用户会显示提示符为“#̲”,如果是普通用户会显示提示符…

​ 例子:

[root@localhost ~]# PS1='[\u@\t\w]\$ '
[root@04:50:08 /usr/local/src]#PS1='[\u@\@ \h \# \W]\$ '
[root@04:53 上午 localhost 31 src]#PS1='[\u@\h \W]\$ '

3、位置参数变量

1、位置参数变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DBcOn3pw-1637293206047)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210304154943938.png)]

​ 例子1:

#!/bin/bash
num1=$1
num2=$2
sum=$(( $num1+$num2 ))
#变量sum的和是num1加num2
echo $sum
#打印变量sum的值

​ 例子2:

#!/bin/bash
echo "A total of $# parameters"
#使用$#代表所有参数个数
echo "The parameters is:$*"
#使用$*代表所有的参数
echo "The parameters is:$@"
#使用$@也代表所有参数

​ 例子3: ∗ 和 *和 @的区别

#!/bin/bash
for i in "$*"
#$*中所有参数看成是一个整体,所以这个for循环只执行一次
	do
		echo "The parameters is:$i"
	done
x=1
for y in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
	do
		echo "The parameters is:$y"
		x=$(( $x + 1 ))
	done

4、预定义变量

1、预定义变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bRKyIvAM-1637293206048)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210304163439931.png)]

#!/bin/bash

echo "The current process is $$"
#输出当前进程PID
#这个PID就是variable.sh这个脚本执行时,生成的进程PID

find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件
#符号&的意思是把命令放入后台执行,工作管理我们在系统管理章节会详细介绍
echo "The last one Daemon process is $!"
2、键盘接受输入

​ read [选项] [变量名]

​ 选项:

​ -p “提示信息”:在等待read输入时,输出提示信息

​ -t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间

​ -n 字符数: read命令只接受指定的字符数,就会执行

​ -s: 隐藏输入的数据,适用于机密信息的输入

#!/bin/bash

read -t 30 -p "Please input your name: " name
#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
echo "Name is $name"

read -s -t 30 -p "Please enter your age: " age
#年龄是隐私,所以我们用“-s”选项隐藏输入
echo -e "\n"
echo "Age is $age"

read -n 1 -t 30 -p "Please select your gender[M/F]: " gender
#使用“-n 1”选项只接受一个输入字符就会执行(都不用输入回车)
echo -e "\n"
echo "Sex is $gender"

5、Bash的运算符

1、数值运算与运算符

1、declare声明变量类型

​ declare [+/-] [选项] 变量名

​ 选项:
​ -:给变量设定类型属性

​ +:取消变量的类型属性

​ -i:将变量声明为整数型(integer)

​ -x:将变量声明为环境变量

​ -p:显示指定变量的被声明类型

2、数值运算—方法1

​ aa=11

​ bb=22

​ #给变量aa和bb赋值

​ declare -i cc= a a + aa+ aa+bb

​ 方法2:expr或let数值运算工具

​ aa=11

​ bb=22

​ #给变量aa和bb赋值

​ dd=$(expr $aa + $bb)

​ #dd的值是aa和bb的和。注意“+”号左右两侧必须有空格

​ 方法3:“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ (())[运算式]”

​ aa=11

​ bb=11

​ ff=$(( a a + aa+ aa+bb ))

​ gg=$[ a a + aa+ aa+bb ]

3、运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qrhh3quJ-1637293206048)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210304172055319.png)]

​ 例子:

​ aa=$(( (11+3)*3/2 ))

​ bb=$(( 14%3 ))

​ cc=$(( 1 && 0 ))

2、变量测试与内容替换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uYo7Yhqz-1637293206049)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210304173035819.png)]

​ 例子1:测试x=${y-新值}

​ unset y

​ #删除变量y

​ x=${y-new}

​ #经行测试

​ echo $x

​ new

​ #因为变量y不存在,所以x=new

​ y=""

​ #给变量y赋值为空

​ x=${y-new}

​ #进行测试

​ echo $x

​ y=old

​ #给变量y赋值

​ x=${y-new}

​ #进行测试

​ echo $x

​ old

6、环境变量配置文件

1、环境变量配置文件简介

1、source命令

​ source 配置文件

​ 或

​ .配置文件

2、环境变量配置文件

​ 环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PSI、HOSTNAME等默认环境变量。

​ /etc/profile

​ /etc/profile.d/*.sh

​ ~/.bash_profile

​ ~/.bashrc

​ /etc/bashrc

2、环境变量配置文件作用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSOBqu8p-1637293206049)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210304200140630.png)]

​ /etc/profile的作用

​ USER变量:

​ LOGNAME变量:

​ MAIL变量:

​ PATH变量:

​ HOSTNAME变量:

​ HISTSIZE变量:

​ umask:

​ 调用/etc/profile.d/*.sh文件

3、其他配置文件和登录信息

1、注销时生效的环境变量配置文件

​ ~/.bash_logout

2、其他配置文件

​ ~/.bash_history

3、Shell登录信息

​ 本地终端欢迎信息:/etc/issue

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OLb2q8PI-1637293206050)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210305102747873.png)]

​ 远程终端欢迎信息:/etc/issue.net

​ 转义符在/etc/issue.net文件中不能使用

​ 是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入"Banner /etc/issue.net"行才能显示(记得重启SSH服务)

​ 登录后欢迎信息:/etc/motd

​ 不管是本地登录,还是远程登录,都可以显示此欢迎信息

7、正则表达式

1、基础正则表达式

1、正则表达式与通配符

​ 正则表达式用来在文件中匹配符合条件的字符串,正则时包含匹配。grep、awk、sed等命令可以支持正则表达式

​ 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用Shell自己的通配符来经行匹配了。

2、基础正则表达式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W1tydfgX-1637293206050)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210305105103830.png)]

​ *前一个字符匹配0次,或任意多次

​ grep “a*” test_rule.txt

​ #匹配所有内容,包括空白行

​ grep “aa*” test_rule.txt

​ #匹配至少包含有一个a的行

​ grep “aaa*” test_rule.txt

​ #匹配最少包含两个连续a的字符串

​ grep “aaaaa*” test_rule.txt

​ #则会匹配最少包含四个连续a的字符串

"."匹配除了换行符外任意一个字符

​ grep “s…d” test_rule.txt

​ #"s…d"会匹配在s和d这两个字母之间一定有两个字符的单词

​ grep “s.*d” test_rule.txt

​ #匹配在s和d字母之间有任意字符

​ grep “.*” test_rule.txt

​ #匹配所有内容

"^“匹配行首,”$"匹配行尾

​ grep “^M” test_rule.txt

​ #匹配以大写M开头的行

​ grep “n$” test_rule.txt

​ #匹配以小写n结尾的行

​ grep -n “^$” test_rule.txt

​ #会匹配空白行

"[]"匹配中括号中指定的任意一个字符,只匹配一个字符

​ grep “s[ao]id” test_rule.txt

​ #匹配s和i字母中,要不是a,要不是o

​ grep “[0-9]” test_rule.txt

​ #匹配任意一个数字

​ grep “1” test_rule.txt

​ #匹配用小写字母开头的行

"[^]"匹配除中括号的字符外的任意一个字符

grep "^[^a-z]" test_rule.txt
#匹配不用小写字母开头的行
grep "^[^a-zA-Z]" test_rule.txt
#匹配不用字母开头的行

#"\"转义符
grep "\.$" test_rule.txt
#匹配使用"."结尾的行 

#"\{n\}"表示其前面的字符恰好出现n次
grep "a\{3\}" test_rule.txt
#匹配a字母连续出现三次的字符串
grep "[0-9]\{3\}" test_rule.txt
#匹配包含连续三个数字的字符串

#"\[n,\]"表示其前面的字符出现不小于n次
grep "^[0-9]\{3,\}[a-z]" test_rule.txt
#匹配最少用连续三个数字开头的行

#"\{n,m}"匹配其前面的字符至少出现n次,最多出现m次
grep "sa\{1,3\}i" test_rule.txt
#匹配在字母s和字母i之间有最少一个a,最多三个a

2、字符截取命令

1、cut字符提取命令

​ cut [选项] 文件名

​ 选项:

​ -f列号:提取第几列

​ -d分隔符:按照指定分隔符分割列

​ vi student.txt

​ ID Name gender Mark

​ 1 Liming M 86

​ 2 Sc M 90

​ 3 Gao M 83

​ 例:

​ cut -f 2 student.txt

​ cut -f 2,3 student.txt

​ cut -d “:” -f 1,3 /etc/passwd

cut命令的局限

​ df -h | cut -d " " -f 1,3

2、printf命令

​ printf ‘输出类型输出格式’ 输出内容

​ 输出类型:

​ %ns: 输出字符串。n是数字指代输出几个字符

​ %ni: 输出整数。n是数字指代输出几个数字

​ %m.nf: 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数

​ 输出格式:

​ \a: 输出警告声音

​ \b: 输出退格键,也就是Backspace键

​ \f: 清除屏幕

​ \n: 换行

​ \r: 回车,也就是Enter键

​ \t: 水平输出退格键,也就是Tab键

​ \v: 垂直输出退格键,也就是Tab键

​ 例子:

​ printf %s 1 2 3 4

​ printf %s %s %s 1 2 3 4 5 6

​ printf ‘%s %s %s’ 1 2 3 4 5 6

​ printf ‘%s %s %s\n’ 1 2 3 4 5 6

​ printf ‘%s’ $(cat student.txt)

​ #不调整输出格式

​ printf ‘%s\t %s\t %s\t %s\t %s\t %s\n’ $(cat student.txt)

​ #调整格式输出

​ 在awk命令的输出中支持print和printf命令

​ print:print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)

​ printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符

3、awk命令

​ awk ‘条件1{动作1} 条件2{动作2}…’ 文件名

​ 条件(Pattern):

​ 一般使用关系表达式作为条件

​ x>10 判断变量x是否大于10

​ x>=10 大于等于

​ x<=10 小于等于

​ 动作(Action):

​ 格式化输出

​ 流程控制语句

​ vi student.txt

​ ID Name PHP Linux MySQL Average

​ 1 Liming 82 95 86 87.66

​ 2 Sc 74 96 87 85.66

​ 3 Gao 99 83 93 91.66

​ awk ‘{printf $2 “\t” $6 “\n”}’ student.txt

​ df -h | awk ‘{print $1 “\t” $3}’

BEGIN

​ awk ‘BEGIN{printf “This is a transcript \n”} {printf $2 “\t” $6 “\n”}’ student.txt

END

​ awk ‘END{printf “The End \n”} {printf $2 “\t” $6 “\n”}’ student.txt

FS内置变量

​ cat /etc/passwd | grep “/bin/bash” | awk ‘BEGIN{FS=":"} {printf $1 “\t” $3 “\n”}’

关系运算符

​ cat student.txt | grep -v Name | awk ‘$6>=87 {printf $2 “\n”}’

4、sed命令

​ sed是一种几乎包含在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。

​ sed [选项] ‘[动作]’ 文件名

​ 选项:

​ -n:一般sed命令会把所有数据都输出到屏幕,如果加入次选择,则只会把经过sed命令处理的行输出到屏幕。

​ -e:允许对输入的数据应用多条sed命令编辑

​ -i:用sed的修改结果直接修改数据的文件,而不是由屏幕输出

​ 动作:

​ a : 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结

​ c : 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用""代表数据未完结

​ i : 插入,在当期行前插入一行或多行。插入多行时,除最后一行外,每行末尾需用“\”代表数据未完结

​ d: 删除,删除指定行

​ p: 打印,输出指定行

​ s: 字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换格式类似)

​ vim student.txt

行数据操作

​ sed ‘2p’ student.txt

​ #查看文件第2行

​ sed -n ‘2p’ student.txt

​ sed ‘2,4d’ student.txt

​ #删除第二行到第四行的数据,但不会删除文件本身

​ sed ‘2a hello’ student.txt

​ #在第二行后追加hello

​ sed ‘si hello world’ student.txt

​ #在第二行前插入两行数据

​ sed ‘2c No such person’ student.txt

​ #数据替换

字符串替换

​ sed ‘s/旧字串/新字串/g’ 文件名

​ sed ‘3s/74/99/g’ student.txt

​ #在第三行中,把74换成99

​ sed -i ‘3s/74/99/g’ student.txt

​ #sed操作的数据直接写入文件

​ sed -e ‘s/Liming//g;s/Gao//g’ student.txt

​ #同时把“Liming”和“Gao”替换为空

3、字符处理命令

1、排序命令sort

​ sort [选项] 文件名

​ 选项:

​ -f: 忽略大小写

​ -n: 以数值型进行排序,默认使用字符型排序

​ -r: 反向排序

​ -t: 指定分隔符,默认分隔符是制表符

​ -k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

​ 例子:

​ sort -t “:” -k 3,3 /etc/passwd

​ #指定分隔符是“:”,用第三字段开头,第三字段结尾排序,就是只用第三字段排序

​ sort -n -t “:” -k 3,3 /etc/passwd

2、统计命令wc

​ wc [选项] 文件名

​ 选项:

​ -l: 只统计行数

​ -w: 只统计单词数

​ -m: 只统计字符数

4、条件判断

1、按照文件类型进行判断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4W7kwlhN-1637293206051)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210306173051329.png)]

两种判断格式

​ test -e /root/install.log

​ [ -e /root/install.log ]

​ echo $? 查看上一条命令是否正确

​ [ -d /root ] && echo “yes” || echo “no”

​ #第一个判断命令如果正确执行,则打印“yes”,否则打印“no”

2、按照文件权限进行判断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fN3Dd0La-1637293206051)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210308141434997.png)]

​ [ -w student.txt ] && echo “yes” || echo “no”

​ #判断文件是否拥有写权限

3、两个文件之间经行比较

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ReNYFZYE-1637293206051)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210308141622110.png)]

​ ln /root/student.txt /tmp/stu.txt

​ #创建一个硬链接吧

​ [ /root/student.txt -ef /tmp/stu.txt ] && echo “yes” || echo “no”

​ #yes

​ #用test测试下,果然很有用

4、两个整数之间比较

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pxq0fl02-1637293206052)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210308141836688.png)]

​ [ 23 -ge 22 ] && echo “yes” || echo “no”

​ #yes

​ #判断23是否大于等于22,当然是啦

​ [ 23 -le 22 ] && echo “yes” || echo “no”

​ #no

​ #判断23是否小于等于22,当然不是啦

5、字符串的判断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TwllwYOn-1637293206052)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210308142101969.png)]

​ name=sc

​ #给name变量赋值

​ [ -z “$name” ] && echo “yes” || echo “no”

​ #no

​ #判断name变量是否为空,因为不为空,所以返回no

​ aa=11

​ bb=22

​ #给变量aa和变量bb赋值

​ [ “$aa” == “bb” ] && echo “yes” || echo “no”

​ #no

​ #判断两个变量值是否相等,明显不相等,所以返回no

6、多重条件判断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FPnUAS4S-1637293206053)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210308142605419.png)]

				aa=11

​ [ -n “ a a " − a " aa" -a " aa"a"aa” -gt 23 ] && echo “yes” || echo “no”

​ #no

​ #判断变量aa是否有值,同时判断变量aa的是否大于23

​ #因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也是假

​ aa=24

​ [ -n “ a a " − a " aa" -a " aa"a"aa” -gt 23 ] && echo “yes” || echo “no”

​ #yes

5、流程控制-if语句

1、单分支if条件语句

​ if [ 条件判断式 ];then

​ 程序

​ fi

​ #或者

​ if [ 条件判断式 ]

​ then

​ 程序

​ fi

单分支条件语句需要注意以下几点:

​ if语句使用fi结尾,和一般的语言使用大括号结尾不同

​ [ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格

​ then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分隔。也可以换行写入,就不需要“;”了

​ 例子:判断分区使用率

#!/bin/bash
#统计根分区使用率
rate=$(df -h | grep "/dev/sda3" | awk '{print &5}' | cut -d "%" -f1)
#根分区使用率作为变量值赋予变量rate
if [ $rate -ge 80 ]
	then
		echo "Warning! /dev/sda3 is full!!"
fi
2、双分支if条件语句

​ if [ 条件判断式 ]

​ then

​ 条件成立时,执行的程序

​ else

​ 条件不成立时,执行的程序

​ fi

​ 例子1:备份mysql数据库

#!/bin/bash
#备份mysql数据库

ntpdate asia.pool.ntp.org &>/dev/null
#同步系统时间
date=$(date +%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量date
size=$(du -sh /var/lib/mysql)
#统计mysql数据库大小,并把大小赋予size变量

if [ -d /tmp/dbbak ]
	then
		echo "Date : $date!" > /tmp/dbbak/dbinfo.txt
		echo "Date size : $size" >> /tmp/dbbak/dbinfo.txt
		cd /tmp/dbbak
		tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
		rm -rf /tmp/dbbak/dbinfo.txt
	else
		mkdir /tmp/dbbak
		echo "Date : $date!" > /tmp/dbbak/dbinfo.txt
		echo "Date size : $size" >> /tmp/dbbak/dbinfo.txt
		cd /tmp/dbbak
		tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
		rm -rf /tmp/dbbak/dbinfo.txt

​ 例子2:判断apache是否启动

#!/bin/bash

port=$(nmap -sT 192.168.1.22 | grep tcp | grep http | awk '{print $2}')
#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port
if [ "$port" == "open" ]
	then 
		echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
	else
		/etc/rc.d/init.d/httpd start &>/dev/null
		echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
fi
3、多分支if语句

​ if [ 条件判断式1 ]

​ then

​ 当条件判断式1成立时,执行程序1

​ elif [ 条件判断式2 ]

​ then

​ 当条件判断式2成立时,执行程序2

​ …省略更多条件…

​ else

​ 当所有条件都不成立时,最后执行次程序

​ fi

​ 例子:判断用户输入的是什么文件

#!/bin/bash
#判断用户输入的是什么文件

read -p "Please input a filename: " file
#接受键盘的输入,并赋予变量file

if [ -z "$file" ]
#判断file变量是否为空
	then
		echo "Error,please input a filename"	
		exit 1
elif [ ! -e "$file" ]
#判断file的值是否存在
	then
		echo "Your input is not a file!"
		exit 2
elif [ -f "$file" ]
#判断file的值是否为普通文件
	then
		echo "$file is a regulare file!"
elif [-d "$file"]
#判断file的值是否为目录文件
	then
		echo "$file is a directory!"
else
	echo "$file is an other file!"
fi

6、流程控制-case语句

1、多分支case条件语句

​ case语句和if…elif…else语句一样都是分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。

​ case $变量名 in

​ “值1”)

​ 如果变量的值等于值1,则执行程序1

​ ;;

​ “值2”)

​ 如果变量的值等于值2,则执行程序2

​ ;;

​ …省略其他分支…

​ *)

​ 如果变量的值都不是以上的值,则执行此程序

​ ;;

​ esac

​ 例子:

#!/bin/bash
#判断用户输入

read -p "Please choose yes/no: " -t 30 cho
case $cho in
		"yes")
			echo "Your choose is yes!"
			;;
		"no")
			echo "Your choose is no!"
			;;
		*)
			echo "Your choose is error!"
			;;
esac

7、流程控制-for循环

语法一:

​ for 变量 in 值1 值2 值3…

​ do

​ 程序

​ done

#!/bin/bash
#打印时间

for time in morning noon afternoon evening
	do
		echo "This time is $time!"
	done

语法二:

​ for(( 初始值;循环控制条件;变量变化 ))

​ do

​ 程序

​ done

8、流程控制-while循环与until循环

1、while循环

​ while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了。

​ while [ 条件判断式 ]

​ do

​ 程序

​ done

#!/bin/bash
#从1加到100

i=1
s=0
while [ $i -le 100 ]
#如果变量i的值小于等于100,则执行循环
	do
		s=$(( $s+$i ))
		i=$(( $i+1 ))
	done
echo "The sum is: $s"
2、until循环

​ until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。

#!/bin/bash
#从1加到100

i=1
s=0
until [ $i -gt 100 ]
#循环直到变量i的值大于100,就停止循环
	do
		s=$(( $s+$i ))
		i=$(( $i+1 ))
	done
echo "The sum is: $s"

八、Linux服务管理

1、服务简介和分类

1、服务的分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uzKJwRdO-1637293206053)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210310193631277.png)]

启动与自启动

​ 服务启动:就是当前系统中让服务运行,并提供功能。

​ 服务自启动:自启动是指让服务在系统开机或重启服务之后 ,随着系统的启动而自动启动服务。

查询已安装的服务

​ RPM包安装的服务

​ chkconfig --list

​ #查看服务自启动状态,可以看到所有RPM包安装的服务

​ 源码包的安装位置

​ 查看服务安装的位置,一般是/usr/local/下

RPM安装服务和源码包安装服务的区别

​ RPM包安装服务和源码包安装服务的区别就是安装位置不同

​ 源码包安装在指定位置i,一般是/usr/local/

​ RPM包安装在默认位置

2、RPM服务的管理

1、独立服务的管理
1、RPM包安装服务的位置

​ RPM包安装服务和源码包安装服务的区别就是安装位置不同

​ 源码包安装在指定位置,一般是/usr/local/

​ RPM包安装在默认位置中

​ /etc/init.d/:启动脚本位置

​ /etc/sysconfig/:初始化环境配置文件位置

​ /etc/:配置文件位置

​ /etc/xinetd.conf:xinetd配置文件

​ /etc/xinetd.d/:基于xinetd服务的启动脚本

​ /var/lib/:服务产生的数据放在这里

​ /var/log/:日志

2、独立服务的启动

​ /etc/init.d/独立服务名 start|stop|status|restart

​ service 独立服务名 start|stop|restart||status

​ (红帽专有命令)

3、独立服务自启动

​ chkconfig [–level 运行级别] [独立服务名] [on|off]

​ 修改/etc/ec.d/rc.local文件

​ 使用ntsysv命令管理自启动

​ (红帽专有命令)

2、基于xinetd服务的管理
1、安装xinetd与telnet

​ yum -y install xinetd

​ yum -y install telnet-server

2、xinetd服务的启动
vi /etc/xinetd.d/telnet
service telnet
{
	flags	=REUSE	//标志为REUSE,设定TCP/IP socket可重用
	socket_type	=stream		//使用TCP协议数据包
	wait	=no			//允许多个连接同时连接
	user	=root		//启动服务的用户为root
	server	=/usr/sbin/in.telnetd	//服务的启动程序
	log_on_failure	+=	USERID	//登录失败后激励用户的ID
	disable	=no			//服务不启动
}

​ 重启xinetd服务

​ service xinetd restart

3、xinetd服务的自启动

​ chkconfig telnet on

​ ntsysv(红帽专有)

3、源码包服务的管理

1、源码包安装服务的启动

​ 使用绝对路径,调用启动脚本来启动。不同的源码包启动脚本不同。可以查看源码包的安装说明,查看脚本的启动方法。

​ /usr/local/apache2/bin/apachectl start|stop

2、源码包的自启动方法

​ vi /etc/rc.d/rc.local

​ 加入

​ /usr/lcoal/apache2/bin/apachectl start

3、让源码包服务被服务管理命令识别

​ 让源码包的apache服务能被service命令管理启动

​ ln -s /usr/lcoal/apache2/bin/apachectl /etc/init.d/apache

​ 让源码包的apache服务能够被chkconfig与ntsysv命令管理启动

​ vi /etc/init.d/apache

​ #chkconfig:35 86 76

​ #指定httpd脚本可以被chkconfig命令管理。格式是:chkconfig: 运行级别 启动顺序 关闭顺序

​ #description:source package apache

​ #说明,内容随意

九、Linux系统管理

1、进程管理

1、进程查看

​ 进程是正在执行一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

2、进程管理的作用

​ 判断服务器健康状态

​ 查看系统中所有进程

​ 杀死进程

​ 3、查看系统中所有进程

​ ps aux

​ 查看系统中所有进程,使用BSD操作系统格式

​ ps -le

​ 查看系统中所有进程,使用Linux标准命令格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5HK8Qu5w-1637293206054)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210315194752844.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R16BiZ6W-1637293206057)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210315194849025.png)]

3、查看系统更健康状态

​ top [选项]

​ 选项:
​ -d 秒数:指定top命令每隔几秒更新。默认是3秒

​ 在top命令的交互模式当中可以执行的命令:

​ ?或h: 显示交互模式的帮助

​ P: 以cpu使用率排行,默认就是此选项

​ M: 以内存的使用率排序

​ N: 以PID排序

​ q: 退出top

第一行信息为任务队列信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e7ueHbd6-1637293206058)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210315195433967.png)]

第二行为进程信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJwnKbhx-1637293206058)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210315195742868.png)]

第三行为CPU信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C17WVwhE-1637293206059)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210315195851368.png)]

第四行为物理内存信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UGdU8KKy-1637293206059)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210315200020317.png)]

第五行为交换分区(swap)信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R2yKRRDY-1637293206060)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210315200100247.png)]

4、查看进程树

​ pstree [选项]

​ 选项:

​ -p: 显示进程的PID

​ -u: 显示进程的所属用户


  1. a-z ↩︎

你可能感兴趣的:(学习笔记,keil,mdk,linux,网络)