一、查找类
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、快速清空大文件
①、通过重定向到 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%左右.
-
lscpu
:CPU(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 隧道传输数据。
相关优势
- 安全性:使用 TLS/SSL 加密数据传输,保护数据不被窃听和篡改。
- 调试工具:提供详细的连接信息,便于诊断网络问题和服务器配置问题。
- 灵活性:可以通过命令行参数自定义连接设置,如指定协议版本、加密套件等。
类型与应用场景
类型:
- 单向认证:客户端验证服务器证书。
- 双向认证:客户端和服务器互相验证对方的证书。
应用场景:
- 测试 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编码) | 生成后立即设置权限: |
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编码) | 可自由分发 |