服务端测试,经常要用到linux命令查看日志,查看文件,故写此博客记录一下。linux还是应该多练习,在牛客网上有SHELL编程题,可以去练一练。
牛客网在线编程_SHELL篇_SHELL篇牛客网在线编程SHELL篇-SHELL篇提供超多数据结构,系统设计,编程学习,练习题等,为技术求职者提供能力提升解决方案,同时为企业级用户提供更高效的招聘解决方案,帮助求职者与企业搭建人才招募和人才培养渠道https://www.nowcoder.com/exam/oj?page=1&pageSize=50&search=&tab=SHELL%E7%AF%87&topicId=195
目录
一、三剑客
1、grep
2、awk
3、sed
二、操作文件命令
1、目录操作命令
1.1cd命令
1.2ls命令
2、创建、移动文件命令
3、查看创建文件命令
3.1、cat命令
3.2、head命令
3.3、tail命令
3.4、more命令\less命令
3.5、sed命令
3.6、vim/vi命令
3.7、sort命令
3.8、uniq命令
三、变量表达式和函数
1、变量
2、表达式函数
四、其他常用命令
1、top命令
2、系统硬件配置查询命令
3、网络相关命令
4、查看端口号占用 杀死进程释放端口
一、三剑客
1、grep
grep "str" file
两个参数:-i和-o的用法
-i (不区分大小写)
grep -i "str" file
搜索出file这个文件里包含“str”的数据,不区分大小写
例:file文件里数据为:
hello world1
Hello shell
Or yes
搜索条件:grep -i "or" file
搜索结果为:(“or”不区分大小写,都标记红色)
hello world1
Or yes
-o (只展示搜索条件的字符)
grep -o "str" file
只能搜索出file这个文件里包含的“str“
例:file文件里数据为:
hello world1
Hello shell
Or yes
搜索条件:grep -o "Or" file
搜索结果为:(结果都标记红色)
Or
也可以先用cat命令获取文件全部内容,再用竖线+grep+条件(需要查询的字符)
cat file | grep "str"
应用正则进行匹配
cat file | grep -i "s.*"
表示将带有“s”或“S”以及后面的字符都查询出来
具体正则语法请移步:
例:file文件里数据为:
hello world1
Hello shell
Or yes
查询条件为:cat file | grep -i "o.*"
查询结果为:
hello world1(第一个o后面的字符都标记红色)
Hello shell(o后面的都标记红色)
Or yes (o后面的都标记红色)
如果要同时查询多个字符,用到参数-E,每个字符用|隔开
grep -E "a|b|c|d|e"
在多个文件中查找
grep "math_pattern" file1 file2 file3……
输出包含匹配字符串的行数:
grep -n
统计文件中包含匹配字符串的行数:
grep -c
文件打包命令:
tar -cvf 打包文件名.tar 被打包的文件/路径
c 创建新的归档
v 详细列出处理的文件
f 使用归档文件
文件解包命令:
tar -xvf 打过包的文件.tar
压缩解压命令
压缩:tar -zcvf py.tar.gz a.txt b.txt c.txt
解压:tar -zxvf py.tar.gz -C 解压到目标路径(必须已经存在)
还可以用bzip2
tar -jcvf py.tar.bz2 a.txt b.txt c.txt
2、awk
awk命令
echo "123 456 789" | awk '{print $1,$2,$3}'
默认以空格作为切分
结果为:
123 456 789
如果打印全部,则$1,$2,$3改成$0
如果以其他字符作为切分,则用-F命令
echo "123|456|789"|awk -F '|' '{print $1}'
结果为:
123
改成以"|"作为切割符
如果需要在分开的部分添加其他字符,则写成$1"str"$2
注意,这里字符串里要用双引号,不能用单引号,避免与外面的单引号混淆
举例 echo "123|345|789"|awk -F '|' '{print $1":"$2":"$3}'
结果为:
123:456:789
限定输出条件,在print后加(),里面添加条件
例如:echo "2 345 789"|awk '{print ($1>1)$1":"$2":"$3}'
限定打印结果第一列必须大于1
每一列的数相加
awk '{A = A+$1;B=B+$2}'
表示第一列的值相加,第2列的值相加
注意这里是用分号隔开的,不是逗号
加完得到的值,可以利用占位符操作进行传递
牛客SHELL30 的题解
awk '{W=W+$5;Q=Q+$6}END{printf ("MEM TOTAL\nVSZ_SUM:%sM,RSS_SUM:%sM",W/1024,Q/1024)}'
扩展:每一行的数值相加awk命令:将某一列、行的数值相加。去除列中重复值,重复行_awk 加法_小朩的博客-CSDN博客利用awk命令awk '{print $n}' | awk '{sum+=$1}END{print sum}'例:_awk 加法https://blog.csdn.net/qq_55723966/article/details/119609980
3、sed
修改文件内容
sed -i '/s/str1/str2/g' file
将file文件中str1改成str2
sed -i -e 's/str1/str2/g' file -e 's/str3/str4/g'
同时修改file文件中的str1和str3
二、操作文件命令
1、目录操作命令
1.1cd命令
cd ..返回上一层目录
cd - 返回上一次所在的目录,可用于目录的切换
cd / 返回根目录
cd ~ 回到家目录
如果是root用户登录
cd home ---回到/root
如果是普通用户登录
cd home ---回到/home/用户名
root用户和普通用户登录切换
普通用户切换到root用户:sudo su
root用户切换回普通用户:exit
多个普通用户切换: su 用户名
此外,pwd 显示当前所处的目录
1.2ls命令
ls 查看文件和目录
ls -a 查看当前目录下的所有文件(包含隐藏文件--文件名前含.)
ls -l 当前目录下文件的详细信息(包括文件读写权限、最后修改时间)
ls -t 按文件修改时间排序
ls -lt 当前目录下文件的详细信息+按最后修改时间拍序
ls -R 当前目录下所有子目录的内容,包括文件和文件夹
ll 查看当前目录下所有文件的详细信息
2、创建、移动文件命令
创建文件夹 mkdir
mkdir dir1 dir2
以空格隔开,创建多个文件夹
创建文件 touch
touch file1
文件的重定向
echo "hello shell" >file
将hello shell输入到文件file中
文件的追加写入
echo "hello wy" >>file
在hello shell的基础上,继续追加写入"hello wy"
按行作为分隔符查看文件(查看文件for 和 while的区别)
while read x;do echo $x;done<file
while循环:会将每行的内容读入到x变量,当while出现空行,用if判断字符=0, contiune
for line in $(cat file);do echo $line;done (这种方式查看文件,每次读取由空格分开的一部分)
for循环: 将读入的内容以IFS(shell中的环境变量,Internal Field Seperator,字段分隔符)为界分隔, 然后将各个分隔开的内容,逐一读入变量line。本质上说,for循环读取的是字段,只不过可以设置IFS为\n这样能够逐行读取。
例如:文件里:hello world
用while语句查看的结果为:hello world
用for语句查看的结果为:
hello
world
移动\更名文件命令 mv
mv dir1 dir2
将dir1文件 移动到dir2中
如果dir2不存在,则dir1改名为dir2
复制文件命令 cp
cp 源文件 目标文件
注意两个参数
cp -r 若源文件是一个目录,则将这个目录下的所有文件拷贝到目标文件中
cp -f 强制覆盖 重名时不会提示用户,直接copy
3、查看创建文件命令
3.1、cat命令
cat file
file具体文件的路径,不能是文件夹和目录
3.2、head命令
head -n -5 file
查看file这个文件前五行的内容,其中-n可写可不写
3.3、tail命令
tail -n -10 file
查看file这个文件后10行的内容,其中-n可写可不写
head和tail一起使用查询中间行的命令
文档共有100行,需要查询出第30-40行的数据
head -40 file | tail -11
先查询出前40行的数据,再从查处的数据中查处最后11行的数据,就是30-40行的数据
3.4、more命令\less命令
more file
只能用回车,一直往下翻,不能用上下键进行翻页,按q退出
less file
能用上下键进行翻页,按q退出
3.5、sed命令
查询某一行的命令
sed -n '5p' file
注意 -n不能省略
查询第5行的数据
与sed很像的seq命令:
sequence是序列的意思,取前面的seq,与sed命令区分开
seq 1 100
输出1-100的正整数
seq 0 7 100
输出0-100以内可以被7整除的正整数
3.6、vim/vi命令
编辑文件命令
按i光标停在当前的字符上
按a光标停在当前字符后面
按esc键退出编辑,按:wq! 表示保存并强制退出
按:q! 表示不保存并强制退出
当前编辑的内容标记上行号,按esc键,按:set nu再回车
3.7、sort命令
排序命令,默认按升序
-r 按降序
-n 按数字排序
3.8、uniq命令
uniq命令作用是去除重复行,但重复行不相邻时,uniq命令不起作用,故经常和sort命令一起使用
uniq -c 显示重复行出现的次数
查找文件命令:
which pwd
whereis
locate
find
文件权限相关:
用户管理
创建用户
useradd 用户名
删除用户
userdel 用户名
用户组管理
创建用户组
删除用户组
文件权限:拥有者的权限/当前用户组的权限/其他用户的权限
r - 4读
w- 2写
x - 1执行
chmod 777 赋予拥有者、用户组、其他用户,可读可写可执行的权限
三、变量表达式和函数
1、变量
变量的赋值:
a=1
将1赋给a
变量的引用:
echo ${a} (严谨的写法)
单引号双引号的使用:
引号里有变量时,需使用双引号
echo "abc $a" --->输出 abc 变量a的值
echo 'abc $a' --->输出abc $a
预定义变量:
PWD USER HOME PATH
可以输入来查看预定义变量
echo $PWD ---当前路径
echo $USER ---当前用户
echo $HOME ---当前家目录
echo $PATH ---环境变量
which语句 用于查找所在的路径
比如 which python
可展示python的路径
a=`ls` --将命令ls赋值给变量a
数组相关
({1..100})---表示从1到100的整数
a=(1 2 3 4 5 6) ---表示变量a是一个数组
屏幕上输出数组,用*和@都可以
echo ${a[*]} echo ${a[@]}
输出数组的长度,用#
echo ${#a[@]}
输入数组的第一个元素
echo ${a[0]}
数组的遍历
for x in ${a[@]};do echo $x;done
(())表示对整数的扩展,将里面的变量当作整数去处理
a=2;b=3;echo $((a+b))
表示echo $((2+3))
参数 -e的使用
echo -e 'a\nb'
输出:
a
b
可实现换行操作,如果不加-e参数,输出a\nb,将\n当成普通字符,没有进行转义
a++ /a--
与编程语言中类似,表示a=a+1/a=a-1
字符串的切片与python中使用方法一样,同样也支持正则提取
2、表达式函数
echo $? 上一个语句执行成功则返回0,执行失败则为非0
算术判断
-eq 相等
-nq 不相等
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
举例:
[ 3 -le 8 ];echo $?
输出0,执行结果是true
3小于等于8,成立,这里的数字可以换成表达式
简单运用:
i=0;while [ $i -lt 10 ];do echo $i;((i++));done
输出:1-9的整数
当i的值加到9时,输出9,i+1等于10,10不小于10,不会输出i的值
(())也可以进行算术运算 ((10>9)) 结果为true
逻辑运算符&&、||
看一个例子:
echo "1" && echo "2" || echo "3" && echo "4" || echo "5" || echo "6" && echo "7" && echo "8" || echo "9"
先猜想一下输出结果会是什么?
答案:1 2 4 7 8
&&的意思是前面执行了,就会去执行
||的意思是前面执行了,就不存在,不去执行
与和或的使用
系统判断符号的使用
-d file 文件是一个目录
-e file 文件存在
-f file 文件是一个普通文件
-r file 文件可读
-w file 文件可写
-x file 文件可执行
-g file 文件的set-group-id被设定
-s file 文件的长度不为0
-u file 文件的set-user-id被设定
四、其他常用命令
1、top命令
top 然后按下键盘1 可显示每个CPU核心的使用情况
具体怎么看top命令可参考以下三篇文章,介绍的非常详细。
Linux性能分析工具top命令详解_top命令内容详解_OceanSky6的博客-CSDN博客top命令是linux下常用的性能分析工具,能够实时的显示系统中各个进程的资源占用情况,常用于服务端性能分析。top命令说明:top命令的结果分为两部分: 统计信息:前五行是系统的整体统计信息。进程信息:统计信息下方类似表格的区域显示的是进程的详细信息,默认5秒刷新一次。 统计信息说明:第1行:top任务队列信息(系统运行状态及平均负载),与uptime命令结..._top命令内容详解https://blog.csdn.net/yaomingyang/article/details/78968573百度安全验证https://baijiahao.baidu.com/s?id=1745901459006156810&wfr=spider&for=pcLInux知识点(三)--- 动态监控系统_linux kib mem_EOPG的博客-CSDN博客top:top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。2. 基本语法:top [选项]3. 选项说明:-d:秒数 指定top命令每隔几秒更新。默认是3秒 -i:使top不显示任何闲置或者僵死进程。-p:通过指定监控进程ID来仅仅监控某个进程的状态。[root@localhost100 /]# toptop显示说明:(1)整体信息:第一行:top - 15:55:54 :当前系统时间_linux kib memhttps://blog.csdn.net/qq_40247570/article/details/124432802
2、系统硬件配置查询命令
lscpu可以查看到CPU有几个
也可以用nproc查看CPU有几个
cpu的具体信息在/proc/cpuinfo这个文件里
3、网络相关命令
ping
检测主机是否联网
ifconfig
查看本机地址
4、查看端口号占用 杀死进程释放端口
查看端口占用:netstat -apn
可以使用top命令,输入k后,输入PID,输入9
可将进程杀死
查看所有进程详写信息:ps -ef
进程查找命令,查找出火狐的进程号
ps -ef | gerp "firefox" | awk '{print $2}'
杀死进程:kill -9 pid
杀死查找出来的所有火狐的进程
可以先将查找的命令重定向到一个文件中,然后读取文件逐个删除
while read pid;do kill -9 $pid;done>firfox_pid
这样显然有点麻烦,看能不能直接删除,可以用到xargs命令
ps -ef | gerp "firefox" | awk '{print $2}'|xargs kill -9
xargs命令的详解可以参考这篇博客,xargs可以直接管道符的输出当作输入
【Linux 进阶】命令 xargs 详解_linux xargs命令详解_TakingCoding4Granted的博客-CSDN博客【Linux 进阶】命令 xargs 详解_linux xargs命令详解https://blog.csdn.net/weixin_37780776/article/details/118947353?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168862066516800186531323%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168862066516800186531323&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-118947353-null-null.142%5Ev88%5Econtrol_2,239%5Ev2%5Einsert_chatgpt&utm_term=xargs&spm=1018.2226.3001.4187
软件安装命令
sudo apt install 软件包
软件更新
sudo apt upgrade 软件包
软件卸载
sudo apt remove 软件包
远程管理
linux开启远程连接
Linux如何开启远程连接_linux开启远程连接服务_殊荣重黎的博客-CSDN博客Linux如何远程连接_linux开启远程连接服务https://blog.csdn.net/qq_63041460/article/details/129014997用一台mac远程登录linux,确保登录成功
ssh ip地址(linux的地址)-p 22
需要新开启一个窗口,因为这个终端窗口登录的是linux,不能访问mac,找不到mac的文件位置
从linux上拷贝文件到mac上
scp 用户名@linux所在的ip:文件路径 mac本地的路径
从mac上拷贝文件到linux上
scp mac本地的路径 用户名@linux所在的ip:文件路径
如果复制目录下的所有文件,scp后面加上-r参数