基础命令
date
设置时区永久生效
ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
命令 | 注释 |
---|---|
date +%s |
unix 时间戳方式展示时间 |
date -d "2023-01-19 14:01:57" +%s |
将日期格式格式化为时间戳 |
date -d @1674108177 +"%F %H:%m%S" |
将时间戳格式化成日期格式 |
date -R |
查看时区 |
export TZ=Americas;date -R ;export TZ='Asia/Shanghai';date -R |
修改时区并再次查看 |
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 "zhangsan" 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 日后的所有服务日志以详细模式和反向顺序进行排列输出。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示