什么是shell
Shell是一种具备特殊功能的程序, 它是介于使用者和 UNIX/linux 操作系统的核心。
常用指令学习:
1.查看指令的帮忙信息:man
查看ls帮助信息:man ls查看tar的帮助信息:man ls
2.目录层级跳转:cd
下层目录:cd directory_name返回上级:cd ..转到上次工作目录:cd -更改目录:cd /one/two 可以是相对路径也可是绝对路径。
显示文件名:ls显示文件详情:ll
4.查看文件,每次一屏:more
打开文件:more file.txt目录分屏查看:ls -l |more文本中搜索某字符:打开文件more myfile.txt -> 输入:/string 【回车】 -> 输如n查看下一个
5.连接或者显示文件:cat
显示文件(文件行数大于屏幕行数,部分行内容滚出屏幕,无法查看):cat file.txt合并文件:cat file1 file2 > fileAll将一个文件内容追加到另一个文件:cat file1 >> file2
6.更新文件的访问时间,如果没有则创建新的文件:touch
touch files.txt
mkdir directory_filesmkdir -p /fodler1/fodler2
8.复制文件:cp
当前目录创建file1的副本:cp file1.txt file2.txt将当前目录下的文件拷贝到其他目录:cp file1.txt /one/tow说明:如果副本已存在会被新的覆盖掉,如果是文件夹加-r
9.服务器之间传输文件:scp
从目标服务器取文件:scp -r root@10.56.189.55:/root/test1 /root/test2/
10.移动文件、重命名:mv
重命名:mv file.txt file2.txt移动:mv file.txt /tow/one
11.删除文件或目录:rm
确认是否删除文件:rm file1.txt确认是否删除文件夹:rm -r fodlers强制删除:rm -rf file.txt
12.在文件中搜索:grep
显示文本中第一个字符为字母的所有行:grep "^[a-zA-Z]" files.txt | more显示文本中与 “tom” “jerry”匹配的所有行:grep -E "tom|jerry" files.txt |more显示所有与模式不匹配的行:grep -v "^#" files.txt
13.显示进程的当前状态:ps
ps -ef | grep tomcatps -aux | grep tomcat
14.显示文件的最后几行:tail
tail files.txttail -20 files.txttail -n 20 files.txttail -fn 200 files.txt
15.显示文本的前n行:head
head -10 file.txthead -n 10 file.txt
16.用匹配表达式查找文件:find
查询以.profile命名的所有文件的完整路径find / -name .profile -print查询目录中包含某一字段的所有文件,并打印:find -name '*select*' -print找到后缀为.txt的文件并删除:find /one/two -name '*.txt' -exec rm {} \;
17.显示工作目录的路径:pwd
输入:pwd结果:/user/profile/tom
18.文件压缩归档:tar gzip compress
tar:归档:tar -cvf aa.tar aadir释放:tar -xvf aa.tar压缩:tar-zcvf test.tar.gz test解压:tar -zxvf test.tar.gzgzip:gzip files.txt结果:files.txt.gz解压文件:gunzip files.txtcompress:压缩:compress files.txt结果:files.txt.z解压缩:uncompress files.txt
19.杀死进程:kill
kill -9 382382kill -9 382382 382383
20.比较文本的不同:diff
diff file1.txt file2.txt比较文本不同,忽略空格:diff -w file1.txt file2.txt
21.更改文件模式:chmod
文件改为可写:chmod +w file.xt文件改为制度:chmod +o file.txt将所有权限赋予该文件夹:chmod -R 777 /update/
22.查看用户组和用户
cat etc/passwdcat etc/group创建用户组:groupadd -g 550 groupName创建用户:useradd -m -g groupName userName
改变文件file.txt 的所有者:chown dug file.txt将目录/one/tow 下的所有用户的所有者改为tom 组改为jerry:chown -R tom:jerry /one/two
24.流编辑器:sed
显示包含tom的行:sed "/tom/p" files.txt对file1.txt中的good全部替换成$bad后复制到file2.txt:cat file1.txt | sed -e "s/good/$bad/g" > file2.txt
当前目录文件大小排序: du -sh *|sort -h
注意:不要执行不带任何参数的crontab命令,这会清空已经配置好的所有定时执行的任务。通过编辑/etc/crontab文件来添加定时任务。
定义变量:i=100echo ${i} # 输出:100echo "开始执行脚本\c" ## 输出不换行
截取第3位和第5位:echo "abcdefg" |cut -c 3,5结果:ce截取3-5位的字符:echo "abcdefg" | cut -c 3-5结果:cde
28.求表达式变量的值:expr
修改shell变量:count ='expr $count+1'查看shell变量的长度:expr length $shell输入:count=100输入:count=`expr $count + 1`输入:echo ${count} # 输出为:101输入:expr length $count # 输出为:3
29.查找匹配行并对其进行操作:awk
显示长度大于10个字符的行:awk 'length>10' files.txt
alias show='ls -l'输入:show # 展示文件列表详
31.更改文件或目录的所有权:chgrp
将文件所有组改为root:chgrp root file.txt将目录下所有文件所有组改为root:chgrp root file.txt
a=2eval echo $a # 输出:2test.txt 文档中输入:hello world!x="cat test.txt"eval $x # 输出结果为:hello world!
33.其他常见命令
date # 2023年 04月 22日 星期六 21:55:31 CSTwho # 名称 线路 时间 空闲 进程号 备注basename # basename -s .txt test.txt 输出为:test。用于打印目录或者文件的基本名称dirname # 输入:dirname root/update/test/ 输出:/root/updateuname # 输入:uname。输出:Linuxuptime # 用于显示系统总共运行了多长时间和系统的平均负载。输出:22:23:43 up 715 days, 51 min, 3 users, load average: 0.03, 0.02, 0.05
34.重定向:> >> < <<
> ls > test.txt # 将ls的插叙询结果写入test.txt文件>> echo "end" > test.txt # 追加到文件末尾cat /dev/null > a. txt # 清空一个文件,/dev/null是linux的黑洞
35.管道符:|
cat test.txt | sort # 排序cat test.txt | sort | uniq # 排序去重cat test.txt | grep 'good' # 过滤筛选
36.命令组合工具:xargs
cat test.txt | xargs # 一行显示cat test.txt | xargs -n3 # 每行显示3个字符,不包括空格echo nameXnameXnameXname | xargs -dX # 输出:name name name namecat arg.txt | xargs -I {} echo {} # 文本内容按行打印find . -type f -name "*.txt" -print | xargs tar -zcvf test1.tar.gz # 将当前文件下的所有.txt文件归档
1.文件状态
-d 目录-s 文件长度大于0-f 正规文件-w 可写-L 符号链接-u 文件有suid的设置-r 可读-x 可执行
-a 逻辑与-o 逻辑或!逻辑非
= 相等!= 不等-z 空串-n 非空串
4.数值比较
-eq 相等-ne 不等-gt 第一个数大于第二个-lt 第一个书小于第二个-le 第一个小于等于第二个-ge 第一个数大于等于第二个
shell的函数
1.判断返回值的真假:if
if 条件1then 命令1elif 条件2then 命令2else 命令3fi
举例:输入一个数判断其是偶数还是奇数
#!/bin/shecho "please input a number:\C"read numif (($num%2==0))thenecho $num "是偶数"elseecho $num "是奇数"fi
case $num in内容1)命令1;;内容2)命令2;;esac
举例:判断输入的值属于那个集合
#!/bin/shecho "please input like a b c d e f g:\C"read mscase $msin a|b|c|d)echo $ms "属于abcd";;e|f|g)echo $ms "属于dfg";;*) echo "不在集合之内"exit 1;;esac
3.循环:for
# 输出1-10数字for((i=1;i<=10;i++));doecho $(expr $i);done# 循环中嵌套if判断for((i=1;i<=10;i++));doecho $(expr $i);if(($i%2==0))thenecho $i "是偶数"elseecho $i "是奇数"fidone
4.循环:until
# num 大于10时停止循环num=0;until ((num>10))do((num++))echo $numdoneecho $num
5.循环:while
# /bin/shnum=0;while ((num<10))do((num++))echo $numdoneecho $num
6.结束本次循环:continue,跳出整个循环:break
# 跳出整个循环# /bin/shnum=0for ((i=0;i<100;i++))do((num += i))if(($num>100))thenecho "$num 大于100,跳出整个循环"breakelseecho "$num 小于100"fidone
文章转载自数据与共享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




