/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)]
ls -a 查看隐藏文件
ls -l 查看文件详细信息
ls -lh 人性化显示
ls -d 查看目录属性
ls -i 查看文件i节点
mkdir -p 递归创建
显示当前目录绝对路径
删除空目录
cp -r 复制目录
cp -p 保留文件属性
剪切或改名
rm -r 删除目录
rm -f 强制执行
rm -rf 删除整个目录
创建文件
cat -n 加行号
tac 倒着显示
分页显示文件内容
(空格)或f 翻页
(Enter) 换行
q或Q 退出
可以向上翻页和搜索的more
/ 搜索 n 向下查找
head -n 指定行数
head -n 7 /filename 只查看前几行(默认前10行)
查看后几行
tail -f 动态查看文件末尾内容(查看日志文件)
生成链接文件
ln 创建硬链接(相当于cp -p 但是可以同步更新)
ln -s [源文件] [目标文件] 创建软链接(类似于windos的快捷方式)
区别:
1、硬链接不能跨分区
2、硬链接不能链接目录文件
3、软链接文件权限rwx rwx rwx,文件很小,箭头指向源文件
4、通过i节点识别
命令所在路径:/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)]
命令所在路径:/bin/chown
chown majiasheng filename 改变文件所有者为majiasheng
改变文件的所属组
chgrp majiasheng filename 改变文件所属组为majiasheng
Shell内置命令
umask -S 查看缺省创建文件的权限
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节点查找
命令所在路径:/usr/bin/locate
locate filename 在文件资料库中查找文件
updatedb 升级文件资料库
locate -i 不区分大小写查找
搜索命令所在目录及别名信息
which ls
搜索命令所在目录及帮助文档路径
在文件中搜索字符串匹配的行并输出
-i 不区分大小写
-v 排除指定字串
grep mysql /root/install.log
man ls /经行检索
例:/-l
man services 查看配置文件service的帮助信息(不需要写配置文件的绝对路径)
man 5 passwd 查看配置文件passwd的帮助手册(root用户下有效)
man passwd 查看命令passwd的帮助手册
1 命令
5 配置文件
--help 列出常见的选项
touch --help
date 查看时间 ,可以通过man date查看时间格式来修改时间
命令所在路径:shell内置命令
umask -S 查看默认创建文件的权限,忘记跟什么时可用help umask查看
所在路径:/usr/sbin/useradd
执行权限:root
useradd majiashesng
所在路径:/usr/bin/passwd
执行权限:所有用户
设置用户密码
passwd majiasheng
所在路径:/usr/bin/who
执行权限:所有用户
查看登录用户信息
所在路径:/usr/bin/w
执行权限:所有用户
查看登录用户详细信息
压缩文件(不能压缩目录)
命令所在路径:/bin/gzip
压缩格式:.gz
解压.gz的压缩文件
命令所在路径:/bin/gunip
打包目录
命令所在路径:/bin/tar
语法:tar 选项[-zcf] 压缩后的文件名 目录
-c 打包
-v 显示详细信息
-f 指定文件名
-z 打包同时压缩
例:tar -zcf Japan.tar.gz Japan
tar目录解压缩语法:
-x 解包
-v 显示详细信息
-f 指定压缩文件
-z 解压缩
例:tar -zxvf Japan.tar.gz
压缩文件或命令
命令所在路径:/usr/bin/zip
语法:zip 选项[-r] 压缩后的文件名
-r 压缩目录
解压.zip的压缩文件
unzip test.zip
压缩文件 .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)]
命令所在文件夹:/usr/bin/write
功能:给用户发送信息,以Ctrl+D保存结束
语法:write <用户名>
发广播信息
命令所在文件夹:/usr/bin/wall
测试网络连通性
命令所在路径:/bin/ping
ping -c 3 192.168.1.156 //ping3次
查看和设置网卡信息
命令所在路径:/sbin/ifconfig
语法:ifconfig 网卡名称 IP地址
设置linux的IP地址
ifconfig eth0 192.168.1.156
查看发送电子邮件
命令所在路径:/bin/mail
列出目前与过去登入系统的用户信息
查看最后一次登录的用户
显示数据包到主机间的路径
命令所在路径:/bin/traceroute
显示网络相关信息
命令所在路径:/bin/netstat
netstat [选项]
选项:
-t : TCP协议
-u : UDP协议
-l : 监听
-r : 路由
-n : 显示IP地址和端口号
范例:
netstat -tlum 查看本机监听的端口
netstat -an 查看本机所有网络连接
netstat -rn 查看本机路由列表
配置网络
命令所在路径:/usr/bin/setup
service network restart //重启网络服务
挂载命令
所在路径:/bin/mount
命令语法:mount [-t 文件系统] 设备文件名 挂载点
范例:mount -t iso9660 /dev/sr0 /mnt/cdrom
取消挂载(卸载)
语法:umount 设备文件名/挂载点
shutdowm -h 3:00 //定时关机
shutdowm -r now //重启
-c //取消前一个关机命令
halt
poweroff
init 0
reboot
init 6
0 关机
1 单用户
2 不完全多用户,不含NFS服务
3 完全多用户
4 未分配
5 图形界面
6 重启
修改系统默认运行级别:
id:3:initdefault:
runlevel //查询当前系统运行级别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F8f4LopF-1637293206022)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210119143659586.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
:r !文件名
map 快捷键 触发命令
范例:
:map ^P I#
:map ^B 0x
:n1,n2s/^/#/g
:n1,n2s/^#//g
:n1,n2s/^g
:ab mymail [email protected]
源码包的优点:
1、开源,如果有足够的能力,可以修改源代码
2、可以自由选择所需的功能
3、软件是编译安装,所以更加适合自己的系统,更加稳定效率也高
4、卸载方便
源码包的缺点:
1、安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
2、编译时间较长,安装比二进制安装时间长
3、因为时编译安装,安装过程中一旦报错新手很难解决
二进制包的优点:
1、包管理系统简单,只通过几个命令就可以安装包的安装、升级、查询和卸载
2、安装速度比源码包安装快的多
二进制包的缺点:
1、经过编译,不再可以看到源代码
2、功能选择不如源码包灵活
3、依赖性
httpd-2.2.15-15.e16.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布次数
e16.centos 适合Linux平台
i686 适合的硬件平台
rpm rpm包的扩展名
树形依赖:a->b->c
环形依赖:a->b->c->a
模块依赖:模块依赖查询网站:
www.rpmfind.net
包全名:操作的包是没有安装的软件包时,使用包全名。而且 要注意路径。
包名:操作已经安装的软件包时,使用包名。是搜 索/var/lib/rpm/中的数据库。
rpm -ivh 包全名
选项:
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
--nodeps 不检测依赖性
rpm -Uvh 包全名
选项:
-U(upgrade) 升级
rpm -e 包名
选项:
-e(erase) 卸载
--nodeps 不检查依赖性
rmp -q 包名
功能:查询包是否安装
选项:
-q(query) 查询
rpm -qa
功能:查询所有已安装的RPM包
选项:
-a(all) 所有
rpm -qi 包名
选项:
-i 查询软件信息(information)
-p 查询未安装的包信息(package)
rpm -ql 包名
选项:
-l 列表(list)
-p 查询未安装包信息(package)
rpm -qf 系统文件名
选项:
-f 查询系统文件属于哪个软件包(file)
rpm -qR 包名
选项:
-R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package)
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)
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/目录,修复文件丢失
setup //使用setup工具
vi /etc/sysconfig/network-scripts/ifcfg-eth0
把ONBOOT=“no”改为ONBOOT=“yes” //启动网卡
service network restart //重启网络服务
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 数字证书的公钥文件保存位置。不用修改
yum list //查询所有可用的软件包列表
yum search 关键字 //搜索服务器上所有和关键字相关的包
yum -y install 包名
选项:
install 安装
-y 自动回答yes
yum -y update 包名
选项:
update 升级
-y 自动回答yes
yum -y remove 包名
选项:
remove 卸载
-y 自动回答yes
4、YUM软件组管理
yum grouplist //列出所有可用的软件组列表
yum groupinstall 软件组名 //安装指定的软件组,组名可以由grouplist查询出来
yum groupremove 软件包名 //卸载指定软件组
安装之前的区别:概念上的区别
安装后的区别:安装位置不同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BdRdiW7I-1637293206027)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210207161111417.png)]
安装在指定位置中,一般是:/usr/local/软件名/
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是:
/etc/rc.d/init.d/httpd start
service httpd start
而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:
/usr/local/apache2/bin/apachectl start
安装c语言编译器(gcc)
下载源码包
http://mirror.bit.edu.cn/apache/httpd/
源代码保存位置:/usr/local/src/
软件安装位置:/usr/lcoal
如何确定安装过程报错
安装过程停止
并出现error、warning或no的提示
定义需要的功能选项
检测系统环境是否和安装要求
把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。
脚本安装包并不是独立的软件包类型,常见安装的是源码包。
是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。
非常类似于Windows下软件的安装方式。
Webmin是一个基于Web的Linux系统管理界面。您就可以通过图形化的方式设置用户账号、Apache、DNS、文件共享等服务。
下载软件
http://sourceforge.net/projects/webadmin/files/webmin/
解压缩,并进入解压缩目录
执行安装脚本
第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)
0: 超级用户
1-499: 系统用户(伪用户)
500-65535: 普通用户
第4字段:GID(用户初始组ID)
第5字段:用户说明
第6字段:家目录
普通用户:/home/用户名/
超级用户:/root/
第7字段:登录之后的Shell
初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
Shell就是就是Linux的命令解释器。
在/etc/passwd当中,除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin。
第1字段:用户名
第2字段:加密密码
加密算法升级为SHA512散列加密算法
如果密码位是"!!“或”*"代表没有密码,不能登录
第3字段:密码最后一次修改日期
使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改间隔时间(和第3字段相比)
第5字段:密码有效期(和第3字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段 :密码过期之后的宽限天数(和第5字段相比)
0:代表密码过期后立即失效
-1:则代表密码永远不会失效
第8字段:账号失效时间
要用时间戳表示
第9字段:保留
把时间戳换算成日期
date -d “1970-01-01 16066 days”
把日期换算为时间戳
echo ( ( (( (((date --date=“2014/01/06”+%s)/86400+1))
第一字段:组名
第二字段:组密码标志
第三字段:GID
第四字段:组中附加用户
第一字段:组名
第二字段:组密码
第三字段:组管理员用户名
第四字段:组中附加用户
普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是550
/ver/spool/mail/用户名/
/etc/skel
useradd [选项] 用户名
选项:
-u UID:手工指定用户的UID号
-d 家目录:手工指定用户的家目录
-c 用户说明:手工指定用户的说明
-g 组名:手工指定用户的初始组
-G 组名:指定用户的附加组
-s shell:手工指定用户的登录shell。默认是/bin/bash
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
useradd -u 500 -G root,bin -d /home/lamp 1\
-c “test user” -s /bin/bash sc
/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 加密模式
passwd [选项] 用户名
选项:
-S 查询用户密码的密码状态。仅root用户可用
-l 暂时锁定用户。仅root用户可用
-u 解锁用户。仅root用户可用
--stdin 可以通过管道符输出的数据作为用户的密码
passwd -S lamp
lamp PS 2013-01-06 0 99999 7 -1
用户密码设定时间(2013-01-06)密码修改间隔时间(0)
密码有效期(99999)警告时间(7)密码不失效(-1)
passwd -l lamp 锁定
passwd -u lamp 解锁
echo “123” | passwd --stdin lamp
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字段)
这样用户一登陆就要修改密码
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
id 用户名
su [选项] 用户名
选项:
-: 选项只使用“-”代表连带用户的环境变量一起切换
-c 命令: 仅执行一次命令,而不切换用户身份
su - root 切换成root
su - root -c “useradd user1”
不切换成root,但执行useradd命令添加user1用户
groupadd [选项] 组名
选项:
-g GID: 指定组ID
groupmod [选项] 组名
选项:
-g GID: 修改组ID
-n 新组名: 修改组名
groupmod -n testgrp group 1
把组名group1修改为testgrp
groupdel 组名
4、把用户添加入组或从组中删除
gpasswd 选项 组名
选项:
-a 用户名: 把用户加入组
-d 用户名: 把用户从组中删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MzsMSx24-1637293206028)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210224192719384.png)]
dumpe2fs -h /dev/sda3
dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项:
-h:仅显示超级块中信息,而不显示磁盘块组的详细信息
mount -o remount,acl/
重新挂载根分区,并挂载加入ACL权限
vi /etc/fstab
加入acl
mount -o remount /
重新挂载文件系统或重启系统,使修改生效
getfacl 文件名
查看acl权限
setfacl 选项 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有ACL权限
-d 设定默认ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jfFcpTVr-1637293206030)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210224195532848.png)]
groupadd tgroup2
setfacl -m g:tgroup2:rwx project/
为tgroup2分配ACL权限。使用"g:组名:权限"格式
mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限"相与"才能得到用户的真正权限
修改最大有效权限
setfacl -m m:rx 文件名
设定mask权限为r-x。使用”m:权限“格式
setfacl -x u:用户名 文件名
删除指定用户的ACL权限
setfacl -x g:组名 文件名
删除指定用户组的ACL权限
setfacl -b 文件名
删除文件下的所有ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
setfacl -m u:用户名:权限 -R 文件名
默认ACl权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限
setfacl -m d:u:用户名:权限 文件名
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对改程序拥有x(执行)权限
命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码
ll /usr/bin/passwd
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
ll /bin/cat
4代表SUID
chmod 4755 文件名
chmod u+s 文件名
chmod 755 文件名
chmod u-s 文件名
关键目录应严格控制写权限。比如”/“、”/usr“等
用户的密码设置要严格遵守密码三原则
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
只有可执行的二进制程序才能设置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组
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
2代表SUID
chmod 2755 文件名
chmod g+s 文件名
例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MnlPQRzl-1637293206031)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210226165500967.png)]
chattr [±=] [选项] 文件或目录名
+:增加权限
-:删除权限
=:等于某权限
选项:
i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除
lsattr 选项 文件名
选项:
-a:显示所有文件和目录
-d:若目标是目录,仅列出目录本身的属性,而不是子文件的
root把本来只能超级用户执行的命令赋予普通用户执行。
sudo的操作对象是系统命令
visudo
实际修改的是/etc/sudoers文件
root ALL=(ALL) ALL
用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
# %wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
visudo
sc ALL=/sbin/shutdown -r now
su - sc
sudo -l
查看可用的sudo命令
sudo /sbin/shutdown -r now
普通用户执行sudo赋予的命令
主分区:总共最多只能分四个
扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。
逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘Linux最多支持11个逻辑分区。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
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)
df [选项] [挂载点]
选项:
-a 显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs
-h 使用习惯单位显示容量,如KB、MB和GB等
-T 显示文件系统类型
-m 以MB为单位显示容量
-k 以KB为单位显示容量。默认就是以KB为单位
du [选项] [目录或文件名]
选项:
-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
-h 使用习惯单位显示磁盘占用量,如KB、MB或GB等
-s 统计总占用量,而不列出子目录和子文件的占用量
df命令是从文件系统考虑的,不光考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)
du命令是面向文件的,只会计算文件或目录占用的空间
fsck [选项] 分区设备文件名
选项:
-a 不用显示用户提示,自动修复文件系统
-y 自动修复。和-a作用一致,不过有些文件系统只支持-y
dumpe2fs 分区设备文件名
mount [-l]
查询系统中已经挂载的设备,-l会显示卷标名称
mount -a
依据配置文件/etc/fstab的内容,自动挂载
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
mkdir /mnt/cdrom/
建立挂载点
mount -t ios9660 /dev/cdrom /mnt/cdrom/
挂载光盘
mount /dev/sr0 /mnt/cdrom/
umount 设备文件名或挂载点
umount /m nt/cdrom
fdisk -l
查看U盘设备文件名
mount -t vfat /dev/sdbl /mnt/usb/
注意:Linux默认是不支持NTFS文件系统的
http://www.tuxera.com/community/ntfs-3g-download
tar -zxvf ntfs-3g_ntfsprogs-2013.1.13.tgz
解压
cd ntfs-3g_ntfsprogs-2013.1.13
进入解压目录
./configure
编译器准备。没有指定安装目录,安装到默认位置中
make
编译
make install
编译安装
mount -t ntfs-3g 分区设备文件名 挂载点
关闭虚拟机添加
fdisk -l
fdisk /dev/sdb
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLFKUMMf-1637293206038)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301115133734.png)]
partprobe
mkfs -t ext4 /dev/sdb1
mkdir /disk1
mount /dev/sdb1 /disk1/
第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份
第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高
vi /etc/fstab
…省略部分输出…
/dev/sdb1 /disk1 ext4 defaults 1 2
mount -a
依据配置文件/etc/fstab的内容,自动挂载
mount -o remount,rw /
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
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。
/etc/shells
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=白色
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”
赋予执行权限,直接运行
chmod 775 hello.sh
./hello.sh
通过Bash调用执行脚本
bash hello.sh
history [选项] [历史命令保存文件]
选项:
-c:清空历史命令
-w:把缓存中的历史命令写入命令保存文件
~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中修改
历史命令的调用
使用上、下箭头调用以前的历史命令
使用“!n”重复执行第n条历史命令
使用“!!”重复执行上一条命令
使用“!字串”重复执行最后一条以该字串开头的命令
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件的时候,按“Tab”键就会自动补全
alias 别名=‘原命令’
设定命令别名
alias
查询命令别名
1、第一顺位执行用绝对路径或相对路径执行的命令
2、第二顺位执行别名
3、第三顺位执行Bash的内部命令
4、第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
让别名永久生效
vi /root/.bashrc
删除别名
unalias 别名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hzOjGP37-1637293206039)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301195830499.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0Acpb7D-1637293206040)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210301200432098.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
命令<文件 把文件作为命令的输入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
命令格式:
命令1 | 命令2
命令1的正确输出作为命令2的操作对象
颜色显示
例子:
ll -a /etc/ | more
netstat -an | grep “ESTABLISHED”
grep [选项] “搜索内容” 文件名
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto 搜索出的关键字颜色显示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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]*
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)”
变量是计算机内存的单元 ,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息 。
变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
变量用等号连接值, 等号左右两侧不能有空格。
变量的值如果有空格,需要使用单引号或双引号包括。
在变量的值中,可以使用“\”转义符。
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“ 变 量 名 ” 或 用 变量名”或用 变量名”或用{变量名}包含。
如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
环境变量名建议大写,便于区分。
用户自定义变量
环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
变量定义
name=“shen chao”
变量叠加
aa=123
aa="$aa"456
aa=${aa}789
变量调用
echo $name
变量查看
set
变量删除
unset name
用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。
export 变量名=变量值
声明变量
env
查询变量
unset 变量名
删除变量
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]\$ '
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 $!"
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"
declare [+/-] [选项] 变量名
选项:
-:给变量设定类型属性
+:取消变量的类型属性
-i:将变量声明为整数型(integer)
-x:将变量声明为环境变量
-p:显示指定变量的被声明类型
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 ]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 ))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
source 配置文件
或
.配置文件
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PSI、HOSTNAME等默认环境变量。
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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文件
~/.bash_logout
~/.bash_history
本地终端欢迎信息:/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
不管是本地登录,还是远程登录,都可以显示此欢迎信息
正则表达式用来在文件中匹配符合条件的字符串,正则时包含匹配。grep、awk、sed等命令可以支持正则表达式
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用Shell自己的通配符来经行匹配了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
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
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是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符
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”}’
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”替换为空
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
wc [选项] 文件名
选项:
-l: 只统计行数
-w: 只统计单词数
-m: 只统计字符数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fN3Dd0La-1637293206051)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210308141434997.png)]
[ -w student.txt ] && echo “yes” || echo “no”
#判断文件是否拥有写权限
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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测试下,果然很有用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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,当然不是啦
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
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
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
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
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
语法一:
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
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"
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"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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包安装在默认位置
RPM包安装服务和源码包安装服务的区别就是安装位置不同
源码包安装在指定位置,一般是/usr/local/
RPM包安装在默认位置中
/etc/init.d/:启动脚本位置
/etc/sysconfig/:初始化环境配置文件位置
/etc/:配置文件位置
/etc/xinetd.conf:xinetd配置文件
/etc/xinetd.d/:基于xinetd服务的启动脚本
/var/lib/:服务产生的数据放在这里
/var/log/:日志
/etc/init.d/独立服务名 start|stop|status|restart
service 独立服务名 start|stop|restart||status
(红帽专有命令)
chkconfig [–level 运行级别] [独立服务名] [on|off]
修改/etc/ec.d/rc.local文件
使用ntsysv命令管理自启动
(红帽专有命令)
yum -y install xinetd
yum -y install telnet-server
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
chkconfig telnet on
ntsysv(红帽专有)
使用绝对路径,调用启动脚本来启动。不同的源码包启动脚本不同。可以查看源码包的安装说明,查看脚本的启动方法。
/usr/local/apache2/bin/apachectl start|stop
vi /etc/rc.d/rc.local
加入
/usr/lcoal/apache2/bin/apachectl start
让源码包的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
#说明,内容随意
进程是正在执行一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
判断服务器健康状态
查看系统中所有进程
杀死进程
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)]
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)]
pstree [选项]
选项:
-p: 显示进程的PID
-u: 显示进程的所属用户
a-z ↩︎