awk
参数
| NR | 当前行数 |
| NF | 当前列数 |
| $n | $0当前整行 ,$1表示第一列,$2表示第二列 |
| F | 明确分隔符 |
| RS | 记录分隔符,默认记录分隔符为\n |
| FS | 列分隔符,于-F功能类似 |
| OFS | 与FS对应,指定print函数输出时的列分隔符,默认空格 |
| ORS | 与RS对应,指定print函数输出时的记录分隔符,默认\n |
取日志
#取出2023-10-16到2023-10-21时间所有日志 $0表示整个文本数据
[root@localhost ~]# awk '/2023-10-16/,/2023-10-19/ {print $0}' 1.txt
2023-10-16 123 456 789 异常
2023-10-17 223 456 789 异常
2023-10-18 323 456555 789
2023-10-19 4236 456 78966 异常
#取出2023-10-16到2023-10-21时间包含异常的日志 ~表示 匹配正则表达式操作
[root@localhost ~]# awk '/2023-10-16/,/2023-10-21/ {if ($0 ~ /异常/) print}' 1.txt
2023-10-16 123 456 789 异常
2023-10-17 223 456 789 异常
2023-10-19 4236 456 78966 异常
2023-10-20 5236 4566 789 异常
删除空行
awk 'NF' input.txt > output.txt # NF 表示非空行
合并文件
[root@localhost ~]# more 1.txt
123
[root@localhost ~]# more 2.txt
456
[root@localhost ~]# awk '{print $0}' 1.txt 2.txt > 3.txt
[root@localhost ~]# more 3.txt
123
456
查看文件有多少行
[root@wj ~]# awk 'END{print NR}' 1.log
6
取某列
#F以:为分隔符,取第三列 值等于0的
[root@localhost ~]# awk -F: '$3==0' /etc/passwd
root:x:0:0:root:/root:/bin/bash
#取第一列和第三列
awk '{print $1,$3}'
取文件名
[root@localhost ~]# echo http.zip | awk -F "." '{print $1}'
http
删除前几个字符
[root@wj-7 ~]# echo a123456 | awk '{print substr($1,2)}' #删除第一个
123456
[root@localhost ~]# echo a123456 | awk '{print substr($1,3)}' #删除前两个
23456
删除第一行
df -h | awk 'NR>1 {print }' 或者NR!=1
修改某个值
[root@wj ~]# echo "wo shi wang"|gawk '{$3="haha"; print $0}'
wo shi haha
添加拼接
[root@wj ~]# eco "123" | awk '{print "hah" $NF}'hah123
计算
简单计算
#计算2*4
[root@localhost ~]# awk 'BEGIN{print 2*4}'
8
混合运算
#求奇数的和以及偶数和
[root@wj ~]# seq 100 |awk 'BEGIN{print "100以内奇数和","100以内偶数和" } NR%2==1{JiShuHe+=$0} NR%2==0{OuShuHe+=$0} END{print JiShuHe,OuShuHe}'
结果是:
100以内奇数和 100以内偶数和
2500 2550
引用shell变量变量 -v
[root@localhost ~]# s=:
[root@localhost ~]# awk -v FS=$s '{print$1FS$3}' /etc/passwd
root:0
bin:1
daemon:2
adm:3
输出格式
以;格式输出
[root@wj ~]# awk -F: -v OFS=";" '{print $1,$3}' /etc/passwd
root;0 bin;1 daemon;2
RS输入记录
[root@wj ~]# cat test.txt
a,b,c;
1,2,3;
x,y, zzz;
aaa,b bb,ccc vvv;
bbb
[root@wj ~]# awk -F"," -v RS=";" '{print $2}' test.txt
b 2 y b bb
分列输出
[root@wj ~]# echo -n '1,2,3|4,5,6|7,8,9'| awk 'BEGIN{RS="|";FS=","} {print $1,$2,$3}'
1 2 3
4 5 6
7 8 9
b
cat
#写入内容
cat > output.txt <<EOF
this is test eof
this is test eof2
EOF
#追加内容
cat >>2.txt <<EOF
456
789
EOF
#等特殊字符$时,须利用转义字符 \
cat > file <<EOF
export ORACLE_SID=yqpt
export PATH=\$PATH:\$ORACLE_HOME/bin
EOF
#显示行号
cat -n 1.txt
crontab定时
服务启停
systemctl start/stop/reload/status crond
参数解释
第1列表示分钟0~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
特殊 符号 含义
* 表示任意时间都可以
- 表示取值范围
/ 每过多少个数字
,散列数字
相关命令
查看当前的crontab 任务
crontab -l
添加crontab任务
crontab -e
删除所有的crontab 任务
crontab -r
查看其他用户/编辑 crontab 任务
只有root 用户才可以使用
crontab -u username -l # 查看
crontab -u username -e # 编辑
示例说明
实例1:每1分钟执行一次myCommand
* * * * * myCommand
实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
0 */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
0 23-7/1 * * * /etc/init.d/smb restart
示例13:每天8点和16点执行一次
0 8,16 * * *
示例14:每天03点 执行
00 03 * * * sh /root/back/bf.sh
cut
cut是一个很有用的 Linux 命令,当我们要截取文件的指定部分并打印到标准输出,当文本区域以及文件本身很大时,这个命令很有用。
#截取文件的前10列
cut -c1-10 txt_linuxmi
#截取该文件中的第二,第五和第七列
cut -d;-f2 -f5 -f7 txt_linuxmi
curl
参数解释:
| 参数 | 全称 / 说明 | 功能描述 |
|---|---|---|
-s | --silent | 静音模式,不输出任何内容 |
-S | --show-error | 显示错误信息(通常与静音模式配合使用,仅在出错时输出) |
-L | 无特定全称 | 跟踪 URL 重定向,自动跟随跳转的链接 |
-o | 无特定全称(小写字母 “欧”) | 重命名下载的文件,指定保存的文件名 |
-C | 无特定全称(大写字母 “西”) | 断点续传,支持从上次中断的位置继续下载 |
默认使用查看网页源代码
[root@wj ~]# curl wangjian.run
使用HTTP认证
curl -u username:password http://protected.site
只下载文件
#-O 是大写的欧
curl -O https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm
下载文件并重新命名且支持断点续传
#-o 小写的欧,可以重新定义文件名
curl -Co /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
测试网站速度
curl -s -w \
'\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nAppCon time:\t%{time_appconnect}\nRedirect time:\t%{time_redirect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' \
-o /dev/null wangjian.run
执行的结果如下:
Lookup time: 0.012
Connect time: 0.031
AppCon time: 0.000
Redirect time: 0.000
PreXfer time: 0.031
StartXfer time: 0.852
Total time: 0.912
批量下载图片
从站点当前页面下载所有 PNG 文件(使用GNU grep)
curl https://example.com | \
grep --only-matching 'src="[^"]*.[png]"' | \
cut -d\" -f2 | \
while read i; do curl https://example.com/"${i}" \
-o "${i##*/}"; done
curl wangjian.run | \
grep --only-matching 'src="[^"]*.[png]"' | \
cut -d\" -f2 | \
while read i; do curl wangjian.run/"${i}" \
-o "${i##*/}"; done
发送 GET 请求
curl https://api.example.com/data
发送 POST 请求
curl -X POST -d "param1=value1¶m2=value2" https://api.example.com/post
自定义请求头
有些 API 需要特定的请求头,如 Authorization:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
https://api.example.com/protected
保存和发送 Cookie
如果网站需要登录,你可以用 curl 先获取并保存 Cookie:
curl -c cookies.txt -d "username=admin&password=123456" \
https://example.com/login
然后再使用这些 Cookie 访问其他页面:
curl -b cookies.txt https://example.com/dashboard
以 JSON 格式发送请求
API 调试时,往往需要以JSON格式提交数据,你可以这样做
curl -X POST https://api.example.com/data \
-H "Content-Type: application/json" \
-d '{"name":"张三","age":28}'
断点续传
curl -C - -O https://example.com/largefile.zip
监控网站是否正常
[root@localhost ~]# curl -s -o /dev/null -w "%{http_code}" https://wangjian.run | grep 200
200
测试 API 响应时间
curl -w "Total time: %{time_total}s\n" -o /dev/null -s \
https://api.example.com/test
e
find
#删除两天之前的
find ./ -name 1.txt +2 -exec rm -rf {} \;
#删除三天之前的文件,其实就是保留最近4天的时间
find /root/back/ -name "*" -type f -mtime +3 -delete
#查找后,只显示最后两个
[root@wj 20211007]# find /var/log/ *.log | tail -2
#只打印第一级目录
find . -maxdepth 1 -name "*.sh
grep
不看注释和空行
[root@wj 1]# grep -v '#' 1.log -n #-n 可以显示行号
4:123
5:235
#不看注释和空行
[root@wj ~]# cat nginx-ln.conf | grep -v "#" | grep -v "^$"
或查询
grep 'pattern1\|pattern2' filename 方式1
grep -E 'pattern1|pattern2' filename 方式2
egrep 'pattern1|pattern2' filename 方式3
grep -e pattern1 -e pattern2 filename 方式4
且查询
方式1
grep -E 'pattern1.*pattern2' filename
grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
第一个例子如下:(其中两个pattern的顺序是指定的)
第二个例子:(两个pattern的顺序不是固定的,可以是乱序的)
方式2
grep -E 'pattern1' filename | grep -E 'pattern2'
Grep NOT操作
使用选项 grep -v
使用 grep -v 可以实现 NOT 操作。 -v 选项用来实现反选匹配的( invert match)。如,可匹配得到除下指定pattern外的所有lines。
grep -v 'pattern1' filename
head
#取第一行
head -n1
history
#清除所有历史记录
[root@wj ~]# history -c
iptables
解释说明
iptables 使用三个不同的链来允许或阻止流量:输入(input)、输出(output)和转发(forward)
- 输入(input) —— 此链用于控制传入连接的行为
- 输出(output) —— 此链用于传出连接
- 转发(forward) —— 这条链用于传入的连接,这些连接实际上不是在本地传递的,比如路由和 NATing
CentOS 7 上默认安装了 firewalld 作为防火墙,使用 iptables 建议关闭并禁用 firewalld。
systemctl stop firewalld
systemctl disable firewalld
安装 iptables
yum install -y iptables-services
systemctl enable iptables
systemctl stop iptables
systemctl start iptables
systemctl status iptables
systemctl restart iptables
systemctl disable iptables
systemctl stop iptables
# 任何改动之前先备份,请保持这一优秀的习惯
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
iptables-save > /etc/sysconfig/iptables
cat /etc/sysconfig/iptables
#默认文件配置信息
[root@localhost sysconfig]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0] #该规则表示INPUT表默认策略是ACCEPT
:FORWARD ACCEPT [0:0] #该规则表示FORWARD表默认策略是ACCEPT
:OUTPUT ACCEPT [0:0] #该规则表示OUTPUT表默认策略是ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #对于已经建立连接的数据,是允许访问的
-A INPUT -p icmp -j ACCEPT #允许icmp协议的访问,主要就是ping
-A INPUT -i lo -j ACCEPT #接受本地的所有请求
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT #允许22端口被外部访问
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
# 上面两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。
COMMIT
[root@localhost sysconfig]# more iptables.bak
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
实例
#解释说明:
-A:在规则链的末尾加入新规则,input output forward
-p:指定协议可以是tcp、udp、icmp中的一个或 者全部all
-m state --stats:NEW表示包为新的连接 ESTABLISHED:已经联机成功的联机状态
--dport:22 要通过的端口
-j:ACCEPT 接受 DROP 拒绝
#查看所有规则
iptables -L 或者 iptables -L -nv 或者 iptables -L -nv --line-number
#清空所有的防火墙规则(无任何限制,随意进出)
iptables -F
#删除限制(本质就是删除记录)
iptables -t filter -D INPUT 1 #删除input的第1条规则
#配置文件修改
systemctl restart iptables
vim /etc/sysconfig/iptables
#以下端口对所有人开放,外部都可以访问到
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
#网络知识
123.0.0.1到123.255.255.254 简写:123.0.0.0/8
123.45.0.1到123.45.255.254 简写:124.45.0.0/16
123.45.6.1到123.45.6.254 简写:123.45.6.0/24
mail邮件邮箱
安装
yum install mailx -y
发送邮件
发送邮件
命令格式:echo '邮件内容' | mail -s '主题' <收件人>
内容直接用echo写出来
echo "内容123" |mailx -s "标题测试" root
使用文件进行邮件发送
mail -s "Hello from jsdig.com by file" admin@jsdig.com < mail.txt
配置个人邮箱
[root@localhost ~]# vim /etc/mail.rc
将下面配置添加到文件尾部
set smtp=smtp.163.com # 邮箱服务器地址
set smtp-auth=login # 认证方式:采用用户名和密码登录方式
set smtp-auth-user=xxx@163.com # 用户名
set smtp-auth-password=xxx # 密码(邮箱授权码)
set from=xxx@163.com # 绑定发件人
发送一个测试下
[root@localhost ~]# echo 'hello world!' | mail -s '你好' xxx@qq.com
journalctl日志
检索 systemd 日志,是 CentOS 7 才有的工具。
查看某个服务的日志
[root@wj ~]# journalctl -xeu sshd.service
journalctl 不带参数从旧到新
journalctl -r 从新到旧
journalctl -f 实时日志
journalctl –since 1 hour ago 查看1小时前到现在的日志
journalctl –since “2016-08-04 20:00:00” –until “2016-08-04 20:15:00” 查看8月4日晚上的日志
k
lsof
查看某个端口是被哪个服务使用
[root@wj ~]# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1000 root 3u IPv4 21050 0t0 TCP *:ssh (LISTEN)
sshd 1000 root 4u IPv6 21059 0t0 TCP *:ssh (LISTEN)
sshd 1592 root 3u IPv4 22675 0t0 TCP wj:ssh->192.168.15.1:54887 (ESTABLISHED)
more
空格 显示下一屏
回车 显示下一行
b 显示上一屏
f 显示下一屏
q 退出
nslookup网络工具
nslookup 是一个用于查询域名系统(DNS)的命令行工具,它能够帮助用户诊断网络问题和解析域名或IP地址。
[root@rudder ~]# nslookup baidu.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: baidu.com
Address: 123.125.114.144
Name: baidu.com
Address: 220.181.111.85
Name: baidu.com
Address: 220.181.111.86
具体来说,nslookup 可以执行以下操作:
- 查询域名对应的IP地址:输入域名后,nslookup 会返回该域名的IPv4和/或IPv6地址。
- 查询IP地址对应的域名:输入IP地址后,nslookup 会尝试查找与之相关联的域名。
- 指定DNS服务器进行查询:用户可以选择特定的DNS服务器来进行查询,以获取不同服务器的解析结果。
- 查看不同类型的DNS记录:例如A记录、MX记录、CNAME记录等,以了解域名指向的具体信息。
- 诊断DNS问题:当网络连接出现问题时,使用nslookup 可以帮助确定问题是出在本地计算机还是DNS服务器上。
nslookup 支持交互模式和非交互模式两种使用方式:
- 非交互模式:直接在命令行中输入完整的命令和参数,如
nslookup www.example.com,然后得到查询结果。 - 交互模式:先运行
nslookup命令进入交互界面,然后可以逐步输入命令进行查询。
此外,除了命令行版本,还有基于网页的nslookup工具,如Nslookup.io,它允许用户在浏览器中选择不同的DNS服务器并查看各种类型的DNS记录。
总的来说,nslookup 是一个非常有用的工具,无论是网络管理员还是普通用户,都可以通过它来获取域名解析的相关信息,帮助解决网络连接问题。
o
pgrep
#查找名为ssh的进程
pgrep ssh
#查找包含字符串nginx的进程
pgrep -f nginx
#查找用户www-data运行的所有进程
pgrep -u www-data
#查找名为crond的最老进程的PID
pgrep -o crond
pkill杀死进程
pkill 命令:是ps命令和kill命令的结合,用来杀死指定进程
#杀死所有nginx的进程
pkill nginx
ping
参数解释
- -c ping的次数
- -i 每次ping的间隔时间
- -w 每次ping的等待时间,如果超过这个时间就不ping了
指定次数和时间,间隔ping
[root@localhost ~]# ping -c 5 -i 0.5 baidu.com
PING baidu.com (123.125.114.144) 56(84) bytes of data.
64 bytes from 123.125.114.144: icmp_seq=1 ttl=54 time=2.92 ms
64 bytes from 123.125.114.144: icmp_seq=2 ttl=54 time=2.97 ms
64 bytes from 123.125.114.144: icmp_seq=3 ttl=54 time=2.99 ms
64 bytes from 123.125.114.144: icmp_seq=4 ttl=54 time=6.98 ms
64 bytes from 123.125.114.144: icmp_seq=5 ttl=54 time=3.14 ms
指定次数,时间,等待的时间
[root@wj ~]# ping -c1 -i1 -w1 192.168.15.129
PING 192.168.15.129 (192.168.15.129) 56(84) bytes of data.
64 bytes from 192.168.15.129: icmp_seq=1 ttl=64 time=0.220 ms
--- 192.168.15.129 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.220/0.220/0.220/0.000 ms
q
rpm
查看系统安装时间
[root@wj ~]# rpm -qi basesystem
Name : basesystem
Version : 10.0
Release : 7.el7.centos
Architecture: noarch
Install Date: 2024年01月24日 星期三 09时50分18秒 #系统安装时间
Group : System Environment/Base
Size : 0
License : Public Domain
Signature : RSA/SHA256, 2014年07月04日 星期五 08时46分57秒, Key ID 24c6a8a7f4a80eb5
Source RPM : basesystem-10.0-7.el7.centos.src.rpm
Build Date : 2014年06月27日 星期五 18时37分10秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
Summary : The skeleton package which defines a simple CentOS Linux system
Description :
Basesystem defines the components of a basic CentOS Linux
system (for example, the package installation order to use during
bootstrapping). Basesystem should be in every installation of a system,
and it should never be removed.
rsync同步备份
[root@wj ~]# yum -y install rsync
[root@wj ~]# rsync -av /home/ /backupdata/ #将/home/下面的文件,备份到/backupdata/
SELinux
查看selinu是否关闭
[root@wj ~]# sestatus
SELinux status: disabled
ssh
端口测试
#这是不通的 Connection refused 连接被拒绝
[root@wj ~]# ssh -vp 221 192.168.15.128
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Connecting to 192.168.15.128 [192.168.15.128] port 221.
debug1: connect to address 192.168.15.128 port 221: Connection refused
ssh: connect to host 192.168.15.128 port 221: Connection refused
#这是通的 看这个 debug1: Connection established. 已建立连接
[root@wj ~]# ssh -vp 3306 192.168.15.128
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Connecting to 192.168.15.128 [192.168.15.128] port 3306.
debug1: Connection established.
#简单粗暴不看过程
[root@wj ~]# ssh -p 3306 192.168.15.128
ssh_exchange_identification: Connection closed by remote host
[root@wj ~]# ssh -p 13306 192.168.15.128
ssh: connect to host 192.168.15.128 port 13306: Connection refused
[root@wj ~]#
远程连接
[root@wj ~]# ssh -p 22 106.14.95.216 #默认22端口 可以不用写-p
ss端口查看
查看已启动的端口
[root@wj ~]# ss -tlwn
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
raw UNCONN 0 0 [::]:58 [::]:*
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 100 127.0.0.1:25 *:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 128 [::]:3000 [::]:*
tcp LISTEN 0 100 [::1]:25 [::]:*
tcp LISTEN 0 128 [::]:9090 [::]:*
tcp LISTEN 0 80 [::]:3306 [::]:*
tcp LISTEN 0 128 [::]:9100 [::]:*
tail
查看最后一行信息
tail -n 1 file.txt
tar
参数解释:
-c 建立新的备份文件
-C 切换到指定的目录
-d 对比备份文件内和文件系统上的文件的差异
-x 解压缩归档文件
-v 显示指令执行过程
-f 指定归档文件的文件名
-t 查看归档文件内容
-j 通过 bzip2 指令处理备份文件
-z 通过 gzip 指令处理备份文件
-r 向现有存档文件追加或更新文件或目录
-v 显示指令执行过程
-W 验证归档文件
--totals 备份文件建立后,列出文件大小
--delete 从备份文件中删除指定的文件
--wildcards 在 unix tar 命令中指定匹配模式
只打包不压缩tar
#打包
tar -cvf archive.tar /home/cyberpunk/testdir/
#解包
tar -xvf Archive.tar -C /home/cyberpunk/testdir/
压缩的 tar.gz 归档文件 gzip
#打包
tar -cvzf compressedArchive.tar.gz /home/cyberpunk/testdir
#解包
tar -xvf Archive.tar.gz
生成压缩率更高的 tar.bz2 文件
tar 的 bz2 压缩,可以创建比 gzip 文件小的归档。Bz2 模式执行归档压缩和解压所需的时间比 gzip 模式多。
通常,这个时间差可以忽略不计,但如果文件非常大,或者是文件数量非常多,那么时间差就会非常大。
#打包
tar -cvfj Archive.tar.bz2 /home/cyberpunk/testdir
tar -jcvf mysql.`date +%Y-%m-%d`.tar.bz2 /var/lib/mysql #备份mysql
#解包
tar -xvf Archive.tar.bz2
从 tar 归档文件中提取单个文件
tar --extract --file=archive.tar file1.txt
从 tar 归档文件中提取多个文件
tar -xvf Archive.tar "file 1" "file 2"
使用通配符提取文件组
# tar -xvf Archive.tar --wildcards *.txt'
/home/cyberpunk/testdir/file1.txt
/home/cyberpunk/testdir/file2.txt
/home/cyberpunk/testdir/file3.txt
添加文件或目录到 tar 存档中
#要向现有的 tar 文件中添加文件或目录,可以使用 r 选项。
#例如,我们将 xyz.txt 文件和 php 目录添加到现有的 tecmint-14-09-12.tar 归档文件中。
tar -rvf Archive.tar xyz.txt #add file
or
tar -rvf Archive.tar php # add directory
tcpdump抓包
yum -y install tcpdump
yum -y install pv
网速测试
[root@wj ~]# tcpdump -i ens32 -w - | pv -bert >/dev/null
tcpdump: listening on ens32, link-type EN10MB (Ethernet), capture size 262144 bytes
66MiB 0:00:14 [23.9kiB/s] #66表示总传输数据量,23.9kiB/s表示接口的网速
3269 packets captured
3272 packets received by filter
0 packets dropped by kernel
抓取所有的包
#-s 0 代表不限制包大小 ,0是数字0
#-w 代表输出文件
[root@wj ~]# tcpdump -s 0 -w out.pcap
IP过滤
默认网卡是eth0 如果不是这个需要指定网卡此方式收发都显示信息比较多
tcpdump -i ens32 host 192.168.67.131
如果只想看收,或者发 ,只需用dst 或者src即可 (dst目地 src源地址)
tcpdump -i ens32 dst/src XXX
网段过滤
tcpdump -i ens32 192.168.67.0/24
tcpdump -i ens32 192.168.67
端口过滤
tcpdump -i ens32 port 80
tcpdump -i ens32 dst port 80
多个端口
tcpdump -i ens32 port 80 or prot 22
tcpdump -i ens32 port 80 or 22
端口范围
tcpdump -i ens32 portrange 8000-8080
tcpdump -i ens32 dst/src portrange 8000-8080
常用协议可直接写协议名称
tcpdump -i ens32 port http
tcpdump icmp(ping的协议)
监听所有网卡
tcpdump -i any
-w输出保持到文件中,可以保存为cap或者pacp格式,方便wireshark工具打开
tcpdump -i ens32 port http -w 1.pcap
抓取字段解释说明
这里以我随便抓取的一个 tcp 包为例来看一下
21:26:49.013621 IP 172.20.20.1.15605 > 172.20.20.2.5920: Flags [P.], seq 49:97, ack 106048, win 4723, length 48
从上面的输出来看,可以总结出:
第一列:时分秒毫秒 21:26:49.013621
第二列:网络协议 IP
第三列:发送方的ip地址+端口号,其中172.20.20.1是 ip,而15605 是端口号
第四列:箭头 >, 表示数据流向
第五列:接收方的ip地址+端口号,其中 172.20.20.2 是 ip,而5920 是端口号
第六列:冒号
第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符见下面
Flags 标识符
使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:
[S] : SYN(开始连接)
[P] : PSH(推送数据)
[F] : FIN (结束连接)
[R] : RST(重置连接)
[.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG
-a:尝试将网络和广播地址转换成名称;
-A:以ASCII格式打印输出
tcpdump -A -r tt.cap
tcpdump -A |grep baidu
-c<数据包数目>:收到指定20个数据包数目后,就停止进行倾倒操作;
tcpdump -c 20 -w tt.cap
-C: 指定一个1M的交换文件,-W 最多写3个文件,名字为abc0 abc1 abc2 默认从0开始
如果超过3个就循环的覆盖安装
tcpdump -C 1 -W 3 -w abc
-d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;
-dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;
-ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;
-D:显示所有可用的网络列表
[root@localhost ~]# tcpdump -D
1.virbr0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.ens32
5.any (Pseudo-device that captures on all interfaces)
6.lo [Loopback]
-e:在每列倾倒资料上显示连接层级的文件头,也会显示源和目的MAC地址
-f:用数字显示网际网络地址;
-F<表达文件>:指定内含表达方式的文件;
适合表达式长期维护
more fileter_rule
tcp port 80
tcpdump -F filter_rule
-i<网络界面>:使用指定的网络截面送出数据包;默认是第一块网卡
-l:使用标准输出列的缓冲区,在实时查看时,同时可以保存到文件
tcpdump -l | tee dat
tcpdump -l > dat & tail -f dat
-L:列出网络接口的已知数据链路
[root@localhost ~]# tcpdump -L
Data link types for virbr0 (use option -y to set):
EN10MB (Ethernet)
DOCSIS (DOCSIS) (printing not supported)
-n:不把主机的网络地址转换成名字;直接显示IP,避免执行DNS lookups 的过程,速度会快很多。
tcpdump -n
-nn:不把协议和端口转化为名字,
tcpdump -nn
-N:不列出host的域名地方;将会打印nic 而不是nic.ddn.mil
-O:不将数据包编码最佳化;
-p:不让网络界面进入混杂模式;
-q :简洁输出打印
-Q: 选择入方向还是出方向的数据包可选in out inout
tcpdump -Q in
tcpdump -Q out
tcpdump -Q inout
-r<数据包文件>:从指定的文件读取数据包数据;
-s<数据包大小>:设置每个数据包的大小;
默认是262144bytes
tcpdump -s 50 超出50字节就会被截断
-S:用绝对而非相对数值列出TCP关联数;
-t:在每列倾倒资料上不显示时间;
-tt:在每列倾倒资料上显示未经格式化的时间戳记;
-ttt:输出每两行打印的时间间隔
-tttt:在每行的时间戳之前添加打印日期,此种方式输出的时间最直观
-T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型;
-v:详细显示指令执行过程;
-vv:更详细显示指令执行过程;
-vvv:更加详细的显示
-x:用十六进制和ascii字码列出数据包资料;
tcpdump -X -r tt.cap
-r 读取数据,然后分析,也可以使用过滤分析。不用wireshark
tcpdump -r 1.log
ulimit
列出所有限制
[root@wj ~]# ulimit -a
core file size (blocks, -c) 0 #0代表没有限制,每个文件的最大容量
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited #可建立的单一文件的大小
pending signals (-i) 7621
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024 #可同时开启的文件数量
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7621
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
修改同时开启的文件数量
cp /etc/security/limits.conf /etc/security/limits.conf.bak
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
修改完成后重新登陆即可。注销再次登陆即可
限制仅能建立10兆以下的文件
[root@wj ~]# ulimit -f 10240
[root@wj ~]# ulimit -a | grep 'file size'
core file size (blocks, -c) 0
file size (blocks, -f) 10240
[root@wj ~]# dd if=/dev/zero of=123 bs=1M count=20
文件大小超出限制
[root@wj ~]# dd if=/dev/zero of=123 bs=1M count=10
记录了10+0 的读入
记录了10+0 的写出
10485760字节(10 MB)已复制,0.0193712 秒,541 MB/秒
[root@wj ~]# ll -h
总用量 105M
-rw-r--r-- 1 root root 519 2月 6 23:04 -
drwxr-xr-x 2 root root 4.0K 2月 6 23:26 1
-rw-r--r-- 1 root root 10M 3月 10 23:27 123
想要解除,需要注销再次登陆即可
wget
#默认直接下载
wget http://tel.mirrors.163.com/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso
#综合应用 -b:后台下载 -c:支持断点下载
wget -bc http://192.168.1.10/abc.zip
备注:如果切换到后台下载了需要使用tail -f wget-log 查看进度情况
#下载重命名
wget -O wordpress.zip http://192.168.1.10/abc.zip
#获取远程文件内容,不用保存到本地,以标准输出
wget -O- http://example.com/file.txt
wget -O- http://xx.bashcommand.com/test.sh | sh #目前验证有问题
#下载指定格式文件
wget -r -A.pdf http://192.168.1.10/
#下载整站到本地的download文件夹
wget --mirror -p --convert-links -P /root/download http://192.168.1.10/
#指定目录下载
wget -P /home/download http://tel.mirrors.163.com/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso
#限定最大下载字节数
wget -Q 1M http://tel.mirrors.163.com/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso
#下载 http://tel.mirrors.163.com/centos/6.4/os/x86_64/ 目录中的所有文件
wget -r -np -nd http://tel.mirrors.163.com/centos/6.4/os/x86_64/
#限速
wget --limit-rate=300k http://192.168.1.10/abc.zip
伪装代理名称下载
wget --user-agent="Mozilla/5.0 (Windows NT 6.1; en-US) Chrome/10.0.648.204 Safari/534.16" http://192.168.1.10/abc.zip
#测试下载链接 正常会返回200
wget --spider wangjian.run
#重试次数,默认20次
wget --tries=40 http://192.168.1.10/abc.zip
#文件太大,存成多个小文件
wget -i http://192.168.1.10/abc.zip
#下载FTP服务器的文件
wget --ftp-user=USERNAME --ftp-password=PASSWORD ftp://192.168.1.10/
whereis
是一个命令行工具,用于查找文件或目录的位置。
[root@wj ~]# whereis python
python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz
xargs
用于将标准输入数据转换为命令行参数,与find命令的-exec选项不同,xargs命令可以每次只获取一部分文件而不是全部,并且只为一个进程提供参数,避免因参数过长导致的溢出错误。特别是需要执行类似kill、rm等命令时。
#查找某个进程并杀死
ps -aux|grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9
#查找文件并删除
find /root/ -type f -name "*.txt" | xargs rm -rf
#把前面的结果,当做后面的参数,xargs后面默认是echo
[root@localhost ~]# echo "123" | xargs
123
[root@localhost ~]# echo "123" | xargs echo
123
#-n 1 一次打印一个,默认以空格当做分隔符
[root@localhost ~]# echo "123 456 789" | xargs -n 1
123
456
789
#-d 自定分隔符
[root@localhost ~]# echo -n "123456789" | xargs -d "2"
1 3456789
#-n 不输出换行
[root@localhost ~]# echo -n "123#456#789" | xargs -d "#"
123 456 789
#-p 确认是否要执行,先预览执行的结果 确认全部
[root@localhost ~]# echo -n "123456789" | xargs -d "2" -p
echo 1 3456789 ?...y
1 3456789
# -p -n 1 一次确认一个
[root@localhost ~]# echo -n "123456789" | xargs -d "2" -p -n 1
echo 1 ?...y
1
echo 3456789 ?...y
3456789
#-t 把每次的执行结果打印出来
[root@localhost ~]# echo -n "123456789" | xargs -d "2" -t -n 1
echo 1
1
echo 3456789
3456789
#把管道之前的结果,保存给一个{} ,当做第二个括号的结果
[root@localhost ~]# echo -n "123456789" | xargs -I {} echo {}
123456789
#-r 空参数,不输出
[root@localhost ~]# echo | xargs echo
[root@localhost ~]# echo | xargs -r echo
[root@localhost ~]#
#输出为一行
[root@localhost ~]# cat 2.txt
123
abc
789
\a \n
[root@localhost ~]# cat 2.txt | xargs echo
123 abc 789 a n
#每行显示2个
[root@localhost ~]# cat 2.txt | xargs -n 2 echo
123 abc
789 a
n
#批量创建文件
[root@localhost 2]# cat 2.txt | xargs touch
[root@localhost 2]# ls
123 2.txt 789 a abc n
#批量删除文件
[root@localhost 2]# cat 2.txt
123
abc
789
\a \n
[root@localhost 2]# cat 2.txt | xargs touch
[root@localhost 2]# ls
123 2.txt 789 a abc n
[root@localhost 2]# cat 2.txt | xargs rm
[root@localhost 2]# ls
2.txt
#是否确认删除 -p,全部确认
[root@localhost 2]# cat 2.txt | xargs -p rm
rm 123 abc 789 a n ?...y
[root@localhost 2]# ls
2.txt
#是否确认删除 -n,一个一个的确认
[root@localhost 2]# cat 2.txt | xargs -p -n 1 rm
rm 123 ?...y
rm abc ?...y
rm 789 ?...y
rm a ?...y
rm n ?...y
[root@localhost 2]# ls
2.txt
