grep
定位到关键字所在的行
- grep -n '关键字' filename
- vim +n filename
查找文件中是否存在关键字
- cat filename | grep ‘关键字'
上传rz和下载sz
sz filename
- sz参数:-a以文本方式传输ascii, -b二进制方式传输binary, -e控制字符转义,保证文件传输正确
- sz -a files:确定为文本文件;sz -be files:确定为二进制文件
rz
- rz参数:-b二进制方式,默认文本方式,-e 对所有控制字符转义
- 注:如果要保证上传的文件内容在服务器端保存之后与原始文件一致,最好同时设置这两个标志
- rz -be
less
内容搜索
- less filename
- 1.1 向前搜索【常用】
- /:使用一个模式进行搜索,并定位到下一个匹配的文本
- n:向前查找下一个匹配文本
- N:向后查找前一个匹配文本
- 1.2 向后搜索
- ?:使用模式进行搜索,并定位到前一个匹配的文本
- n:向后查找下一个匹配的文本
- N:向前查找前一个匹配的文本
多文件浏览
- less file1 file2
- :n 浏览下一个文件
- :p 浏览上一个文件
- less file1
- :e file2
- :n 浏览下一个文件
- :p 浏览上一个文件
- 注:这个命令可以在浏览一个文件时,使用:e打开另一个文件
退出less
- q或大写ZZ
more
类似cat命令,cat是将整个文件的内容显示在屏幕上,more会以一页一页的方式显示,按空白键(space)切换到下一页,按b回退到前一页,兼带搜索字符串功能,more从前往后读取文件,启动时加载整个文件。
more -n filename:定义屏幕大小为n行,从文件头开始没10行显示一屏。
more +n filename:从第n行开始显示。
more +/关键字 filename:搜索关键字,在搜索到的关键字的前两行开始显示。
sed
sed操作、过滤和转换文本内容的工具
常用功能有对文件实现快速增删改查
其中查询功能中最常用的两大功能是过滤(过滤指定字符串)和取行(取出指定行)
sed [选项] [sed内置命令字符] [文件]
选项:
- -n 取消默认sed的输出,常与sed内置命令p连用
- -i 直接修改文件内容,而不是输出到终端
注:如果不适用-i选项,sed只是修改内存中的数据,并不会影响磁盘上的文件
sed内置命令字符:
- s 替换
- g 全局global
- p 打印print
- d 删除delete
一些sed的常用命令
输出文件的第二、三行
- sed -n '2,3p' log.log
过滤出含有"拦截"的行
- sed -n '/拦截/p' log.log
默认情况下,sed把所有输入行都打印在标准输出上。如果在某一行匹配到拦截,sed就把该行另外打印一遍
- sed '/拦截/p' log.log(不加选项-n)
删除含有"拦截"的行
- sed /拦截/d log.log
替换log.log文件中"拦截"为"放行"
- vim log.log
- :%s#拦截#放行#g
修改文件
- sed 's#拦截#放行#g' log.log(不改变原文件)
- sed -i 's#拦截#放行#g' log.log(改变原文件)
nohup
允许进程不挂断在后台运行
操作系统中有三个常用的流:
- 0:标准输入流 stdin
- 1:标准输出流 stdout
- 2:标准错误流 stderr
一般当我们用>console.txt实际上是对1>console.txt的省略用法,而<console.txt是对0<console.txt的省略用法。
>nohup ./start.sh >output 2>&1 &
&结尾含义:即使terminal终端关闭或电脑死机程序依然会运行(前提是你把程序上传到服务器)。
2>&1含义:把标准错误重定向到标准输出中,而标准输出又导入到文件output,所以标准错误、标准输出都导入到了文件output了。 至于为什么需要将标准错误重定向到标准输出,归根结底是因为标准错误stderr没有缓冲区,而标准输出stdout有,这就会导致>output 2>output文件output被打开两次,而stdout和stderr将会竞争覆盖。这就是为什么有人会写成: nohup ./command.sh >output 2>output出错的原因。
至于/dev/null文件,它是一个无底洞,任何东西都可以定向到这里,但是却无法打开。 所以一般很大的stdout和stderr,当你不关心的时候可以利用stdout和stderr定向到这里>./command.sh >/dev/null 2>&1。
ethtool、nload
查看网卡速率
1.查看网卡
ifconfig
2.查询或设置网卡参数命令
非root用户:sudo ethtool 网卡名称
root用户:ethtool 网卡名称
3.查看linux网络流量状况,实时输出
指定网卡:nload 网卡名称
所有网卡:nolad -m
curl
curl -H 'Content-Type:application/json' -d '{"name":"andylau"}' url -v
-H:指定请求头
-d:标识为post请求,指定请求数据体
-v:显示请求详细信息
-I:同--head向服务器发起HEAD请求,然后打印http头
-i:输出http头,空一行再输出响应数据
-b:参数用来向服务器发送 Cookie 如$ curl -b 'foo=bar' https://google.com
发送多个cookie 如$ curl -b 'foo1=bar;foo2=bar2' https://google.com
读取本地文件cookies.txt,发送到服务器 如$ curl -b cookies.txt https://www.google.com
-c:服务器设置的cookie写入一个文件 如$ curl -c cookies.txt https://www.google.com
--limit-rate:用于限制http请求和回应的带宽,模拟慢网速环境 如$ curl --limit-rate 200k https://google.com
-u:用来设置服务器认证的用户名和密码 如$ curl -u 'bob:12345' https://google.com/login 或 $ curl https://bob:12345@google.com/login
-x:指定http请求代理
-X:指定http请求方法
tar -czvf test.tar.gz a.txt #创建
tar -tzvf test.tar.gz #列出文件内容
tar -xzvf test.tar.gz #解压
控制shell程序的资源
ulimit -a #显示目前资源限制的设定
ulimit -u 500 #用户最多可开启的程序数目
操作系统的虚拟内存、进程、磁盘、内存、cpu等监控
vmstat 2 10 #每隔两秒采集一次服务器运行状态、采集10次
unzip test.zip #解压到当前目录
unzip -n test.zip -d /tmp #解压到指定目录tmp,不覆盖已有文件
unzip -o test.zip -d /tmp #解压到指定目录tmp,覆盖已有文件
unizp -v test.zip #查看test.zip内容,不解压
docker exec -it 1f54dcfcd617 /bin/sh #进入容器:进行一些操作
docker run -it 1f54dcfcd617 /bin/sh #启动镜像
docker start 容器id
docker restart 容器id
docker stop 容器id
docker container cp -a df920e2be194:/logs/hzsmk-sc/log.log . #拷贝容器内文件到主机当前目录
docker cp /www/runoob 96f7f14e99ab:/www/ #将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
cat test.txt | awk -F 'txt=|&client&' '{print $2}'|sort|uniq -c|sort -nr > aa.txt
awk命令
-F选项
txt=|&client& #分隔符pattern
{print $2} #action
sort排序 #内容排序
uniq -c #统计数量与去重
sort -nr #按数值大小降序排序(-n按数值、-r降序)
写入文件> #覆盖原文件内容
写入文件>> #追加到原文件内容后
设置文件权限
chmod ugo+r test.txt和chmod a+r test.txt效果相同
chmod ug+w,o-w file1.txt file2.txt 将文件file1.txt与file2.txt设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod -R a+r * 将目前目录下的所有文件与子目录皆设为任何人可读取 :
chmod a=rwx file和chmod 777 file效果相同
chmod ug=rwx,o=x file和chmod 771 file效果相同
chmod 4755 filename 可使此程序具有root的权限
more -n filename: #义屏幕大小为n行,从文件头开始没10行显示一屏。
more +n filename: #从第n行开始显示。
more +/关键字 filename:#搜索关键字,在搜索到的关键字的前两行开始显示。
top #查看进程占用资源情况
top -H -p <pid> #查看线程占用情况
ps -mp pid(进程id) -o THREAD,tid,time #查看线程列表:-mp显示所有线程\pid进程使用cpu的时间,-o用户自定义格式
printf "%x\n" 15664
jstack <pid> | grep -A 20 线程id(十六进制) #定位到线程ID的后20行
jmap -heap 10765 #查看进程新生代、老年代堆内存的分配大小以及使用情况,看是否本身分配过小
jmap -histo:live 10765 | more #找到最消耗内存的对象
jmap -dump:live,format=b,file=dump.hprof 进程id #jmap命令dump出堆里的对象文件
jstat -gcutil 9596 250 12 #进程9596每隔250ms打印一次,打印12次。
jstat -gccause pid #查看gc详细原因
jmap -histo 进程id > jmap.txt #dump文件分析,找到占用内存的对象,定位到具体code。
jstat -gc pid #垃圾回收统计
jstat -gcutil pid #总结垃圾回收统计
jstat -gcnew pid #新生代垃圾回收统计
jstat -gccapacity pid #堆内存统计
jstat -gcmetacapacity pid #元数据空间统计
jstat -gcnewcapacity pid #新生代内存空间统计
jstat -gcoldcapacity pid #老年代内存空间统计
jmap pid #查看进程的内存映像信息
jmap -heap pid #显示Java堆详细信息
jmap -histo:live pid #显示堆中对象的统计信息
jmap -clstats pid #打印类加载器信息
jmap -finalizerinfo pid #打印等待终结的对象信息
jmap -dump:format=b,file=heapdump.phrof pid #生成堆转储快照dump文件
netstat -a #列出所有端口
netstat -at #列出所有tcp端口
netstat -au #列出所有udp端口
netstat -l #列出所有处于监听状态的Sockets
netstat -lt #只列出所有监听tcp端口
netstat -lu #只列出所有监听udp端口
netstat -lx #只列出所有监听UNIX端口
netstat -c #netstat将每隔一秒输出网络信息。
netstat -i #显示网络接口列表
netstat -anp|grep ':3306' #找出运行在指定端口的进程
netstat -ap | grep ssh #找出程序运行的端口
telnet ip #用于远程登入
telnet ip 端口 #用于判断服务器ip端口是否网络通
free #内存使用情况
free -h #友好显示
free -h -s 3 #每隔3秒显示
top #各个进程资源占用情况
top后按1 #查看各个逻辑cpu的使用情况
ping www.baidu.com #用来测试与目标主机的连通性
ping -c 5 www.baidu.com #指定ping次数
ping -f www.baidu.com #洪水ping,也就是以最快的速度去ping,可以用来测试丢包率
ping -i 3 -s 1024 -t 255 www.baidu.com #-i 3发送周期为3秒、-s设置发送包的大小1024字节、-t设置TTL值为255
ifconfig #显示网络设备信息
ifconfig eth0 up/down #启动关闭指定网卡
ifconfig eth0 add/del 33ffe:3240:800:1005::2/64 #为网卡配置和删除IPv6地址
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #用ifconfig修改MAC地址
ifconfig eth0 192.168.120.56 #给eth0网卡配置IP地:192.168.120.56
ifconfig eth0 192.168.120.56 netmask 255.255.255.0 #给eth0网卡配置IP地址:192.168.120.56 ,并加上子掩码:255.255.255.0
ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255 #/给eth0网卡配置IP地址:192.168.120.56,加上子掩码:255.255.255.0,加上个广播地址: 192.168.120.2
ifconfig eth0 arp #开启网卡eth0的arp协议;
ifconfig eth0 -arp #关闭网卡eth0的arp协议;
ifconfig eth0 mtu 1500 #设置能通过的最大数据包大小为1500bytes
grep搜索文本
grep -i LinuxTechi /etc/passwd #-i忽略大小写
grep ^$ /etc/shadow #查找文件中所有的空行
grep -e "linuxtechi" -e "root" /etc/passwd #-e参数查找多个模式
grep -r linuxtechi /etc/ #递归查询目录下文本
grep ^root /etc/passwd #以root开头
grep bash$ /etc/passwd #以bash开头
grep -n linuxtechi /etc/passwd #显示行号
grep linuxtechi /etc/passwd /etc/shadow /etc/gshadow #多个文件中查找模式
grep -v linuxtechi /etc/passwd #反向查找,输出/etc/passwd文件中所有不含单词“linuxtechi”的行
tail查看日志
tail /etc/passwd #默认显示最后10行
tail -2 /etc/passwd #显示最后2行
tail -f /var/log/messages #-f实时监控
tail -n 2 /etc/passwd /etc/shadow #同时显示两个文件的最后2行
tail -f /var/log/httpd/access_log |grep 192.168.43.157 #要实时监视apache访问日志文件并显示包含IP地址192.168.43.157的行
history 2 #查看最近两条记录
!! #使用最近一次使用的命令
!994 #使用第num条命令
!echo #显示最近使用的某个特定命令
先执行ls sun.txt, 后执行cat !$ #显示cat sun.txt(!$指上条命令的参数)
echo $HISTSIZE
export $HISTSIZE=500
history -c #清除所有的历史记录
history -d 212 #清除212行的命令数据
cp cangls /tmp/ #复制文件到tmp目录下
cp cangls /tmp/bols #改名复制
cp -r /root/movie/ /tmp/ #目录复制
mv a.txt b.txt #重命名文件
mv -r dir1 dir2 #dir1下文件及目录复制到dir2下
mv a.txt dir2 #a.txt文件复制到dir2目录下
ln -s dir dir.link #创建软链接(支持目录、可跨文件系统,相当于winodws快捷方式)
ln a.txt a.link #创建硬链接(不支持目录、不可跨文件系统)
rm -rf dir.link #删除软链接,错误写法:rm -rf dir.link/,会删除dir目录下内容、dir和dir.link都还存在
硬链接不占用磁盘空间,软链接占用的空间只是存储路径所占用的极小空间
scp -r /home/space/music/ root@www.runoob.com:/home/root/others/ #本地目录到远程
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/musi #本地文件到远程
scp -r root@www.runoob.com:/home/root/others/ /home/space/music/ #远程目录到本地
如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator
firewall防火墙
systemctl status firewalld #查看firewall服务状态
出现Active: active (running)切高亮显示则表示是启动状态。
出现 Active: inactive (dead)灰色表示停止。
firewall-cmd --state #查看firewall的状态
service firewalld start #开启firewalld.service服务
service firewalld restart #重启firewalld.service服务
service firewalld stop #关闭firewalld.service服务
firewall-cmd --list-all #查看防火墙规则
firewall-cmd --query-port=8080/tcp # 查询端口是否开放
firewall-cmd --permanent --add-port=80/tcp # 开放80端口
firewall-cmd --permanent --remove-port=8080/tcp # 移除端口
firewall-cmd --reload #重启防火墙(修改配置后要重启防火墙)
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具
2、--permanent:表示设置为持久
3、--add-port:标识添加的端口