linux基础命令

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&param2=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 可以执行以下操作:

  1. 查询域名对应的IP地址:输入域名后,nslookup 会返回该域名的IPv4和/或IPv6地址。
  2. 查询IP地址对应的域名:输入IP地址后,nslookup 会尝试查找与之相关联的域名。
  3. 指定DNS服务器进行查询:用户可以选择特定的DNS服务器来进行查询,以获取不同服务器的解析结果。
  4. 查看不同类型的DNS记录:例如A记录、MX记录、CNAME记录等,以了解域名指向的具体信息。
  5. 诊断DNS问题:当网络连接出现问题时,使用nslookup 可以帮助确定问题是出在本地计算机还是DNS服务器上。

nslookup 支持交互模式和非交互模式两种使用方式:

  1. 非交互模式:直接在命令行中输入完整的命令和参数,如nslookup www.example.com,然后得到查询结果。
  2. 交互模式:先运行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 &gt; 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 是端口号
第四列:箭头 &gt;, 表示数据流向
第五列:接收方的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&lt;数据包数目&gt;:收到指定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&lt;表达文件&gt;:指定内含表达方式的文件;
适合表达式长期维护
more fileter_rule
tcp port 80
tcpdump -F filter_rule
-i&lt;网络界面&gt;:使用指定的网络截面送出数据包;默认是第一块网卡
-l:使用标准输出列的缓冲区,在实时查看时,同时可以保存到文件
tcpdump -l | tee dat
tcpdump -l &gt; dat &amp; 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&lt;数据包文件&gt;:从指定的文件读取数据包数据;
-s&lt;数据包大小&gt;:设置每个数据包的大小;
默认是262144bytes
tcpdump -s 50  超出50字节就会被截断
-S:用绝对而非相对数值列出TCP关联数;
-t:在每列倾倒资料上不显示时间;
-tt:在每列倾倒资料上显示未经格式化的时间戳记;
-ttt:输出每两行打印的时间间隔
-tttt:在每行的时间戳之前添加打印日期,此种方式输出的时间最直观
-T&lt;数据包类型&gt;:强制将表达方式所指定的数据包转译成设置的数据包类型;
-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

© 版权声明
THE END
点赞0 分享