Linux

Table of contents

  1. grep
  2. ll ls
  3. curl
  4. 1、常用请求
  5. 2、下载文件
  6. 3、模拟登录
  7. 4、其他
  8. 固定IP配置
  9. wget
  10. tree 安装
  11. netstat 安装
  12. fuser命令
  13. rzsz
  14. 系統监控
  15. Firawalld
  16. 查看端口
  17. 查看进程
  18. 空间清理
  19. 空间清理

Linux 环境相关

grep

参数:

参数:

    -a 或 --text : 不要忽略二进制的数据。
    -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
    -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
    -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
    -c 或 --count : 计算符合样式的列数。
    -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
    -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
    -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
    -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
    -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
    -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
    -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
    -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
    -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
    -i 或 --ignore-case : 忽略字符大小写的差别。
    -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
    -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
    -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
    -o 或 --only-matching : 只显示匹配PATTERN 部分。
    -q 或 --quiet或--silent : 不显示任何信息。
    -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
    -s 或 --no-messages : 不显示错误信息。
    -v 或 --invert-match : 显示不包含匹配文本的所有行。
    -V 或 --version : 显示版本信息。
    -w 或 --word-regexp : 只显示全字符合的列。
    -x --line-regexp : 只显示全列符合的列。
    -y : 此参数的效果和指定"-i"参数相同。 

常用实例:

我喜欢配合cat使用


## 查文件中指定含有指定关键字的内容
cat /home/test/app/logs/paystationlog/paystation.log | grep  17ACIC01220000000002871371146E

## 查文件中指定含有指定关键字的内容,并多显示有关键字内容附加前面10行
cat /home/test/app/logs/paystationlog/paystation.log | grep -B 10  17ACIC01220000000002871371146E

## 查文件中指定含有指定关键字的内容,并多显示有关键字内容附近后面10行
cat /home/test/app/logs/paystationlog/paystation.log | grep -A 10  17ACIC01220000000002871371146E

## 查文件中指定含有指定关键字的内容,并多显示有关键字内容附近前面及后面10行,多20行
cat /home/test/app/logs/paystationlog/paystation.log | grep -B 10 -A 10  17ACIC01220000000002871371146E
cat /home/test/app/logs/paystationlog/paystation.log | grep -C 10  17ACIC01220000000002871371146E

ll ls

列出文件 按文件时间先后排序显示

# 列出文件 按文件时间先后排序显示
ll -lrt

列出符合文件关键字的文件 按时间先后排序显示

# 列出符合文件关键字的文件 按时间先后排序显示
ll P_AMS*.txt  -lrt

统计kjhs*.txt文件个数

# 统计kjhs*.txt文件个数
ls kjhs*.txt | wc -l

统计使用 find(更可靠,支持递归)​​

# 统计当前目录下的 .txt 文件数量:
find . -maxdepth 1 -type f -name "*.txt" | wc -l
-maxdepth 1:仅当前目录(不包括子目录)
-type f:只统计文件(排除目录)
-name "*.txt":匹配 .txt 后缀的文件

获取目录中符合关键字文件的最大的文件

ls -S | head -1

# 获取所有 kjhs开头的 txt 文件, 按文件大小倒排序,取前3
ll -h kjhs*.txt -S | head -3

获取目录中符合关键字文件的最新的文件

# 如果文件名包含日期(如 log_2023-10-01.txt, log_2023-10-02.txt),可以按日期排序:
ls log_*.txt | sort -t '_' -k 2 | tail -1
-t '_':以 _ 分隔
-k 2:按第 2 列(日期部分)排序
tail -1:取最新的文件

ls 可能会遇到文件名包含空格或特殊字符的问题,更安全的方式是 find + sort:

find . -maxdepth 1 -type f -name "kjhs_*.txt" | sort -t '_' -k 2 -n | tail -1
-maxdepth 1:只在当前目录查找
-type f:只匹配文件(排除目录)
-name "file_*.txt":匹配文件名模式

计算文件大小

find . -maxdepth 1 -type f -name "*.txt" -exec du -cb {} + | grep total | awk '{print $1}'
-exec du -cb {} +:计算所有匹配文件的总大小
grep total:提取 du 输出的 total 行
awk '{print $1}':仅显示总字节数

计算文件大小

find . -maxdepth 1 -type f -name "*.txt" -printf "%s\n" | awk '{sum += $1} END {print "文件数:", NR, "总大小:", sum, "字节"}'
-printf "%s\n":输出每个文件的大小(字节)
awk 计算总和:
    sum += $1:累加文件大小
    NR:文件数量(行数)
    END:最终输出结果

统计 .txt 文件的总大小(人类可读格式)​​

du -ch *.txt | grep total
du -ch:计算总大小并显示 total
grep total:提取总大小行

curl

安装

yum install curl

curl 是一个非常强大的命令行工具,用于发送请求到服务器并获取响应。

参数:

参数 描述  
-a/–append 上传文件时,附加到目标文件  
-A/–user-agent <string> 设置用户代理发送给服务器  
- anyauth 可以使用“任何”身份验证方法  
-b/–cookie <name=string/file> cookie字符串或文件读取位置  
- basic 使用HTTP基本验证  
-B/–use-ascii 使用ASCII /文本传输  
-c/–cookie-jar <file> 操作结束后把cookie写入到这个文件中  
-C/–continue-at <offset> 断点续转  
-d/–data <data> HTTP POST方式传送数据  
–data-ascii <data> 以ascii的方式post数据  
–data-binary <data> 以二进制的方式post数据  
–negotiate 使用HTTP身份验证  
–digest 使用数字身份验证  
–disable-eprt 禁止使用EPRT或LPRT  
–disable-epsv 禁止使用EPSV  
-D/–dump-header <file> 把header信息写入到该文件中  
–egd-file <file> 为随机数据(SSL)设置EGD socket路径  
–tcp-nodelay 使用TCP_NODELAY选项  
-e/–referer 来源网址  
-E/–cert <cert[:passwd]> 客户端证书文件和密码(SSL)  
–cert-type <type> 证书文件类型(DER/PEM/ENG) (SSL)  
–key <key> 私钥文件名 (SSL)  
–key-type <type> 私钥文件类型(DER/PEM/ENG) (SSL)  
–pass <pass> 私钥密码(SSL)  
–engine <eng> 加密引擎使用(SSL). “–engine list” for list  
–cacert <file> CA证书(SSL)  
–capath <directory> CA目录(made using c_rehash) to verify peer against (SSL)  
–ciphers <list> SSL密码  
–compressed 要求返回是压缩的形势(using deflate or gzip)  
–connect-timeout <seconds> 设置最大请求时间  
–create-dirs 建立本地目录的目录层次结构  
–crlf 上传是把LF转变成CRLF  
-f/–fail 连接失败时不显示http错误  
–ftp-create-dirs 如果远程目录不存在,创建远程目录  
–ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用  
–ftp-pasv 使用PASV/EPSV 代替端口  
–ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址  
–ftp-ssl 尝试用SSL/TLS 来进行ftp数据传输  
–ftp-ssl-reqd 要求用SSL/TLS 来进行ftp数据传输  
-F/–form <name=content> 模拟http表单提交数据  
-form-string <name=string> 模拟http表单提交数据  
-g/–globoff 禁用网址序列和范围使用{}和[]  
-G/–get 以get的方式来发送数据  
-h/–help 帮助  
-H/–header 自定义头信息传递给服务器  
–ignore-content-length 忽略的HTTP头信息的长度  
-i/–include 输出时包括protocol头信息  
-I/–head 只显示文档信息  
-j/–junk-session-cookies 从文件中读取略session cookie    
–interface 指定网络接口/地址使用  
- krb4 <级别> 启用与指定的安全级别krb4  
-j/–junk-session-cookies 读取文件进忽略session cookie  
–interface 使用指定网络接口/地址  
–krb4 使用指定安全级别的krb4  
-k/–insecure 允许不使用证书到SSL站点  
-K/–config 指定的配置文件读取  
-l/–list-only 列出ftp目录下的文件名称  
–limit-rate 设置传输速度  
–local-port 强制使用本地端口号  
-m/–max-time <seconds> 设置最大传输时间  
–max-redirs <num> 设置最大读取的目录数  
–max-filesize <bytes> 设置最大下载的文件总量  
-M/–manual 显示全手动  
-n/–netrc 从netrc文件中读取用户名和密码  
–netrc-optional 使用.netrc 或者URL来覆盖-n  
–ntlm 使用HTTP NTLM 身份验证  
-N/–no-buffer 禁用缓冲输出  
-o/–output 把输出写到该文件中  
-O/–remote-name 把输出写到该文件中,保留远程文件的文件名  
-p/–proxytunnel 使用HTTP代理  
–proxy-anyauth 选择任一代理身份验证方法  
–proxy-basic 在代理上使用基本身份验证  
–proxy-digest 在代理上使用数字身份验证  
–proxy-ntlm 在代理上使用ntlm身份验证  
-P/–ftp-port <address> 使用端口地址,而不是使用PASV  
-Q/–quote <cmd> 文件传输前,发送命令到服务器  
-r/–range <range> 检索来自HTTP/1.1或FTP服务器字节范围  
–range-file 读取(SSL)的随机文件  
-R/–remote-time 在本地生成文件时,保留远程文件时间  
–retry <num> 传输出现问题时,重试的次数  
–retry-delay <seconds> 传输出现问题时,设置重试间隔时间  
–retry-max-time <seconds> 传输出现问题时,设置最大重试时间  
-s/–silent 静音模式。不输出任何东西  
-S/–show-error 显示错误  
–socks4 <host[:port]> 用socks4代理给定主机和端口  
–socks5 <host[:port]> 用socks5代理给定主机和端口  
–stderr    
-t/–telnet-option <OPT=val> Telnet选项设置  
–trace <file> 对指定文件进行debug  
–trace-ascii <file> Like - -跟踪但没有hex输出  
–trace-time 跟踪/详细输出时,添加时间戳  
-T/–upload-file <file> 上传文件  
–url Spet URL to work with  
-u/–user <user[:password]> 设置服务器的用户和密码  
-U/–proxy-user <user[:password]> 设置代理用户名和密码  
-v/–verbose    
-V/–version 显示版本信息  
-w/–write-out [format] 什么输出完成后  
-x/–proxy <host[:port]> 在给定的端口上使用HTTP代理  
-X/–request <command> 指定什么命令  
-y/–speed-time 放弃限速所要的时间。默认为30  
-Y/–speed-limit 停止传输速度的限制,速度时间’秒  
-z/–time-cond 传送时间设置  
-0/–http1.0 使用HTTP 1.0  
-1/–tlsv1 使用TLSv1(SSL)  
-2/–sslv2 使用SSLv2的(SSL)  
-3/–sslv3 使用的SSLv3(SSL)  
–3p-quote like -Q for the source URL for 3rd party transfer  
–3p-url 使用url,进行第三方传送  
–3p-user 使用用户名和密码,进行第三方传送  
-4/–ipv4 使用IP4  
-6/–ipv6 使用IP6  
-#/–progress-bar 用进度条显示当前的传送状态  

常用实例:

1、常用请求

## 1、测试访问 get 请求
curl http://docs.zhangxiaocai.cn
curl https://docs.zhangxiaocai.cn

## get 请求获得的内容写到文件
curl -o home.html http://docs.zhangxiaocai.cn
curl http://docs.zhangxiaocai.cn > index.html

# POST 请求带参数
curl -X POST -d "param1=value1&param2=value2" http://localhost:8080/resource

# POST 请求带指定格式的参数 json
curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}' http://localhost:8080/resource

# PUT 请求
curl -X PUT -d "param1=value1&param2=value2" http://localhost:8080/resource

# DELETE 请求
curl -X DELETE http://localhost:8080/resource

# 带请求头的请求
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" http://localhost:8080/resource

2、下载文件

get 请求下载文件  -O  (大写O)
curl -O https://cdn.jsdelivr.net/gh/small-rose/small-rose.github.io/favicon.ico

# 断点续传下载
curl -C -O http://xxx.com/download/2025/something.tar.gz

# 分段下载
curl -r 0-100 -o file.part1 http://localhost:8080/resource/download/big_file.zip
curl -r 101-200 -o file.part1 http://localhost:8080/resource/download/big_file.zip
curl -r 201-300 -o file.part1 http://localhost:8080/resource/download/big_file.zip
cat file.part* > big_file.zip

#下载显示进度条
curl -# -O http://localhost:8080/resource/download/big_file.zip

3、模拟登录

# 3,模拟表单信息,模拟登录,保存cookie信息
curl -c ./cookie_c.txt -F log=admin -F pwd=****** http://localhost:8080/login

# 4,模拟表单信息,模拟登录,保存头信息
curl -D ./cookie_D.txt -F log=admin -F pwd=****** http://localhost:8080/login

-c(小写)产生的cookie和-D里面的cookie是不一样的。

4、其他

# -v 显示详细信息
curl -v http://example.com

# --header:允许你添加额外的 HTTP 头部
curl --header "X-My-Header: 123" http://example.com。

# --data-urlencode:用于发送 URL 编码的数据
curl --data-urlencode "comment=hello world" http://example.com

# --cookie:发送 cookie
curl --cookie "name=value" http://example.com

# --include 或 -i:包括 HTTP 头在输出中 
curl -i http://example.com。

# -e 伪造来源
url -e http://baidu.com http://localhost:8080/login

# --user-agent 添加代理
curl --user-agent "Mozilla/5.0" http://localhost:8080/login

# –referer
curl –referer http://www.baidu.com https://proxy.mimvp.com

# 使用--limit-rate限制curl的下载速度:
curl URL –limit-rate 50k

固定IP配置

vi /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV5_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=9cf4f495-18f1-4c56-80b5-d433c5273d37
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.80.81
GATEWAY=192.168.80.1
IPV6_PRIVACY=no
PREFIX=24
IPV4_FAILURE_FATAL=no

REERDNS=no
DNS1=192.168.80.1
DNS2=8.8.8.8
DNS3=223.6.6.6
DNS4=114.114.114.114

这个是网络配置参数:

  • BOOTPROTO=static 静态IP
  • BOOTPROTO=dhcp 动态IP
  • BOOTPROTO=none 无(不指定)

通常情况下是dhcp或者static,固定IP可以为 static或者none

  • ONBOOT :是否开机

重启网络即可

service network restart

备份原始官方源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

换源

# CentOS 6

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

# CentOS 7

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo    

# CentOS 8

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

刷新缓存

yum clean all  && yum makecache

更新系统

yum update

wget


-bash: wget: command not found的两种解决方法 wget 时提示 -bash:wget command not found,很明显没有安装wget软件包。一般linux最小化安装时,wget不会默认被安装。

可以通过以下两种方法来安装:

1、rpm 安装

rpm 下载源地址:http://mirrors.163.com/centos/6.2/os/x86_64/Packages/

下载wget的RPM包:http://mirrors.163.com/centos/6.2/os/x86_64/Packages/wget-1.12-1.4.el6.x86_64.rpm

rpm ivh wget-1.12-1.4.el6.x86_64.rpm 安装即可。

如果客户端用的是SecureCRT,linux下没装rzsz 包时,rz无法上传文件怎么办?我想到的是安装另一个SSH客户端:SSH Secure Shell。然后传到服务器上安装,这个比较费劲,所以推荐用第二种方法,不过如果yum包也没有安装的话,那就只能用这种方法了。

2、yum安装

yum -y install wget

3、离线安装

gcc安装

m4 安装

cd m4-1.4.13
# 配置编译环境
./configure –prefix=/usr/local
# 编译并安装
make && make install

[未完待续]

tree 安装

官网:http://mama.indstate.edu/users/ice/tree/

方法一,yum安装

yum install tree

方法二,源码安装

1.下载安装包,地址:http://mama.indstate.edu/users/ice/tree/

wget  http://mama.indstate.edu/users/ice/tree/src/tree-1.8.0.tgz

2.解压安装

# 解压
tar -zxvf tree-1.8.0.tgz

# 进入
cd tree-1.7.0

# 安装文件
make install

        
# 使用
tree
tree --version

# 显示目录深度3
tree -L 3
# 只显示目录不显示文件
tree -d -L 3

tree命令行参数:

-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用"?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

netstat 安装


centos7默认没netstat命令,需要安装

yum install net-tools 

fuser命令


用指定的文件或者文件系统显示进程进程号,默认情况下每一个文件名后会跟着一个字母来表示类型

fuser命令需要安装

yum install psmisc 

rzsz


lrzsz是一个unix通信套件提供的X,Y,和ZModem文件传输协议,可以用在windows与linux 系统之间的文件传输,体积小速度快。官网入口:https://ohse.de/uwe/software/lrzsz.html

1、在线安装

yum -y install lrzsz

上传命令

rz 

下载命令

sz log_web.log

2.离线安装

# 下载安装包 
wget http://down1.chinaunix.net/distfiles/lrzsz-0.12.20.tar.gz 
tar -zxvf lrzsz-0.12.20.tar.gz 
cd lrzsz-0.12.20 
# 编译 
./configure –prefix=/usr/local/lrzsz 
make 
make install 
# 建立软连接 
ln -s /usr/local/lrzsz/bin/lrz /usr/bin/rz 
ln -s /usr/local/lrzsz/bin/lsz /usr/bin/sz

系統监控

项目地址:https://github.com/sysstat/sysstat

安装

yum install sysstat

启用

systemctl enable sysstat  
systemctl start sysstat  

Firawalld

1、查看firewall服务状态

systemctl status firewalld

2、查看firewall的状态

firewall-cmd --state

3、开启、重启、关闭、firewalld.service服务

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp

# 开放80端口
firewall-cmd --permanent --add-port=80/tcp

# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

firewall-cmd --list-ports

D:\idea-Work\XianDai-TrunkNew\cm-web\web\pages

参数解释

1、firwall-cmd:是Linux提供的操作firewall的一个工具;

2、–permanent:表示设置为持久;

3、–add-port:标识添加的端口;

查看端口

用于查看某一端口的占用情况

lsof -i:端口号 ,

比如查看8000端口使用情况:

lsof -i:8000

通过PID查看端口号:

netstat -anop|grep pid 

查看进程

ps -ef | grep  xxx
ps aux | grep  xxx

ps -ef | grep $APP_NAME | grep -v grep |awk '{print $2}'

空间清理

1.查看空间占用

查系统空间占用

df
# 显示G单位
df -h 
#显示 M 单位
df -m

查当前目录下每个文件夹空间占用大小

du -sh */

2.定位最大文件目录

#进入根目录。
cd / 

#寻找当前目录,哪个文件夹占用空间最大
du -h --max-depth=1 

追踪某个目录大小

cd /

#也可以直接追踪某个目录大小
du -sh  /applog

找整个机器下所有大于100M的文件

#进入根目录。
cd / 

#查找整个机器下所有大于100M的文件并显示出完整的路径
find / -xdev -size +100M -exec ls -l {} \;

以G为单位列出目录大小

cd /
 
# 查找大文件
du -h | grep [0-9]G 

3.定位最大文件

# 将文件以从大到小顺序展现
ls –lhS 

4.确认文件未被占用

#确认删除文件是否被占用
/usr/sbin/lsof|grep deleted 

可用根据pid 杀死占用程序,或者正常暂时停止占用程序。

5.其他

若是大文件均清除后磁盘空间仍未释放,则还有一个可能,存在僵尸进程,就是系统文件删除后还存在进程活着的情况。

可通过命令:

lsof |grep delete

语句查看对应进程号,再使用kill杀掉对应进程即可

kill -9 进程号

空间清理

1.统计文件数量

查询当前目录下有多少个pdf文件

find . -type f -name "*.pdf" | wc -l