【检查脚本目录】
| cd `dirname $0` |
| dir_home |
| |
| # 变量截取 |
| # |
| ```shell |
| ${变量名 选项 要删除部分 分隔符} |
- 选项
‘#’ 从左最短删除
‘##’ 从左最大上传
% 从右最短删除
%% 从右最大删除
示例
| url=www.baidu.com |
| |
| echo ${url#*.} |
| baidu.com |
| |
| echo ${url##*.} |
| com |
| |
| echo ${url%.*} |
| |
| www.baidu |
| echo ${url%%.*} |
| www |
【时间和时区】
修改时间
| date -s 14:36:00 |
| date -s "2017-06-30 18:31:00" |
| yum install ntpdate -y |
| ntpdate ntp1.aliyun.com |
修改时区
修改时区
| cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
| cp /usr/share/zoneinfo/Asia/Jakarta /etc/localtime |
查看时区
| date -R |
| Fri, 05 Jan 2018 07:27:19 +0800 |
脚本从服务器同步
client主动同步
- 配置密钥,使client非交互登录server
- client设置脚本从server器同步
| #!/bin/bash |
| date_server=`/usr/bin/ssh -p 17822 10.10.10.10 "date '+ %Y-%m-%d %H:%M:%S'"` |
| date -s "$date_server" |
client被动同步
思路同上,过程略。
docker-compose 时区设置
| volumes: |
| - /tmp |
| |
| - /etc/localtime:/etc/localtime |
| |
| - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone |
kubernetes设置时区
| spec: |
| containers: |
| volumeMounts: |
| - name: timez |
| mountPath: /etc/localtime |
| readOnly: true |
| volumes: |
| - name: timez |
| hostPath: |
| path: /etc/localtime |
【按时间备份】
实例
| #!/bin/bash |
| |
| # |
| cd `doirname $0` |
| work_dir=`pwd` |
| # 时间标记设置如下 |
| data_time=`date '+%Y%m%d-%H%M%S'` |
| |
| # |
| echo "开始更新后台" |
| cd ${work_dir} |
| docker-compose down |
| # 时间标记使用如下 |
| mv screenos-web.jar screenos-web.jar-${data_time} |
| cp /tmp/screenos-web.jar ${work_dir} |
| docker-compose up -d |
| echo "后台已启动" |
| |
date命令
%H
小时(以00-23来表示)。
%I
小时(以01-12来表示)。
%K
小时(以0-23来表示)。
%l
小时(以0-12来表示)。
%M
分钟(以00-59来表示)。
%P
AM或PM。
%r
时间(含时分秒,小时以12小时AM/PM来表示)。
%s
总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S
秒(以本地的惯用法来表示)。
%T
时间(含时分秒,小时以24小时制来表示)。
%X
时间(以本地的惯用法来表示)。
%Z
市区。
%a
星期的缩写。
%A
星期的完整名称。
%b
月份英文名的缩写。
%B
月份的完整英文名称。
%c
日期与时间。只输入date指令也会显示同样的结果。
%d
日期(以01-31来表示)。
%D
日期(含年月日)。
%j
该年中的第几天。
%m
月份(以01-12来表示)。
%U
该年中的周数。
%w
该周的天数,0代表周日,1代表周一,异词类推。
%x
日期(以本地的惯用法来表示)。
%y
年份(以00-99来表示)。
%Y
年份(以四位数来表示)。
%n
在显示时,插入新的一行。
%t
在显示时,插入tab。
MM
月份(必要)
DD
日期(必要)
hh
小时(必要)
mm
分钟(必要)
ss
秒(选择性)
【历史命令和快捷键】
历史命令
- !历史记录编号
- !cat 以cat开头的上一条命令
- !$上一次使用路径
例:
快捷键
说明:锁屏之后命令仍会执行,仅屏幕不显示了。
【重定向】
相关符号
- 0 输入
- 1标准输出
- 2错误输出
- > , >> 正确输出
- 2> , 2>> 错误输出
- &> 合并重定向
- < , << 输入
脚本输出到黑洞
说明:将错误合并到正确,并且输入黑洞。
| ./test.sh > /dev/null 2>&1 |
cat输入
回车输入,直到行尾出现ABC。
注意结尾符前边是 << ,不是<。
| cat > 文件名 << EOF |
| aaaaaaa |
| bbbbbbb |
| cccccccc |
| EOF |
dd命令创建文件
| dd if=/dev/zero of=/tmp/1.txt bs=1M count=2 |
【进程使用的文件】
看进程使用的文件
看文件被哪个进程使用
如umount不能卸载的时候,查看哪个进程在使用,然后kill掉(见psmisc工具)
【查看各种链接】
| # |
| |
| netstat -n|awk '/^tcp/{++S[$NF]}END{for (key in S) print key,S[key]}' |
说明:
- NF表示该行字段数
- ++S[$NF] 表示最后一列每个字串出现的次数
| awk -F : '{print ++S[$NF]}' /etc/passwd |
- key in S 则key就是每行的最后一列
最后打印了key 和 S
【服务器查看外网出口ip】
【开机自启动脚本】
| # cat /etc/init.d/test.sh |
| #!/bin/sh |
| # chkconfig: 2345 96 14 |
| #description:test.sh |
| date > /root/date.txt |
说明:
2345: 代表设置在哪个level中是on的,需要在rc2.d~rc5.d目录下,创建名字为 S96test.sh 的文件连接,连接到/etc/rc.d/init.d目录下的的test.sh脚本,查看如下:
| #ll /etc/rc2.d |
| lrwxrwxrwx. 1 root root 17 4月 5 05:23 S96test.sh -> ../init.d/test.sh |
96/14:分别代表启动和关闭顺序
| chmod a+x /etc/init.d/test.sh |
| chkconfig --add test.sh |
| chkconfig test.sh on |
| chkconfig list |
【/porc下查看资源】
| cd /proc && for i in `ls |awk '{print $8}'|grep '^[0-9]'`;do grep -H VmRSS $i/status 2>/dev/null;done|sort -k 2 -rn|head|awk -F [/:] '{print $1,$4}' |
注意:|awk ‘{print $8}’ 这里是因为ls设置了别名,实际执行了ll 因此这里加了一个截取。
| for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'`;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10 |
如果ls别名设置为ll,则也需要这awk截取一下。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了