linux中的日历
Linux:~ # cal # 默认显示当月的 March 2021 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Linux:~ # cal 2021 # 查看2021年的日历 2021 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 5 6 3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13 10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20 17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27 24 25 26 27 28 29 30 28 28 29 30 31 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 1 2 3 4 5 4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12 11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19 18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26 25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30 30 31 July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11 11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18 18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25 25 26 27 28 29 30 31 29 30 31 26 27 28 29 30 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 31
—更新与2021年3月7日—
centos多网卡优先级配置
- 当服务器出现多网卡的时候,网关的优先级就需要通过修改配置文件来达到效果,在网卡配置文件里面,增加下面的参数即可,数字越小,优先级越高,修改后,重启network服务即可
IPV4_ROUTE_METRIC=0
—更新与2021年4月9日—
docker 导出所有镜像
Linux:~ # docker save $(docker images --format '{{.Repository}}:{{.Tag}}') > k8s.tar
如何让执行的命令不记录到history
Linux:~ # date # 在命令前面加上空格,使用history命令就查看不到历史记录了
—更新与2021年4月15日—
递归过滤关键字
Linux:~ # grep -r centos /etc/ # 过滤出/etc目录下所有包含centos关键字的文件
—更新与2021年4月21日—
scp以及ssh消除第一次连接的yes/no
修改配置文件,修改后,需要重启sshd服务,使配置生效
Linux:~ # sed -i 's/.*StrictHostKeyChecking\ .*/StrictHostKeyChecking\ no/g' /etc/ssh/ssh_config
shell脚本的用法
在ssh或者scp的命令后面加上
-o "StrictHostKeyChecking no"
这个参数就可以了
scp常用的参数
-q 不显示进度(写shell脚本的时候可以使用,使shell脚本输出更精简)
-P 指定ssh的端口,默认是22,不需要加这个参数,如果ssh的端口不是22,在scp的时候需要指定端口
-r 递归传输整个目录
—更新与2021年4月25日—
awk以逗号为分隔符,判断文件每行有几列,如果列数等于3,则打印出来
Linux:~ # cat test.txt 4,6,1,4,5,6 1,2,3 9,8 0,4,5,7,0 1 1.2.3.4.5 Linux:~ # awk -F ',' '{if(NF==3){print $0}}' test.txt 1,2,3
awk统计每行有多少列
Linux:~ # cat test.txt 4,6,1,4,5,6 1,2,3 9,8 0,4,5,7,0 1 1.2.3.4.5 Linux:~ # awk -F ',' '{print NF}' test.txt # 以逗号为分隔符,所以最后一行被认作为一列了 6 3 2 5 1 1 Linux:~ # awk '{print NF}' test.txt # 如果不指定分隔符,awk默认以空格为分隔符,所以表示都只有1列 1 1 1 1 1 1
—更新与2021年5月5日—
iptables ip转发
由于公有云部署的k8s用的是内网IP,所以,有的服务无法通过公网IP进行访问和验证,于是做了iptables的ip转发,将内网业务的ip和端口,转发给公网ip(公网ip做了和谐,怕你们乱怼),这样,访问公网ip加服务端口,即可访问
iptables默认不存储规则,一旦重启服务器,iptables规则就清零了,如果是长期使用的,建议使用iptables-save命令,保存规则
Linux:~ # iptables -t nat -A PREROUTING -d <内网ip> -p tcp --dport <服务端口> -j DNAT --to <公网ip> Linux:~ # iptables-save
—更新与2021年5月7日—
查看公网IP
Linux:~ # curl ip.sb
—更新与2021年5月12日—
shell实现俄罗斯轮盘,看谁运气好
$RANDOM是linux里面的一个随机数,每次都是不一样的
随机数除以6,如果等于0,就会输出"u dead",反之,输出"lucky boy"
Linux:~ # [ $[ $RANDOM % 6 ] == 0 ] && echo "u dead" || echo "lucky boy"
可以试着将你的昵称改为:[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo “lucky boy”
开个玩笑,这个还是一个很危险的操作的,一不小心就删根了,千万千万不要用在生产环境
—更新与2021年5月15日—
sed 删除指定字符段内容
Linux:~ # cat test.txt test hello world #-------start for kubernetes-------# 192.168.72.66 k8s-01 192.168.72.67 k8s-02 192.168.72.68 k8s-03 192.168.72.69 k8s-04 192.168.72.70 k8s-05 #-------stop for kubernetes-------# test hello world
Linux:~ # sed -i "/^#.*start/,/#.*stop.*#$/d" test.txt
Linux:~ # cat test.txt test hello world test hello world
sed 指定行上或下插入内容
还是和上面的内容一样
向上插入
Linux:~ # sed -i "/#.*stop.*#/i\192.168.72.71 k8s-06" test.txt
Linux:~ # cat test.txt test hello world #-------start for kubernetes-------# 192.168.72.66 k8s-01 192.168.72.67 k8s-02 192.168.72.68 k8s-03 192.168.72.69 k8s-04 192.168.72.70 k8s-05 192.168.72.71 k8s-06 #-------stop for kubernetes-------# test hello world
向下插入
Linux:~ # sed -i "/192.*06$/a\192.168.72.72 k8s-07" test.txt
Linux:~ # cat test.txt test hello world #-------start for kubernetes-------# 192.168.72.66 k8s-01 192.168.72.67 k8s-02 192.168.72.68 k8s-03 192.168.72.69 k8s-04 192.168.72.70 k8s-05 192.168.72.71 k8s-06 192.168.72.72 k8s-07 #-------stop for kubernetes-------# test hello world
—更新与2021年5月18日—
vim 黏贴文本内容错行的解决方法
临时生效
在命令行模式输入
:set paste
然后回车,然后进入编辑模式,黏贴内容即可永久生效,在
vimrc
文件空白的地方,写入set paste
,保存退出后即可
Linux:~ # vim /etc/vimrc set paste
—更新与2021年5月19日—
清空arp缓存表
Linux:~ # arp -n | awk '/^[1-9]/{print "arp -d " $1}' | sh
awk 切割后,自定义输出内容
Linux:~ # arp -n Address HWtype HWaddress Flags Mask Iface 192.168.72.1 ether 00:50:56:c0:00:08 C br0
\t
表示tab键,两个表示按两次tab键
Linux:~ # arp -n | grep -v Address | awk '{print "ip:"$1 "\t\t" "mac:"$3}' ip:192.168.72.1 mac:00:50:56:c0:00:0
—更新与2021年5月27日—
通过shell,批量停止后台以nohup的方式启动的服务
Linux:~ # for i in $(jobs | grep nohup | awk -F '[][]' '{print $2}'); do kill %${i} ;done
—更新与2021年5月28日—
利用alias传参,自定义linux命令
因为日常维护k8s集群,需要频繁使用kubectl命令,重复使用的时候,实在不想敲太多的参数,因此使用alias减轻自己的输出
如果是所有用户都生效,修改/etc/profile文件
如果是当前用户生效,修改~/.bashrc文件
alias kgp='get_pod () { kubectl get pod $@; }; get_pod'
需要注意的几个点:
1、要使用单引号
2、花括号内要有空格,否则使用命令,会报错语法有问题
3、花括号内的命令结束后,要加上;,否则命令不会生效
也可以这样写
get_pod () { kubectl get pod $@ } alias kgp=get_pod
这样看起来舒服一点
修改完成后,保存文件,
source
一下,是他生效,比如:修改的文件为
/etc/profile
保存退出后
source /etc/profile
然后再命令行使用alias定义的命令即可
Linux:~ # kgp -n kube-system NAME READY STATUS RESTARTS AGE coredns-689d7d9f49-fqrgd 1/1 Running 0 12d coredns-689d7d9f49-xmgcz 1/1 Running 0 12d
使用du命令,查看当前目录下各个子目录的大小
Linux:~ # du -ch --max-depth=1 /var/lib/ 4.0K /var/lib/os-prober 8.0K /var/lib/logrotate 4.7G /var/lib/docker 20K /var/lib/alternatives 4.0K /var/lib/games 244K /var/lib/cloud 4.0K /var/lib/dbus 8.0K /var/lib/rsyslog 4.0K /var/lib/initramfs 28K /var/lib/NetworkManager 4.0K /var/lib/machines 4.0K /var/lib/rpm-state 20M /var/lib/yum 8.0K /var/lib/chrony 28K /var/lib/polkit-1 4.0K /var/lib/php 16K /var/lib/dhclient 4.0K /var/lib/selinux 4.0K /var/lib/misc 12K /var/lib/net-snmp 8.0K /var/lib/plymouth 28K /var/lib/iscsi 166M /var/lib/rpm 8.0K /var/lib/postfix 20K /var/lib/authconfig 324K /var/lib/containerd 76K /var/lib/systemd 12K /var/lib/stateless 8.0K /var/lib/ntp 5.1M /var/lib/mlocate 4.0K /var/lib/tuned 8.0K /var/lib/nginx 4.9G /var/lib/ 4.9G total
-c
表示最后的total,当前目录的大小总和
-h
以直观的形式输出
--max-depth=
输出的目录层数
查看文件大小
Linux:~ # du -sh dockerfile.zip 15M dockerfile.zip
Linux:~ # ll -h dockerfile.zip -rw-r--r-- 1 root root 15M Apr 7 19:39 dockerfile.zip
两种方式都可以查看
MySQL删除指定库下的所有表
select concat("drop table if exists ",table_name,";") from information_schema.tables where table_schema='<your_db_name>';
drop table if exists
注意exists后面有一个空格,执行这个语句,就会将删除这个库的所有表的sql语句输出到终端,复制这些sql,执行一下,即可实现删除指定库下的所有表
vim 使用空格键代替tab键
Linux:~ # vim /etc/vimrc set expandtab
docker 命令显示完整输出
docker ps --no-trunc
systemctl 常用命令
systemctl is-active 查看服务是否处于活动状态
systemctl is-active NetworkManager
active # 活动状态
inactive # 非活动状态
unknown # 未知(比如:服务名称错误,没有找到这个服务;或者服务不存在)
systemctl is-enabled 查看服务是否开机自启
systemctl is-enabled NetworkManager
enabled
# 开机自启disabled
# 非开机自启Failed to get unit file state for xxx.service: No such file or directory
# 没有这个服务
systemctl cat 查看 service 文件内容
systemctl cat network
# /run/systemd/generator.late/network.service
第一行会显示service文件的存储路径
systemctl --no-block 不等程序加载完成
systemctl --no-block restart network
正常情况下,systemctl启动或者重启服务的时候,在等待服务加载完成后才会退出进程,终端会处于hang住的状态,会占用终端的使用,此时使用--no-block参数,执行完systemctl命令后,终端就不会被占用了
又比如一些集群类(etcd)的服务,会一直查找集群是否存在,直到程序设定的超时时间才会返回启动失败,此时的终端是不可用的,而服务又是必须等到集群成立了才能启动成功(和集群选举机制相关),此时使用--no-block参数,执行完systemctl命令后,终端就不会被占用了,等其他节点都启动服务后,再次查看,其实服务也会是running状态
systemctl -l status 完整显示 status 内容输出
systemctl -l status network
systemctl status 查看服务状态的时候,一些太长的日志以及启动方式都会被隐藏,默认会简化输出,加上-l(小写的L)参数,就会完整的显示 status 内容输出
wget 全站下载
wget -c -r -p -nd -np -k --no-check-certificate <要下载的网站地址>
-c断点续传
-r递归下载
-p获取显示HTML页面所需的所有图像等
-nd不创建目录结构
-np不追溯父级
-k使下载的HTML或CSS中的链接指向本地文件
--no-check-certificate不验证服务器的证书
liunx zip 命令
压缩打包
-r递归目录
-o指定zip包名称
-q安静压缩(不输出压缩的过程)
-e加密(不需要输入明文密码,开始压缩时会提示输入和确认密码)
zip -r -o xxx.zip xxx/
liunx unzip 命令
-l
查看 zip 包内的目录结构
-t
测试压缩包是否有损坏
-d
解压到指定路径(指定的目录可以不存在,解压时会创建),不指定,默认解压到当前路径
-o
覆盖解压
unzip -d /root/xxx xxx.zip
sed 删除所有空格
sed -i 's/[[:space:]]//g'
sed 每行之间增加一行空行
sed 'G;' # 增加两行空行 sed 'G;G;' # 三行、四行、依此类推
systemctl 相关
前提是通过 systemd 管理的服务
systemctl 查看服务是否开机自启
systemctl is-enabled <服务名称>
systemctl 查看服务是否处于活动状态
systemctl is-active <服务名称>
systemctl 查看服务的 services 文件和路径
systemctl cat <服务名称>
etcd 查看哪个节点是 leader
etcdctl -w table \ --cacert ./ca.crt \ --cert ./server.crt \ --key ./server.key \ --endpoints https://192.168.11.135:2379 \ endpoint status
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | +-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | https://192.168.11.135:2379 | cde66358cffbaacf | 3.4.3 | 2.4 MB | true | false | 246 | 37760 | 37760 | | +-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+