基础命令
date
# unix 时间戳
date +%s
# 时间戳日期转换
[root@allinone ~]# date -d @1674108177 +"%F %H:%m%S"
2023-01-19 14:0157
[root@allinone ~]# date -d "2023-01-19 14:01:57" +%s
1674108117
# 查看时区
[root@allinone ~]# date -R
Fri, 07 Apr 2023 12:17:09 +0800
# 设置时区
[root@allinone ~]# export TZ=Americas
[root@allinone ~]# echo $TZ
Americas
[root@allinone ~]# date -R
Fri, 07 Apr 2023 04:13:29 +0000
[root@allinone ~]# export TZ='Asia/Shanghai'
[root@allinone ~]# date -R
Fri, 07 Apr 2023 12:14:09 +0800
# 设置时区永久生效
ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
yum
# 查询包信息
yum info lrzsz
# 列出所有可以用的版本
yum search --showduplicates docker
# 安装软件
yum install -y lrzsz
yum localinstall -y lrzsz
# 卸载软件
yum remove -y lrzsz
rpm
# 无法 rpm -ivh 无法安装rpm 的依赖
rpm -ivh *.rpm
rpm -qa lrzsz
rpm -ql lrzsz
rpm -e --nodeps `rpm -qa|grep ceph`
source
source /etc/profile
getent
# grep ^root /etc/passwd
getent passwd root
read
-p 指定提示符
-t 指定超时时间
-s 隐藏输入内容
-u 读取文件描述符
-n 读取指定字符后自动回车 例如: read -n 1 -p "将在你输入第一个字符后自动回车:"
REPLY 默认接受键盘的输入的变量名
#read -t 30 -p "please input firstname:" firstname
#echo $firstname
#read -t 30 -p "please input firstname:"
#echo $REPLY
问题:如下格式的文件内容
hosts="192.168.0.1 host1,192.168.0.2 host2"
需求:转换成数组
echo $hosts|awk -F ',' '{for(i=1;i<=NF;i++){H[$i]}}'
# -r:这个选项使 read 命令在读取时不进行反斜杠转义处理,即它将反斜杠视为普通字符。
# -a:这个选项告诉 read 将输入读取为数组
# <<<:这是 Bash 的 here string 操作符,它允许你将文本作为命令的输入。
IFS=",";read -r -a H <<< "$hosts"
IFS=""
问题:如下格式的文件内容
cat <<EOF
192.168.0.1 host1
192.168.0.2 host2
EOF
需求:转换成数组
readarray -t H <<EOF
192.168.0.1 host1
192.168.0.2 host2
EOF
# < <(echo $hosts):这部分是 process substitution(进程替换)的用法。进程替换允许你将一个命令的输出用作另一个命令的输入,就像文件一样。这里 < <() 创建了一个从 echo $hosts 命令的输出读取的"文件"
readarray -t H < <(echo -e "192.168.0.1 host1\n192.168.0.2 host2")
stat
[root@master prometheus]# stat -c %A `which curl`
-rwxr-xr-x
[root@master prometheus]# stat -c %a `which curl`
755
[root@tencent-sh ~]# stat -c %s /etc/services
670293
echo
echo -e
转义
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
printf
printf "%s\n" {1..20}
printf "%10s\n" {1..20}
printf "%-10s\n" {1..20}
printf "%2.2f\n" {1..20}
printf "%2d\n" {1..20}
printf "(%d)\n" {1..20}
printf的优势就在于,可以用格式替换符,帮我们处理一长串的str
替换符号
格式替换符
名称 含义
%s 字符串
%f 浮点格式
%b 对应的参数包含转义字符时,对应的转义字符会被转义
%c ASCII字符,显示对应参数的第一个字符
%d,%i 十进制整数
%o 不带正负号的八进制值
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,用a到f表示10至15
%X 不带正负号的十六进制值,用A到F表示10至15
%% 表示‘%’本身
转义字符
名称 含义
\a 警告字符,常为ASCII的BEL字符
\b 后退
\c 不显示输出结果中任何结尾的换行字符(%b格式下的参数字符串依然有效)
\f 换页(formfeed)
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\\ “\”本身
\ddd 表示1到3位数八进制值得字符串,仅在字符格式串中有效
\0ddd 表示1到3位数八进制值得字符串
修饰符
参数 含义
%7s 7就代表当前替换符对应的输出长度为7个字符宽,不足补齐,超出也正常显示
%-7s “-”,表示左对齐,不加时,是右对齐
%+5d 正数会自动变为+num
%12.3f “.3”表示保留小数点后三位,%f默认是小数点后6位
%12.5d “.5”表示整数的长度,不足用0补齐
tail
tail -100f /var/log/messages
tail -F /var/log/messages
tailf
head
sort
example
sort 1.txt 对文件内容进行默认排序
sort -r 1.txt 对文件进行逆向排序
sort -u 1.txt 排序并合并1.txt中相同内容
sort 1.txt >2.txt 排序内容输出到2.txt中
cat 1.txt 2.txt|sort
cat 1.txt 2.txt|sort >3.txt 将1.txt和2.txt文件合并后排序输出到3.txt中
sort -n filename 按数字排序
sort -M filename 按月份排序
sort -t ":" -k 3 -n /etc/passwd 按照uid排序
uniq
uniq 3.txt 显示文件
uniq -d 3.txt -d只显示重复行
uniq -u 3.txt -u显示不重复的内容
uniq -c 3.txt -c显示出现的次数
wc
-L, --max-line-length
print the length of the longest line 文件中最长一行的字符数
wc -w 3.txt 显示字数
wc -l 3.txt 显示行数
wc -c 3.txt 显示字节数
ps -ef|grep ssh|wc -l (统计出有多少行的ssh进程存在)
cat
cat -n 显示行号
cat -b
cat -A
cat >>1.log<<EOF
EOF
less -N 显示行号
tac
tee
date|tee 1.log
date|tee -a 1.log
cat 1.log
tee >>1.log<<EOF
EOF
seq
语法 命令格式seq [OPTION]... FIRST INCREMENT LAST
从2开始到10结尾步长为1 seq 2 10
从2开始到10结尾步长为3 seq 2 3 10
从2开始到10结尾步长为3。设置等宽 seq -w 2 3 10
从2开始到10结尾步长为3。设置等宽,修改分隔符为空格 seq -s " " -w 2 3 10
cut
语法: cut OPTION... [FILE]
option
-c, --characters=LIST
-d --delimiter=DELIM
-f, --fields=LIST
example
echo "http://127.0.0.1/#/zh-cn/bash"|cut -c 1-4,8-10
#1- 表示从第一个字符到结尾
#-5 表示从第一个字符到第5个
echo "http://127.0.0.1/#/zh-cn/bash"|cut -c 1-
echo "http://127.0.0.1/#/zh-cn/bash"|cut -d '/' -f1,2,3
tr
translate or delete characters
删除 echo {a..z}{1..10}|tr -d [0-9]
替换 echo {a..z}{1..10}|tr [a-z] [A-Z]
find
find / -type f -name curl -or -name wget -perm 755
find /var/log/ -type f -mtime +7|xargs rm -f
find /etc -name "host*"
find /etc -name "host*" -print
find /etc -name "host*" -print0
# 查找时排除指定文件夹./rules_file
find . -path "./rules_file" -prune -o -print
find /etc -user root
find /home -nouser
find /apps -group gem
find / -nogroup
[!]--maxdepth levels
[!]-name
-o or 或
-a and
-mtime +-7
-ctime +-7
-atime +-7
-perm
[!]-type
b block mknod 创建块设备
c character
d directory mkdir 创建目录
p named pipe (FIFO)
f regular file touch 创建普通文件 file 查看普通文件类型
l symbolic link; ln
s socket
D door (Solaris)
expr
'STRING : REGEX'
执行模式匹配。两端参数会转换为字符格式,且第二个参数被视为正则表达式(GNU基本正则),它默认会隐含前缀"^"。随后将第一个参数和正则模式做匹配。
如果匹配成功,且REGEX使用了'\('和'\)',则此表达式返回匹配到的,如果未使用'\('和'\)',则返回匹配的字符数。
如果匹配失败,如果REGEX中使用了'\('和'\)',则此表达式返回空字符串,否则返回为0。
只有第一个'\(...\)'会引用返回的值;其余的'\(...\)'只在正则表达式分组时有意义。
在正则表达式中,'\+','\?'和'\|'分表代表匹配一个或多个,0个或1个以及两端任选其一的意思
[root@allinone ~]# expr "423-46-7" : "\([0-9]\{,3\}-[0-9]\{,3\}-[0-9]\{,3\}\)"
423-46-7
[root@allinone ~]# expr "423-46-7" : "[0-9]\{,3\}-[0-9]\{,3\}-[0-9]\{,3\}"
8
返回字符串长度
[root@allinone ~]# expr length "zhangshan"
9
touch
mkdir
mktemp
创建临时的文件:`mktemp`
创建临时的命名文件: `mktemp -t test.XXXXXXXXXX`
创建一个临时目录 `mktemp -d`
创建一个临时命名目录 `mktemp -d test.XXXXXXXXXX`
install
base64
base64加密 echo "123"|bash64
base64解码 echo $(echo 123|base64)|base64 -d
crontab
crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。
特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。
# 编辑后的文件存放位置/var/spool/cron/root
echo "*/5 * * * * echo 1 >/dev/null 2>&1"/var/spool/cron/root
echo "10/5 * * * * echo 1 >/dev/null 2>&1"/var/spool/cron/root
echo "*/5 23,24 * * * echo 1 >/dev/null 2>&1"/var/spool/cron/root
echo "*/5 20-24 * * * echo 1 >/dev/null 2>&1"/var/spool/cron/root
crontab -e
crontab -l
crontab -e -u root
at
curl
curl 是向服务端发送和接收数据的工具。
支持的协议(DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP,LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP)
-k
允许自签证书
--cacert
指定ca
--cert
指定公钥
--key
指定私钥
curl -k --cacert /etc/kubernetes/pki/ca.crt --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt --key /etc/kubernetes/pki/apiserver-kubelet-client.key https://127.0.0.1:10250/metrics
# 模拟浏览器User-Agent
curl -H "User-Agent: Chrome" http://www.baidu.com
#
curl -H "Host: www.baidu.com" http://nginx代理
# -X 参数
# -g, --globoff 允许url中存在 {} [] 等特殊字符
# -d pos方法传递的数据
curl -g -X GET http://47.113.100.31:9100/metrics?collect[]=cpu
curl -X POST http://172.16.100.10:8060/dingtalk/webhook1/send -H 'content-type: application/json' -d '{"password":"123"}'
# -w, --write-out 定义输出哪些http response
curl -o /dev/null -s -w "%{http_code}" baidu.com
200
# 下载文件
# -f, --fail 如果curl失败时不显示错误输出,主要用于书写脚本
# -s, --silent 静默
# -L, --location 如果站定已经搬迁,支持重定向
curl -fs www.baidu.com
curl -L www.baidu.com
# 返回服务器头信息
curl -I www.baidu.com
-m --max-time
整个请求的最大时长
要使用 curl 命令下载文件并显示进度条,你可以使用 -# 或 --progress-bar 选项来替代默认的进度指示器。这会显示一个简洁的进度条而不是详细的统计数据。如果你想看到详细的进度信息,可以使用 -v 或 --verbose 选项。
curl -# -o example.zip http://example.com/example.zip
wget
dig
dig example.com +trace
dig example.com +debug
mount
命令 | 参数 | 注释 |
---|---|---|
mount | 查看所有系统的挂载 | |
mount | -a | 重新挂载/etc/fstab中的挂载 |
-o | mount -o loop 挂载一个文件 mount -o ro 以只读的方式挂载 |
showmount
showmount
解释:显示nfs服务端挂载信息
【参数】
-a --all 显示已经挂载的nfs目录和客户端IP
-e --exports 显示NFS服务端已经创建的共享
【例子】
showmount -e localhost
/etc/exports
解释:NFS系统文件配置
【参数】
rw 读写 默认不允许
ro 只读
sync 实时同步
async 异步同步
root_squash root用户匿名访问
no_root_squash root用户不匿名
all_squash 所有用户匿名访问
anonuid 匿名用户uid
anongid 匿名用户gid
xargs
举例:
[root@test /]# cat 1.txt
a b c d e f
a b c d e f
a b c d e f
a b c d e f
[root@test /]# cat 1.txt|xargs 对文本格式的重定向
a b c d e f a b c d e f a b c d e f a b c d e f
[root@test /]# cat 1.txt|xargs -n6 每行6个重排
a b c d e f
a b c d e f
a b c d e f
a b c d e f
[root@test /]# cat 1.txt|xargs|sort >2.txt 对文本格式重定向后默认排序输出到2.txt
a b c d e f a b c d e f a b c d e f a b c d e f
举例:
[root@test /]# cat 2.txt
a b ,c d e f a b ,c d e f a b ,c d e f a b ,c d e f
[root@test /]# cat 2.txt|xargs -d"," -n2 以,为分隔符每行两个域重排
a b c d e f a b
c d e f a b c d e f a b
c d e f
find /tmp -name 1.log -type f -print0|xargs -0 rm -f 可用于处理文件中含有空格换行的文件
find ./ -name "*.log" -type f -print0|xargs -0 rm -f 用于日志的删除
find -type f -name "*.jpg" -print|xargs tar zcvf jpg.tar.gz 压缩所有图片文件
cat url-list.txt|xargs wget -c
kill
kill -l 查询所有信号量
kill -s HUP 3940
kill -0 3940
kill -15
**killall **
tar
option
-v, --verbose 显示过程
-f --file
-c --creat
-z, --gzip gzip压缩方式
-j, --bzip2 bizp压缩方式
-x --extract 取出
-C, --directory DIR 指定解压路径
-t, --list 显示压缩文件列表
--exclude= 压缩但不包含否个文件
-X, --exclude-from FILE 用文件列表的方式排除不需要打包的文件
-Z, --compress, --uncompress 调用compress完成压缩
-N, --after-date DATE, --newer DATE 打包比指定日期新的文件,用于增量打包
-p, --same-permissions, --preserve-permissions 保持属性
extract all protection information
-P, --absolute-names 保存根目录的 /
don't strip leading '/'s from file names
example
压缩文件 :tar zcvf test.tar.bz /etc
tar jcvf test.tar.gz /etc
tar zcvf test.tar.gz /etc --exclude=1.txt,2
# -X ,--exclude-from file
tar zcvf test.tar.gz /etc --exclude-from=1.txt
解压文件 : tar zxvf test.tar.gz
tar jxcf test.tar.bz
tar xf test.tar.gz
tar xf test.tar.gz -C /home 解压到指定目录
查看压缩文件列表:
tar tf text.tar.gz
dumpe2fs
dump ext2/ext3/ext4 的文件系统信息,xfs 文件格式待整理
# 磁盘
[root@tencent-sh ~]# dumpe2fs /dev/vda1 |grep -i "inode size"
dumpe2fs 1.42.9 (28-Dec-2013)
Inode size: 256
[root@tencent-sh ~]# dumpe2fs /dev/vda1 |grep -i "block size"
dumpe2fs 1.42.9 (28-Dec-2013)
Block size: 4096
grep
grep -c "word" filename 统计有多少行包含"word"
grep -E
grep -v
grep -o
ln
语法:ln [OPTION]src dest
example
ln -svf /etc/hosts /tmp/hosts
nl
语法:nl [OPTION] file
example
# 显示行号
nl /etc/hosts
hostname
hostname -I
df
df -hi 查看磁盘空间
du
du -sh 列出文件的总大小
ntpdate
在centos6 中我们经常使用的时间同步命令
timedatectl set-timezone Asia/Shanghai
date -s "12/12/2010 15:40:30“
hwclock -w
*/5 * * * * /usr/sbin/ntpdate 10.0.76.177 >/dev/null 2>&1
chronyd
cfssl
下载地址
# cfssl 生成证书
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/bin/cfssl
# cfssl-json 证书格式化成文件
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/bin/cfssl-json
# cfss-certinfo 查看证书的信息,发证机构,证书有效期
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/bin/cfssl-certinfo
cfssl-certinfo -cert file
cfssl-certinfo -domain domain_name
cfssl-certinfo -domain pinduoduo.com
cfssl certinfo -domain jd.com
cfssl-certinfo -cert apiserver.pem
cfssl-certinfo -domain dashboard.od.com
openssl
SSL: Secure Socket Layer(安全套接层协议)
TLS: Transport Layer Security(传输层安全协议)
加密算法
- RSA算法是一个广泛使用的公钥算法。其密钥包括公钥和私钥。它能用于数字签名、身份认证以及密钥交换。RSA密钥长度一般使用1024位或者更高。
- DSA (Digital Signature Algorithm)算法是一种公钥算法.
功能
- 证书签发
- 文件加密
- 数字签名
- 生成随机数
证书签发
#自签CA
openssl genrsa -out caKey.pem 2048
openssl req -new -key caKey.pem -out ca.csr -subj "/C=CN/ST=Gd/L=SZ/O=od.com/CN=harbor.od.com"
openssl x509 -req -in ca.csr -out ca-cert.pem -signkey caKey.pem -days 3650
#签署应用key和crt
# 1)用户生成自己的私钥;
# genrsa Generation of DSA Private Key
# gendsa Generation of DSA Private Key
openssl genrsa -out serverkey.pem 2048
# 2)构造证书申请文件
openssl req -new -key serverkey.pem -out server.csr -subj "/C=CN/ST=Gd/L=SZ/O=od.com/CN=harbor.od.com"
# req X.509 Certificate Signing Request (CSR) Management.
# -new new request.
# 3)用户将证书申请文件提交给CA;CA验证签名,提取用户信息,并加上其他信息(比如颁发者等信息)
openssl x509 -req \
-in server.csr \
-out server-cert.pem \
-signkey serverkey.pem \
-CA ca-cert.pem \
-CAkey caKey.pem \
-CAcreateserial \
-days 3650
# x509 X.509 Certificate Data Management.
# -signkey arg - self sign cert with arg
# -CAcreateserial - create serial number file if it does not exist
# -CA arg - set the CA certificate, must be PEM format.
# -CAkey arg - set the CA key, must be PEM format
# missing, it is assumed to be in the CA file.
另一种签发方式
# 跳过ca自签秘钥,如Nginx 中ssl
openssl genrsa -out server.key 2048
#-x509 output a x509 structure instead of a cert
openssl req -new -x509 -key server.key -out server.crt -subj /C=CN/ST=GD/L=SZ/O=devops/CN=wangendao.xyz -days 3650
-subj
C:Country ,单位所在国家,为两位数的国家缩写,如: CN 就是中国
ST:State/Province ,单位所在州或省
L:Locality ,单位所在城市 / 或县区
O:Organization ,网站的单位名称
OU:Organization Unit,部门名称,也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等
CN:Common Name ,网站的域名;
EA:Email Address ,邮箱地址
# 查看证书的信息
# -noout - no certificate output
# -text - print the certificate in text form
openssl x509 -noout -text -in server.crt
# 检查证书CN是否与域名匹配
# -checkhost host - check certificate matches "host"
openssl x509 -noout -checkhost seafile.example.com -in cert.pem
Hostname seafile.example.com does match certificate
# 检查证书是否包含对应ip
# -checkip ipaddr - check certificate matches "ipaddr"
[root@hdss7-21 certs]# openssl x509 -checkip 10.4.7.55 -in kubelet.pem
IP 10.4.7.55 does NOT match certificate
# 检查证书是否过期
# -checkend arg - check whether the cert expires in the next arg seconds
# exit 1 if so, 0 if not
[root@hdss7-21 ssl]# openssl x509 -checkend 2592000 -in cert.pem
Certificate will expire
文件加密
# 生成私钥
openssl genrsa -out private.pem 2048
# 生成公钥
openssl rsa -in private.pem -pubout -out public.pem
# 创建文件
echo 12345678 >a.txt
# 加密文件
openssl rsautl -encrypt -in a.txt -inkey public.pem -pubin -out miwen.txt
# 解密文件
openssl rsautl -decrypt -in miwen.txt -inkey private.pem -out b.txt
文件摘要(文件md5等验证是否被篡改)
openssl dgst -sign private.pem -md5 -out check a.txt
生成随机数
openssl rand -base64 10
openssl rand -hex 10
https://www.cnblogs.com/technology178/p/14094375.html
https://blog.csdn.net/qq_35014708/article/details/89351248
https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
https://www.cnblogs.com/littleatp/p/5878763.html
查看主机型号:
[root@spa00x1 ~]# dmidecode |grep 'Product Name'
Product Name: PowerEdge R720
Product Name: 0X6FFV
查看主机序列号: dmidecode |grep 'Serial Number'
查看操作系统:cat /etc/redhat-release
查看cpu:/proc/cpuinfo
查看内存:/proc/meminfo
free -m
查看负载: /proc/loadavg
load
uptime
nc
网络命令nc
centos中的目录
目录 | 功能 |
---|---|
/var/log/cron | 定时任务的日志 |
/etc/crontab | 系统定时任务 |
/etc/cron.deny | 该文件中所列用户不允许使用crontab命令。 |
/etc/cron.allow | 该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny |
/var/spool/cron | 所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名。 |
/etc/redhat-release | |
/etc/issue | |
/proc/meminfo | |
/proc/cpuinfo | |
/proc/loadavg | |
/var/log/messages | 服务异常时要检查的日志 |
/var/log/secure | 用户登录日志 |
/var/log/wtmp | |
/etc/rsyslog | 日志配置文件 |
/var/spool/clientmqueue | 邮件队列 |
/etc/motd | 添加登录时提示信息 |
journalctl
journalctl
命令用于显示系统日志。默认情况下,journalctl
仅显示当前会话的日志,并滚动显示最新的日志条目。若要显示完整的日志信息,应使用 journalctl
命令配合一些选项来获取更多的日志细节。以下是一些常用的选项:
-u <unit>
:指定要查看的服务名称,例如-u nginx
。-f
:以滚动模式显示日志,实时显示新日志条目。-r
:以相反顺序(即从新到旧的顺序)显示日志条目。-o <format>
:指定输出格式,可以是short
、verbose
、json
等。例如,使用journalctl -o json
将输出日志以 JSON 格式显示。--since <time>
:指定要显示的日志开始时间,该参数可以是时间戳,或者使用类似yesterday
,1 hour ago
的时间表达式。例如,使用journalctl --since "2023-06-24 10:00:00"
将显示从 2023-06-24 10:00:00 开始的所有日志。--until <time>
:指定要显示的日志截止时间。例如:journalctl --until "1 hour ago"
将显示截止到 1 小时前的所有日志。-n <number>
:指定要显示的日志条目数量。例如,使用journalctl -n 50
将仅显示最新的 50 条日志。
以下是一个示例,可以使用该示例来查看系统的所有服务的日志,显示所有启动时间为 2022 年 1 月 1 日之后的日志,以详细模式显示这些日志,并按照事件发生的反向顺序排列输出:
journalctl --since "2022-01-01" -o verbose -u all -r
此示例将显示启动时间为 2022 年 1 月 1 日后的所有服务日志以详细模式和反向顺序进行排列输出。