mkdir : 创建目录 mkdir d d/e d/e/f :套娃创建文件夹 mkdir -p d/e/f :快捷创建 rmdir 目录: 删除目录
touch 文件名 : 可以创建一个空文件 vim 如果文件内容为空,直接q退出不创建,wq可以保存创建退出
rm : 删除文件或者目录 rm -r a :能删除不是空的a文件 rm -rf a/:能没有提示删除不是空的a文件
mv 文件名 要移动到的文件a/b/ :移动文件 mv 文件名 要修改的文件名 :可以修改文件名
ln -s 文件名或者目录名 链接的名字 : 创建一个软链接 ln 文件名或者目录名 链接的名字 : 创建一个硬链接
echo 要添加的内容 >> 到文件 :添加内容到文件 echo 要覆盖的内容 > 到文件 :覆盖内容到文件
useradd 用户名 : 添加用户 passwd 用户名:修改用户密码 su 用户名 :跳到其他用户
ll后第一个字母对应内容
- :文本 d :目录文件 l : 链接
组、改变文件权限
usermod -g 组名 用户名 :把用户改变组 chmod 777 文件名或者目录名 :修改权限 groupadd 组名:添加组 useradd -g 组名 用户名:把用户加进组里
查找
find /要找到路径(比如root) -name(user用户名、size文件大小) 要找的名字(也可以"*.cfg"后缀名)
定位 locate
locate 文件名
grep -n 要查询的内容 在哪个文件查:查找这个文件里面的这个内容,-n可以匹配行号显示
wc 文件名 :统计行数,字节大小,等等
| :管道,可以跟命令查要查询的东西,比如ls | grep .cfg 就是列出带cfg后缀的文件 可以混合使用; grep -n boot initial-setup-ks.cfg | wc :查询统计的boot的行号,出现的次数,字节大小
压缩、解压
gzip 文件名:压缩成.gz文件 gunzip 文件名称.gz :解压文件
zip -r 压缩成的文件名 文件 :能打包压缩文件,可以修改压缩的名字 unzip -d 要解压到的目录 文件 :能解压文件到自己指定的目录下
tar打包工具
tar [选项] xxx.tar.gz 要打包的内容 :打包目录,压缩后的文件格式tar.gz 选项说明:-c产生.tar打包文件 -v显示详细信息 -f指定压缩的文件名 -z打包同时压缩 -x解压包 -C解压到指定目录 打包:tar -zvcf temp.tar.gz initial-setup-ks.cfg info 公共/ 解包:tar -zxvf temp.tar.gz -C /tmp
tree 目录 : 树形显示目录结构 du [选项] : 列出目录结构(选项 -h 以容易阅读的方式显示 -a 不仅查看子目录大小,还包括文件 -c显示所有目录和子目录文件后,显示大小总和 -s只显示总和大小 ) du --max-depth=n [选项] : 列出多少层的目录结构
df -h : 查看磁盘使用情况
挂载
mount 光盘或硬盘位置,文件(/etc/cdrom) 要挂载的位置(/mnt/cdrom/) : 挂载光盘或硬盘 umount 挂载的位置或者是光盘的位置 : 取消挂载
lsblk:查看磁盘情况 lsblk -f :查看详情情况
root用户查看详情磁盘情况
fdisk -l : 查看磁盘详情 mkfs -t 磁盘的存储类型(xfs) 位置(/dev/sdb) :修改磁盘的类型
查看进程
ps [选项] : 查看进程,可以接管道搜索| ,选项有(a、u、x、-e、-u、-f)
基本语法:ps aux | grep xxx
ps -ef ! grep xxx
杀死进程
kill 进程号(pid) :杀死对应的进程(加个-9选项则是强行杀掉) killall 进程名 : 把所有该进程都杀死
开启进程
systemctl start 进程名(比如sshd):开启进程 systemctl status 进程名 :查看这个进程状态
树状进程
pstree (可以加选项也可以不加-p 、-u)
实时查看进程
top[选项] (选项有-d 秒数指定top多少秒刷新一次,-i 不显示任何闲置或者是僵尸状态,-p仅仅监控某个进程的状态)
进程管理
netstat [选项] 也可以加管道|筛选 一般就是netstat -anp | grep进程号 netstat -nlp | grep 进程号
系统定时任务
crontab[选项] :可以定时执行自己想要的操作(-e写入定时操作,-r取消定时操作) 在文件里面写入 比如 */1 * * * * echo hello,word >> /root/info 每隔一分钟在info文件写入helloword
RPM软件包管理
查看信息
rpm -qa | grep firefox :查询火狐的安装包 rpm -qi | grep firefox :查询火狐的安装信息
卸载
rpm -e firefox :卸载火狐
安装
rpm -ivh firefox全称 :安装火狐(i安装v显示详细信息h进度条)
YUM仓库配置,一键安装软件
yum 【选项】【参数】 软件名: 安装、查看、卸载软件(选项:-y 一直yes安装或者卸载) 参数:list查看这个软件是否存在 install安装软件 remove卸载软件
重启:reboot
shell
shell脚本编写,创建文件后面加上.sh,文件第一行写#!bin/bash 创建文件:touch hello.sh 打开文件:vim hello.sh 编写
第一种:少众执行代码:bash或sh 文件的路径 比如:bash(sh) root/script/hello.sh 第二种:直接相对或者是绝对路径,但是要先赋予可以执行文件的这个权限 chomd +x hello.sh :添加执行权限 第三种:.或者source 文件的相对路径或者绝对路径(当前路径执行) source /root/script/hello.sh
查看系统变量
echo $HOME env 是看系统的全局变量 set 是看系统和用户的变量
自定义变量
直接a=2,不能用空格 如果里面有空格,就用引号 may_var="hello, word" : 定义的是一个局部变量 export :升级为全局变量 -- export may_var
父类shell中的全局变量子类shell可以看到,但是子类shell改了这个变量的话,父类shell中不受影响
运算
的话要a=[1+10] 可以设置只读变量:readonly a=5;那他就不能修改了
或者是 expr 1 + 2 :要有空格,乘以*要加转义变成*
赋值:
a=[52] a=$((52))
撤销变量
unset 变量名
传入参数
hello.sh文件里面$[参数] 表示一个参数,在调用source hello.sh 参数:
其他参数
$? :返回0表示上次语句执行正确,其他数字表示相应的错误
判断是否相等
a=hello test a=hello ]一个中括号,中间要空格 echo ? 输出看看上一条语句对不对 也可以判断文件能不能读写执行  多条件判断,可以加一个&&与或者是||或符合判断 a=15 [ a -lt 20 ] && echo "a > 20"
if分支
可以进行条件判断或者多条件 a=18 if [ a -lt 20 ] && [ a -gt 15 ]; then echo OK; fi :如果a小于20并且大于15,就输出ok,||就是或 也可以if[ $a -lt 20 -a -gt 15];then echo OK;fi :-a相当于and ;-o相当于or
多分支
if [ 2 -lt 30 ] then echo "青年人" elif [ $2 -lt 60 ] then echo "中年人" else echo "老年人" fi
case判断
case $1 in 1) echo "this one" ;; 2) echo "this two" ;; *) echo "number else" ;; esac
for循环语句
for (( i=1; i <= [ i ] done echo $sum
增强for循环
for i in {1..100};do sum=sum + sum for os in linux windows macos;do echo $os;done
*是输出一行,把他当做一个整体;$@是一行一行输出,当成个体
可以输入let脚本,直接就能输入+=或者是++
while循环
#while循环 a=1 while [ 1 ] do
sum2=sum2 + $a ]
a=a + 1 ]
let sum2+=a
let a++
done
echo $sum2
read读取控制台
read -t 5 -p "请输入你的名字" name
echo "welcome,$name"
basename提取文件名
basename 文件名 后缀 :能提取文件名 比如:absename /root/script/hello.txt .txt :可以提取到hello
dirname提取文件路径
dirname ../script/hello.txt :不管文件存不存在,提取最后一个斜杠前面的路径名(输出../script)
function自定义函数
function add(){ s=1 + s }
read -p "请输入第一个数:" a read -p "请输入第二个数: " b
summ=a summ
echo "和的平方:"summ *$summ]
实操题运用:归档文件
正则表达式
可以匹配比如 以a开头,中间包含任意字符,以in结尾:
cat /etc/passwd | grep ^a.*in$
匹配字符区间
比如可以 cat /root/atguigu | grep r[ab]*t :看这个目录下rt中间有ab字符串的文件
转义字符
比如像一些特殊符号,需要加上转义用单引号才能使用,'\'
题目:匹配手机号
第一种:echo "15678932777" | grep ^1[345789][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
cut截取字段
比如在cut.txt文件以空格为分割,截取第一第二列的内容:cut -d " " -f 1,2 cut.txt
截取ip地址:ifconfig ens33 | grep netmask | cut -d " " -f 10 :ifconfig ens33里面,查找netmask那一行,截取以空格为分割第十列
awk文本分析
awk内置变量
在passwd目录下显示文件名行号列数: awk -F ":" '{print "文件名:"FILENAME "行号:" NR "列数:"NF}' /etc/passwd
输出ifconfig下的空行:ifconfig | awk '/^$/ {print "空行:"NR}'
截取ip地址: ifconfig | awk '/netmask/ {print 2}' **比如截取以passwd下以root开通头的第七列**:cat /etc/passwd | awk -F ":" '/^root/ {print 7} ' 用cut操作是:cat /etc/passwd | grep ^root | cut -d ":" -f 7
比如截取以passwd下以root开通头的第一列和第七列,中间逗号分开:cat /etc/passwd | awk -F ":" '/^root/ {print 7} '
比如截取以passwd下的第一列和第七列,中间逗号分开,前面加上”user,shell“,后面加上”end,shell“:cat /etc/passwd | awk -F ":" 'BEGIN{print "user,shell"}{print 7} END{print "end,shell"}'
综合案例二:
给其他用户发信息:write tony pts/1(然后输入内容)先判断消息有没有开:masg y
#!/bin/bash #查看用户是否登录 #-i忽略大小写 -m提取第一行 拿到第一列用户名 login_user=1 | awk '{print 1}') #-z判断是不是为空 if [ -z login_user ] then echo "1 不在线" echo "退出脚本" exit fi #看看消息功能有没有打开 is_allowed=(who -T | grep -i -m 1 1 | awk '{print 2}') #-z判断是不是为空 if [ 1 没有打开消息队列" echo "退出脚本" exit fi #判断有没有消息发送 if [ -z 2 ] then echo "没有消息发送" echo "退出脚本" exit fi #从参数获取要发送的消息 whole_msg=(echo * | cut -d " " -f 2-) #获取用户的终端 user_terminal=(who | grep -i -m 1 1 | awk '{print 2}') #写入要发送的消息 echo login_user ? != 0 ] then echo "发送失败" else echo "发送成功" fi exit