开发实用Linux命令

一、查找类

1、怎么查找opt目录下大于1M的文件

       find /opt -size +1M

附:find命令常用参数介绍[在众多文件或目录中查好需要的文件和目录]

参数如下:是从磁盘查找。

①:按照文件名称查询:

     find filename

     find -name filename(一般通配查好,查找filename*)

     find . -name filename(当前目录下查好指定的文件)

     find / -name filename(从根目录以及所有子目录下查找文件,一般我们不知道文件位于哪个目录下是查找)

②:按照文件大小查找:

     find 目录 -size n

            -n大小小于n的文件

            +n大小大与n的文件

            n大小等于n的文件

 ③:按照文件目录深度查好:  

     find /目录 -mindepth n(从指定的目录下的n级目录下查找)

二、过滤类

  grep过滤文件关键内容

    grep "关键字" 文件

语法:grep [options] PATTERN [FILE]

 ①:过滤关键字显示行号,不区分大小写

   grep -ni "关键字内容" 文件

 ②:查找文件过滤指定内容的行

   grep -v "过滤的内容" 文件

 ③:查找包含dddd,eeee,fffd的行,采用正则表达式

   grep -E "dddd|eeee|fffd" 文件

④:查找以d开头的行

   grep ^d 文件

⑤:查找以ddf开头且结尾的行

    grep ^ddf$ 文件

⑥:查找关键字,颜色展示,这样会展示关键字虽在行中的所有内容

    cat  文件 | grep -ni --color "关键字"-

⑦:只想打印匹配到的关键字【only】

    cat 文件 | grep -noi  "关键字"

⑧:展示匹配关键字的前后几行

    -A num :展示匹配行的后num行

    -B num :展示匹配行的前num行

    -C num: 展示匹配行的前后num行

    cat 文件 | grep -C 2 --color "关键字"

⑨:过滤多个条件

    cat log.txt | grep 条件一 | grep 条件二 | grep 条件三;

    grep 条件一 | grep 条件二 | grep 条件三 文件

    cat log.txt grep -E "条件一|条件二|条件三"

案例:过滤目录文件大小

    du -sh *| sort -rn | head -n 10

案例:过滤第四列内存使用率降序

    ps aux |sort -rn -k4 |awk '{print S1,S2,$3,$4}' | head -n 5

-n 按数值大小排序
-t 指定分隔符,没有指定时,以空白作为分隔符
-k 排序字段 如: -k1 (按第1个字段排序)   -k 1.2, 3.4 (按从第1个字段的第2个字符起,到第3个字段第4个字符止,进行排序)
-b 忽略每行开始的空格
-o 结果输出文件
-r 以相反顺序排序
-m 合并已经有序的文件,不排序
-f 忽略大小写
-d 排序时只按字母、数字或空格,忽略其它字符
-u 去除重复的行

  sort aa.txt |uniq -c |sort -rn【排序和统计降序】

  cat 2.txt |sort -n | uniq -c[打印2.txt的文件次数,只能处理重复的位置的重复]

  ls的列出文件目录.

选项作用
-a显示指定路径中的所有文件,包括隐藏文件
-l显示文件的详细信息,包括文件类型,权限,所属用户,所属用户组,文件大小,上一次修改时间等
-h文件大小以KBytes为单位显示
-S按照文件大小顺序显示,默认从大到小;若要从小到大,可使用-Sr

 ls -alhS【根据文件大小排序】

压缩文件搜索文件,支持多个文件搜索,支持文件多个压缩.

gunzip access_log.gz grep "/api" access_log gzip access_log

zgrep "/api" access_log.gz access_log_1.gz

zcat access.tar.gz | grep -a '/api' zgrep -a "/api" access.tar.gz

zcat  解压文件并将内容输出到标准输出
zcmp  解压文件并且 byte by byte 比较两个文件
zdiff 解压文件并且 line by line 比较两个文件
zgrep 解压文件并且根据正则搜索文件内容
ztest - Tests integrity of compressed files.
zupdate - Recompresses files to lzip format.

附录:10种grep的高级用法

第一种高级用法:精确匹配

grep命令的 -w 选项就派上用场了。它会精确匹配整个单词,而非单词的一部分

$ grep -w "magic" file.txt

第二种高级用法:忽略大小写

$ grep -i "linux" file.txt

第三种高级用法:反向匹配

有时候,我们想要查找不包含某个特定单词或短语的行。grep命令的 -v 选项可以帮助我们实现这一目标.

$ grep -v "error" file.txt

第四种高级用法:行号显示

当我们需要知道匹配内容所在的行号时,grep命令的 -n 选项非常有用。它就像是一位贴心的标记员,为你每一次成功的匹配都打上了行号。

grep -n "warning" file.txt

第五种高级用法:显示匹配上下文

grep -C 2 "keyword" file.txt

第六种高级用法:递归搜索

有时候,我们需要在目录及其子目录中递归搜索文件。grep命令的 -r 选项可以帮助我们实现这一目标

grep -r "pattern" directory/

第七种高级用法:统计匹配行数

有时候,我们只关心匹配行的数量而不关心具体内容。grep命令的 -c 选项可以帮助我们实现这一目标

grep -c "pattern" file.txt

第八种高级用法:使用正则表达式

正则表达式是一种强大的模式匹配工具,能够更灵活地定义搜索模式。grep命令支持使用正则表达式进行搜索

grep "^[A-Za-z]+$" file.txt

第九种高级用法:使用文件作为模式输入

有时候,我们需要在文件中提供多个模式,以便同时搜索它们。grep命令的 -f 选项可以帮助我们实现这个目标.

 grep -f patterns.txt file.txt

第十种高级用法:输出匹配结果到文件

有时候,我们希望将匹配的结果保存到一个文件中,以便后续处理。Shell命令的 > 重定向操作符可以帮助我们实现这一目标.

 grep "pattern" file.txt > output.txt

awk命令

awk 'pattern { action }' file

awk 'pattern { action }' file

# pattern 是匹配的模式,如正则表达式
# action 是匹配后进行的操作,如:打印,修改等
# file 要操作的文件,如果不指定文件,则从标准输入中读取
打印所有行数据
awk '{ print $0 }' file
打印指定的字段
awk '{ print $1, $3 }' file

# 打印每行的第一个和第三个字段
打印模式匹配的行
awk '/error/ { print $0 }' file

# 打印包含 error 文本的行
使用条件表达式
awk '$3 > 50 { print $1, $2 }' file

# 当第三个字段大于50时打印第一个和第二个字段
使用范围比较表达式
awk 'NR >= 5 && NR <= 10 { print $0 }' file

# NR表示行号
# 以上表示打印第五到第十行的内容
自定义字段分隔符
awk -F ',' '{ print $1, $2 }' file

# 此处指定分隔符为逗号

内建变量

  • $0:所有记录/全部内容

  • $1$1,...:第几个字段

  • NF:当前行的字段数

  • NR:行号

  • FS:字段分隔符

  • OFS:输出的字段分隔符

  • RS:记录分隔符/行分隔符,默认 \n

  • ORS:输出的记录分隔符/行分隔符

高级用法示例

打印行号
awk '{ print NR, $0 }' file
统计字段
awk '{ sum += $3 } END { print "Total:", sum }' file

# 统计每行第三个字段之和
替换字段
awk '{$2 = "REPLACED"; print $0 }' file

# 替换每行的第二个字段值为 REPLACED
打印模式匹配到的行数
awk '/pattern/ { count++ } END { print count }' file
格式化输出
awk '{ printf "Line %d: %s\n", NR, $0 }' file
通过管道处理标准输入
cat file | awk '{ print $1, $2 }'
awk 命令写到脚本里复用

新建 script.awk 文件,写入以下内容:

{ print $1, $NF }

使用 -f 执行脚本文件

awk -f script.awk file

三、网络类

①:lsof -i:指定端口【lsof(list open files)是一个列出当前系统打开文件的工具。】

【netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息】

②:netstat -anp| grep 指定端口

③:netstat -tunlp| grep 指定端口

四、常用类

常用参数如下:netstat.

netstat [选项]
 
-a或--all:显示所有连线中的Socket; 
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; 
-c或--continuous:持续列出网络状态; 
-C或--cache:显示路由器配置的快取信息; 
-e或--extend:显示网络其他相关信息; 
-F或--fib:显示FIB; 
-g或--groups:显示多重广播功能群组组员名单; 
-h或--help:在线帮助; 
-i或--interfaces:显示网络界面信息表单; 
-l或--listening:显示监控中的服务器的Socket; 
-M或--masquerade:显示伪装的网络连线; 
-n或--numeric:直接使用ip地址,而不通过域名服务器; 
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; 
-o或--timers:显示计时器; 
-p或--programs:显示正在使用Socket的程序识别码和程序名称; 
-r或--route:显示Routing Table; 
-s或--statistice:显示网络工作信息统计表; 
-t或--tcp:显示TCP传输协议的连线状况; 
-u或--udp:显示UDP传输协议的连线状况; 
-v或--verbose:显示指令执行过程; 
-V或--version:显示版本信息; 
-w或--raw:显示RAW传输协议的连线状况; 
-x或--unix:此参数的效果和指定"-A unix"参数相同; 
--ip或--inet:此参数的效果和指定"-A inet"参数相同。

1、查看指定行号的日志文件

①、sed输出指定的行号
cat temp.log | sed -n '200p' 
②、awk输出指定的行号
cat temp.log | awk 'NR==200'
③、先获取前面的200行,再取最后一行
cat temp.log | head -n 200 | tail -n1 

2、测试端口连通性

①、telnet ip port
ip是指测试主机的ip
port是指测试主机的端口
②、curl ip:port
ip是指测试主机的ip
port是指测试主机的端口
③、wget ip:port
wget探测端口
④、lsof -i:port
lsof 命令来查看某一端口是否开放,如果有显示说明已经开放了,如果没有显示说明没有开放

 3、Base64编码,Java实现和Python的RSA版本实现,openssl

编码:echo "StringBuffer" | openssl base64

解码:echo "U3RyaW5nQnVmZmVyCg=="|openssl base64 -d 

编码:echo StringBuffer | base64

解码:echo U3RyaW5nQnVmZmVyCg== |base64 -d

 Java版本Base64

import java.util.Base64;   
    /**
     * jdk版本
     */
    public static void getBase64ForJdk(){
        String str="AbstractClass";
        // Base64编码
        String encodeStr = new String(Base64.getEncoder().encode(str.getBytes(StandardCharsets.UTF_8)));
        System.out.println(encodeStr);
        // Base64解码
        String decodeStr = new String(Base64.getDecoder().decode(encodeStr.getBytes(StandardCharsets.UTF_8)));
        System.out.println(decodeStr);
    }
Apache Codec版本
import org.apache.commons.codec.binary.Base64;    
    /**
     * Apache Codec版本
     */
    public static void getBase64ForCodec(){
        String str="AbstractClass";
        // Base64编码
        String encodeStr=new String(Base64.encodeBase64(str.getBytes(StandardCharsets.UTF_8)));
        System.out.println(encodeStr);
        // Base64解码
        String decodeStr = new String(Base64.decodeBase64(encodeStr.getBytes(StandardCharsets.UTF_8)));
        System.out.println(decodeStr);
    }
Apache Tomcat版本
import org.apache.tomcat.util.codec.binary.Base64;    
    /**
     * Apache Tomcat版本
     */
    public static void getBase64ForTomcat(){
        String str="AbstractClass";
        // Base64编码
        String encodeStr=new String(Base64.encodeBase64(str.getBytes(StandardCharsets.UTF_8)));
        System.out.println(encodeStr);
        // Base64解码
        String decodeStr = new String(Base64.decodeBase64(encodeStr.getBytes(StandardCharsets.UTF_8)));
        System.out.println(decodeStr);
    }

有多种开源包实现的Base64编码算法.

MD5消息摘要算法实现

    public static String md5(String str){
        try {
            MessageDigest md5 = MessageDigest.getInstance(Constants.MD5);
            //加密后的字符串
            byte[] src = md5.digest(str.getBytes(StandardCharsets.UTF_8));
            return Base64.getEncoder().encodeToString(src);
        } catch (Exception e) {
            throw ExceptionUtils.mpe(e);
        }
    }

3、远程复制,远程服务器之前可以配置免密登录

 【sshpass::可以在命令行直接使用密码来进行远程连接和远程拉取文件

scp local_file remote_username@remote_ip:remote_folder
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 

 4、跳过证书校验下载文件

①、wget
# 跳过证书校验
wget https://img-home.csdnimg.cn/images/20201218055848.png --no-check-certificate
# 伪装成浏览器
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" https://img-home.csdnimg.cn/images/20201218055848.png
# 重命名
wget -O code.png https://img-home.csdnimg.cn/images/20201218055848.png
# 断点续传
wget -c https://img-home.csdnimg.cn/images/20201218055848.png
②、curl【可以指定使用具体的ssl协议,Nginx中的ssl协议中会有设置具体支持哪些tls1.0\1.1\1.2\1.3版本】
curl -k --tlsv1 -O https://192.168.100.58/uploads/835538633.jpeg

 curl验证http2.0,curl使用一个叫做nghttp2的库来提供http2帧层的支持。curl依赖于nghttp2 1.0以上版本

curl --version【curl查看是否支持http2.0】

 curl -k --http2 -v https://search.bilibili.com【验证是否开启http2.0】

磁盘文件空间
①、df -h
②、du -sh *
③、df -i

  curl -w诊断问题

通过CURL命令可以方便的查询各种http请求的问题,-w参数对于我们诊断问题非常重要,以下是-w参数对应的一些变量以及对应的解释:

url_effective 最终获取的url地址,尤其是当你指定给curl的地址存在301跳转,且通过-L继续追踪的情形。
http_code http状态码,如200成功,301转向,404未找到,500服务器错误等。(The numerical response code that was found in the last retrieved HTTP(S) or FTP(s) transfer. In 7.18.2 the alias response_code was added to show the same info.)
http_connect The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4)
time_total 总时间,按秒计。精确到小数点后三位。 (The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.)
time_namelookup DNS解析时间,从请求开始到DNS解析完毕所用时间。(The time, in seconds, it took from the start until the name resolving was completed.)
time_connect 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去前边time_namelookup时间。以下同理,不再赘述。(The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.)
time_appconnect 连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间。(The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed. (Added in 7.19.0))
time_pretransfer 从开始到准备传输的时间。(The time, in seconds, it took from the start until the file transfer was just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.)
time_redirect 重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间。(The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before the final transaction was started. time_redirect shows the complete execution time for multiple redirections. (Added in 7.12.3))
time_starttransfer 开始传输时间。在发出请求之后,Web 服务器返回数据的第一个字节所用的时间(The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes time_pretransfer and also the time the server needed to calculate the result.)
size_download 下载大小。(The total amount of bytes that were downloaded.)
size_upload 上传大小。(The total amount of bytes that were uploaded.) 
size_header 下载的header的大小(The total amount of bytes of the downloaded headers.)
size_request 请求的大小。(The total amount of bytes that were sent in the HTTP request.)
speed_download 下载速度,单位-字节每秒。(The average download speed that curl measured for the complete download. Bytes per second.)
speed_upload 上传速度,单位-字节每秒。(The average upload speed that curl measured for the complete upload. Bytes per second.)
content_type 就是content-Type,不用多说了,这是一个访问我博客首页返回的结果示例(text/html; charset=UTF-8);(The Content-Type of the requested document, if there was any.)
num_connects 最近的的一次传输中创建的连接数目。Number of new connects made in the recent transfer. (Added in 7.12.3)
num_redirects 在请求中跳转的次数。Number of redirects that were followed in the request. (Added in 7.12.3)
redirect_url When a HTTP request was made without -L to follow redirects, this variable will show the actual URL a redirect would take you to. (Added in 7.18.2)
ftp_entry_path 当连接到远程的ftp服务器时的初始路径。The initial path libcurl ended up in when logging on to the remote FTP server. (Added in 7.15.4)
ssl_verify_result ssl认证结果,返回0表示认证成功。( The result of the SSL peer certificate verification that was requested. 0 means the verification was successful. (Added in 7.19.0))
curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_nslookup:%{time_namelookup}\ntime_total: %{time_total}\n" "https://www.baidu.com"

总请求时间:0.064s,网络连接耗时:0.013s,dns解析耗时:0.001s,网络传输:0.064s

5、快速清空大文件

  Linux 下清空或删除大文件内容的 5 种方法

 ①、通过重定向到 Null 来清空文件内容
 > access.log 
 ②、使用 ‘true’ 命令重定向来清空文件
 : > access.log
 true > access.log
 ③、使用 cat/cp/dd 实用工具及 /dev/null 设备来清空文件
 cat /dev/null > access.log
 cp /dev/null access.log
 ④、使用 echo 命令清空文件
 echo "" > access.log
 echo > access.log
 ⑤、使用 truncate 命令来清空文件内容
 truncate -s 0 access.log

6、Linux服务器信息

查看服务器信息:

uname -a

执行后,会输出当前系统的内核版本号、主机名、内核发行版号等信息。其中,-a参数表示显示所有信息。

lsb_release

cat /etc/issue

cat /etc/os-release

hostnamectl

cat /proc/version

dmesg | grep "Linux version"

cat /etc/redhat-release

7、gz压缩

1、压缩文件
gzip -c test.txt >test.txt.gz
2、压缩目录
gzip -r dirname
gzip -r test
3、解压缩
gzip -d test.txt.gz

8、利用率

htop命令,CPU/内存使用率

yum install htop -y

htop命令 

CPU利用率

内存利用率

负载情况,看CPU的忙碌情况,一般是CPU核数的75%左右.

  • lscpuCPU(s): 行对应的CPU 核心数

  • nproc:会直接输出CPU的核心数字

  • top -1:也能显示有几个CPU核心数

  • 1分钟负载:显示过去一分钟的平均负载。

  • 5分钟负载:显示过去5分钟的平均负载。

  • 15分钟负载:显示过去15分钟的平均负载。

  • 负载值 > CPU 核心数:表示有更多进程在等待 CPU 资源,而不是正在执行任务,系统的 CPU 可能已经被过度使用。

  • 负载值 ≈ CPU 核心数:表示系统此时可能开始出现延迟或响应变慢。

  • 负载值 >> CPU 核心数:负载大大高于核心数,系统会出现很严重的卡顿现象。

网络使用情况:

yum install nload -y

 nload可以选择对应的网卡

参数指标说明:

  • Curr:当前网速

  • Avg:平均网速

  • Min:最小网速

  • Max:最大网速

  • Ttl:总流量

使用iostat查看磁盘I/O

yum install sysstat -y

输入iostat命令后,磁盘总体读写情况如上所示。磁盘负载主要关注2个指标:%idle,%util

%idle:表示CPU除去等待磁盘I/O以外的空闲时间百分比,这个指标应该要保证在70%以上
%util:该设备用于I/O操作的时间百分比,这个指标需要保证在70%以下,当到达100%时表示已经满负载。为了降低磁盘负载,可以采用性能更高的磁盘(OSD,PCIE)或者降低磁盘的操作频率(异步写、合并写)

五、实战类

1、查找并移动文件:使用find命令查找当前目录下所有以.tar结尾的文件并移动到指定目录。

find . -name "*.tar" -exec mv {} /backup/ ;

2、批量解压文件:批量解压当前目录下所有以.zip结尾的文件到指定目录。

for i in $(find . -name "*.zip" -type f); do unzip -d /data/www/img/ $i; done

 3、sed文本处理:使用sed命令进行文本处理,如添加、删除或替换文本。

sed -i 's/^.//g' test.txt # 去掉行首的点字符

 4、目录存在性检查:判断某个目录是否存在,不存在则新建,存在则打印信息。

if [ ! -d /data/backup/ ]; then mkdir -p /data/backup/; else echo "Directory already exists."; fi

 5、磁盘空间监控:监控Linux磁盘根分区,如果空间使用率大于等于90%,则发送邮件给系统管理员。

df -h | sed -n '//$/p' | awk '{print $5}' | awk -F"%" '{print $1}' | while read percent; if [ "$percent" -ge 90 ]; then echo "Disk space is above 90%, alerting admin." | mail -s "Disk Alert" admin@example.com; fi; done

6、日志分析:统计Nginx访问日志,找出访问量排在前20的IP地址。

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20

 7、网络抓包:使用tcpdump进行网络抓包,分析网络流量。

tcpdump -nn host 192.168.1.1 and port 80

 8、常用命令统计:显示最常用的20条命令,帮助快速回顾常用操作。

history | awk '{print $2}' | sort | uniq -c | sort -nr | head -20

9、 文件管理:查找并删除特定时间前创建的.log文件,释放磁盘空间。

find . -mtime +3 -name "*.log" -exec rm -rf {} \;

 10、防火墙配置:编写防火墙配置脚本,只允许远程主机访问本机的80端口。

iptables -F iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -j REJECT

11、资源监控类

# 查看所有用户的打开文件
lsof

# 查看特定用户的打开文件
lsof -u username

# 查看特定端口占用情况
lsof -i:3306

# 查看某进程占用的文件
lsof -p 12345

# 显示删除但仍被占用的文件
lsof | grep deleted

六、创建类

1、使用 mkdir 创建多个文件夹

mkdir -p {dev,test,prod}/{backend,frontend}

下面是对这个命令的详细解释:

  • -p 标志告诉 mkdir 根据需要创建父目录(如果父目录不存在就创建)。

  • 大括号{}允许你指定多个选项,mkdir 会自动组合它们。

  • 第一组{dev,test,prod}创建不同环境的目录。

  • 第二组{backend,frontend}创建不同服务的目录。

当这个命令运行时,会创建以下结构的文件夹:

创建目录结果如下:

dev/ backend/ frontend/ test/ backend/ frontend/ prod/ backend/ frontend/ 

 2、使用 touch 创建多个文件

假设你需要为一系列测试用例创建 100 个文件,比如 test1.txt、test2.txt,一直到 test100.txt。使用单个 touch 命令来做这件事如下所示:

touch test1.txt
touch test2.txt
touch test3.txt
...
touch test100.txt

 可以想象,这既繁琐又耗时。你可以使用 touch 命令结合大括号{}中的数字范围一次性快速创建多个文件:

touch test{1..100}.txt

通过在大括号{1..100}中添加数字范围,可以创建编号从 1 到 100 的文件。

七、网络类

1、netstat 全称是:network statistics,是一个用于监控、排除网络连接故障、路由表的命令行工具,它提供关于网络统计和 socket 连接的详细信息。

显示所有连接

netstat -a

# 显示所有活动的连接和监听的端口

仅显示监听的端口

netstat -l

仅显示 TCP 连接

netstat -t

仅显示 UDP 连接

netstat -u

合并多个选项

netstat -tunlp
# -t:TCP
# -u:UDP
# -n:数字地址
# -l:监听的端口
# -p:PID和进程名称

2、ss 全称 Socket Statistics,是一个用于探究 Linux 上的套接字和网络连接的强大实用程序,它被用来替代老版的 netstat ,提供更快、更详细的信息输出。

 查看所有 sockets

ss -a

# 显示所有监听和未监听的sockets

显示监听的 sockets

ss -l

# 输出主动等待连接的服务

显示包含进程的信息

ss -p

# 显示进程ID和进程名称

显示摘要统计信息

ss -s

# 提供套接字使用情况的摘要,包括打开和已建立的连接数

  使用openssl s_client手动通过HTTPS隧道拉取数据

OpenSSL 是一个开源的工具包,用于传输层安全(TLS)和安全套接字层(SSL)协议。它提供了丰富的加密和解密功能,以及用于测试和调试网络连接的工具。

s_client 是 OpenSSL 工具包中的一个命令行工具,用于创建一个到远程服务器的安全连接,并显示连接的详细信息。它可以用来测试 HTTPS 服务器的配置,查看证书链,以及通过 HTTPS 隧道传输数据。

相关优势

  1. 安全性:使用 TLS/SSL 加密数据传输,保护数据不被窃听和篡改。
  2. 调试工具:提供详细的连接信息,便于诊断网络问题和服务器配置问题。
  3. 灵活性:可以通过命令行参数自定义连接设置,如指定协议版本、加密套件等。

类型与应用场景

类型

  • 单向认证:客户端验证服务器证书。
  • 双向认证:客户端和服务器互相验证对方的证书。

应用场景

  • 测试 HTTPS 服务器配置:确保服务器正确配置了 SSL/TLS。
  • 诊断网络问题:检查证书链是否完整,是否存在中间人攻击。
  • 数据传输:通过 HTTPS 隧道安全地传输敏感数据。

  • 检查服务器证书是否有效,并确保证书链完整。
  • 使用 -CAfile 参数指定信任的 CA 证书文件。
openssl s_client -connect example.com:443 -servername example.com -CAfile /path/to/ca-bundle.crt
  • 检查网络连接是否正常。
  • 使用 -timeout 参数设置连接超时时间。
openssl s_client -connect example.com:443 -servername example.com -timeout 10
  • 使用 -cipher 参数指定支持的加密套件。
openssl s_client -connect example.com:443 -servername example.com -cipher "ECDHE-RSA-AES256-GCM-SHA384"

八、文件类

1. 列出文件和目录:最基本的ls命令会按字母顺序列出当前目录下的所有文件和目录。

$ ls
document.txt  picture.jpg  video.mp4

2. 长格式列出文件:使用-l选项可以详细列出文件的权限、所有者、大小和修改时间等信息。

$ ls -l
-rwxr-xr-x 1 user group 1234 Jan 1 12:00 document.txt
-rw-r--r-- 1 user group 2048 Jan 1 12:05 picture.jpg
-rwxr-xr-x 1 user group 1024 Jan 1 12:10 video.mp4

3. 显示隐藏文件:-a选项可以显示包括隐藏文件在内的所有文件。

$ ls -a
.  ..  .document.txt  .hiddenfile  picture.jpg  video.mp4

4. 人类可读的文件大小:-lh选项以KB、MB、GB等人类可读的格式显示文件大小。

$ ls -lh
-rwxr-xr-x 1 user group 1.2K Jan 1 12:00 document.txt
-rw-r--r-- 1 user group 2.0K Jan 1 12:05 picture.jpg
-rwxr-xr-x 1 user group 1.0K Jan 1 12:10 video.mp4

5. 区分文件和目录:-F选项在目录后添加斜杠,在可执行文件后添加星号,以区分它们。

$ ls -F
document.txt  picture.jpg  video.mp4*  dir/

6. 递归列出文件:-R选项递归地列出所有子目录中的文件。

$ ls -R
dir:
file1  file2  subdir1

subdir1:
file3

7. 按修改时间排序:-lt选项按修改时间排序文件,最新的文件会显示在最前面。

$ ls -lt
-rw-r--r-- 1 user group 2048 Jan 1 12:05 picture.jpg
-rwxr-xr-x 1 user group 1234 Jan 1 12:00 document.txt
-rwxr-xr-x 1 user group 1024 Jan 1 12:10 video.mp4

8. 按文件大小排序:-lS选项按文件大小排序,最大的文件会显示在最前面。

$ ls -lS
-rw-r--r-- 1 user group 2048 Jan 1 12:05 picture.jpg
-rwxr-xr-x 1 user group 1234 Jan 1 12:00 document.txt
-rwxr-xr-x 1 user group 1024 Jan 1 12:10 video.mp4

九、开机信息类

1、无论是系统启动过程中,还是系统运行过程中,只要是内核产生的信息,都会被存储在系统缓冲区中,如果开机时来不及查看相关信息,可以使用 dmesg 命令将信息调出,此命令常用于查看系统的硬件信息。或者查询/var/log/ 目录中的 dmesg 文件进行查看。

十、OpenSSL类

openssl命令生成私钥、证书签名请求、CA证书的命令和相关参数的解释。其中包含了各参数的名称、作用、技术细节和安全建议。

  • CA私钥: 相当于加密时的密码,或者部门盖章。

  • 证书签名请求: 相当于申请表,在获取CA证书后就失效。

  • CA证书: 相当于颁发的证件。

1 、生成CA私钥

openssl genrsa -out ca-key.pem 4096

参数

作用

技术细节

安全建议

genrsa

生成RSA私钥

使用RSA算法(非对称加密)

优先选择RSA 4096或ECC 256+

-out ca-key.pem

指定私钥输出文件

PEM格式(Base64编码)

生成后立即设置权限:chmod 600 ca-key.pem

4096

密钥长度

2048位是底线,4096位更安全

更长密钥更安全但性能更低


2、生成CSR(证书签名请求)

openssl req -new -key ca-key.pem -out ca-csr.pem

参数

作用

技术细节

交互说明

req

处理证书请求

遵循PKCS#10标准

-

-new

创建新CSR

生成新的公钥对(从私钥派生)

需要输入身份信息

-key ca-key.pem

指定签名私钥

用该私钥对CSR进行签名

确保私钥文件路径正确

-out ca-csr.pem

输出CSR文件

包含公钥+身份信息(不含私钥)

可临时保存,用后删除

交互流程示例(执行命令后会提示输入):

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:My CA Inc.
Organizational Unit Name (eg, section) []:Security
Common Name (eg, your name or your server's hostname) []:My Root CA
Email Address []:admin@myca.com

3、自签名生成CA证书

openssl x509 -req -days 3650 -in ca-csr.pem -signkey ca-key.pem -out ca-cert.pem

参数

作用

技术细节

关键注意事项

x509

X.509证书操作

遵循RFC 5280标准

-

-req

输入是CSR文件

而非直接生成证书

必须与CSR匹配

-days 3650

证书有效期

10年(3650天)

CA证书通常设较长有效期

-in ca-csr.pem

指定输入的CSR

提取公钥和身份信息

确保与私钥对应

-signkey ca-key.pem

用私钥自签名

使证书具备权威性

绝对不要泄露此私钥
-out ca-cert.pem

输出证书文件

PEM格式(Base64编码)

可自由分发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道之简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值