linux可以这样玩 之 杂乱无章的随笔(不定期更新)
文章目录
-
-
- 快速重命名
- vim的进化
- vim高亮当前行
- vim列编辑
- vim块编辑
- vim行编辑
- vim 中替换内容
- vim保留当前已经编辑的内容,切换到其他用户继续编辑
- 修改服务的进程限制
- CentOS查看某个命令的安装包名称
- bash命令自动补全
- ifconfig获取本机ip
- 树形展示目录结构
- 快速创建目录结构
- awk 行切割
- 统计目录下的文件大小(包含隐藏文件)
- 软连接的删除和取消
- 动态监测命令运行结果
- 终端动态读出内容
- 由ASCII字符组成艺术字
- linux中的日历
- centos多网卡优先级配置
- docker 导出所有镜像
- 如何让执行的命令不记录到history
- 递归过滤关键字
- scp以及ssh消除第一次连接的yes/no
- scp常用的参数
- awk以逗号为分隔符,判断文件每行有几列,如果列数等于3,则打印出来
- awk统计每行有多少列
- iptables ip转发
- 查看公网IP
- shell实现俄罗斯轮盘,看谁运气好
- sed 删除指定字符段内容
- sed 指定行上或下插入内容
- vim 黏贴文本内容错行的解决方法
- 清空arp缓存表
- awk 切割后,自定义输出内容
-
快速重命名
Linux:~ # cp /etc/vimrc{,.bak.`date +%F`} # mv 也有同等的效果,不只是文件,目录也可以这样操作
Linux:~ # ll /etc/vimrc*
-rw-r--r--. 1 root root 1982 Dec 16 00:44 /etc/vimrc
-rw-r--r-- 1 root root 1982 Mar 2 20:44 /etc/vimrc.bak.2021-03-02
vim的进化
- 记得备份一份vimrc的文件,万一哪里没修改好,还有得救
Linux:~ # vim /etc/vimrc
set nu
set ts=4
set sw=4
set noeb
syntax on
set nu
vim内自动显示行数
set ts=4
vim内tab的宽度
set sw=4
vim内统一缩进为4
set noeb
vim内去掉输入错误的提示声音
syntax on
vim语法高亮显示
vim高亮当前行
Linux:~ # vim /etc/vimrc
set cursorline
hi CursorLine cterm=bold ctermbg=DarkGrey ctermfg=NONE
set cursorline
高亮当前行cterm
三种终端term(黑白终端)
、cterm(彩色终端)
、gui(Gvim终端)
ctermbg
cterm
终端背景色ctermfg
cterm
终端前景色- 终端安全色(默认不开启256色)
- Black
- DarkBlue
- DarkGreen
- DarkCyan
- DarkRed
- DarkMagenta
- Brown, DarkYellow
- LightGray, LightGrey, Gray, Grey
- DarkGray, DarkGrey
- Blue, LightBlue
- Green, LightGreen
- Cyan, LightCyan
- Red, LightRed
- Magenta, LightMagenta
- Yellow, LightYellow
- White
vim列编辑
ctrl+v 选中列数
选中一列shift +i
#
esc
退出,加随意方向键即可(这样就可以批量的添加注释)(ctrl+v 选中一列#,再按d,就可以快速去除注释了)
vim块编辑
在命令行模式下,按v(小写)
vim行编辑
在命令行模式下,按V(大写)
vim 中替换内容
- 将文本中的6379全局(g)替换成6380
:%s/6379/6380/g
vim保留当前已经编辑的内容,切换到其他用户继续编辑
:w !sudo tee %
:w !{cmd}
让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin 传入tee
是一个把stdin保存到文件的小工具%
是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径- 所以执行这个命令,就相当于从vim外部修改了当前编辑的文件
修改服务的进程限制
# vim /etc/systemd/system/xxx.service
TasksMax=infinity
- infinity表示不限制
CentOS查看某个命令的安装包名称
Linux:~ # yum provides /*bin/killall
psmisc-22.20-17.el7.x86_64 : Utilities for managing processes on your system # killall 命令需要安装psmisc
Repo : base
Matched from:
Filename : /usr/bin/killall
Linux:~ # yum provides /*bin/pip
python2-pip-8.1.2-14.el7.noarch : A tool for installing and managing Python 2 packages # pip 命令需要安装python2-pip
Repo : epel # pip 安装需要 epel 源
Matched from:
Filename : /usr/bin/pip
bash命令自动补全
Linux:~ # yum -y install bash-completion-extras.noarch
- 安装完成后,需要重新连接终端才会生效
ifconfig获取本机ip
Linux:~ # ifconfig eth0 |sed -n 's#.*inet \(.*\)netmask.*#\1#p'
Linux:~ # ifconfig eth0 | grep -w inet | awk '{print $2}'
- 两种方法都可以,ifconfig命令需要安装
net-tools
这个包(如果回显command not found
)
树形展示目录结构
Linux:~ # yum -y install tree
Linux:~ # tree
.
├── 99.sh
├── anaconda-ks.cfg
└── test.txt
0 directories, 3 files
Linux:~ # tree /tmp/
/tmp/
├── systemd-private-2405e366cfa34321a6396335f84c79c9-chronyd.service-j3XkZ0
│ └── tmp
└── vmware-root_850-2689209357
3 directories, 0 files
快速创建目录结构
Linux:~ # mkdir -p /usr/local/nginx/html/CentOS-YUM/{CentOS,Aliyun}/version{_6.6,_7.0}/64bit
Linux:~ # tree /usr/local/nginx/
/usr/local/nginx/
└── html
└── CentOS-YUM
├── Aliyun
│ ├── version_6.6
│ │ └── 64bit
│ └── version_7.0
│ └── 64bit
└── CentOS
├── version_6.6
│ └── 64bit
└── version_7.0
└── 64bit
12 directories, 0 files
awk 行切割
Linux:~ # cat test
192.168.1.1 123 22
192.168.1.2 456 9022
192.168.1.3 789 1022
192.168.1.4 012 2022
Linux:~ # awk 'NR == 1' test
192.168.1.1 123 22
Linux:~ # awk 'NR == 2' test
192.168.1.2 456 9022
Linux:~ # awk 'NR == 3' test
192.168.1.3 789 1022
Linux:~ # awk 'NR == 4' test
192.168.1.4 012 2022
统计目录下的文件大小(包含隐藏文件)
Linux:~ # du -sh * .[^.]*
软连接的删除和取消
- 软连接的源路径是文件占用磁盘的路径,目标路径是相当于快捷方式所在的路径
- 无论是源路径还是目标路径内增删文件,两个路径内的文件永远一致
- 一旦删除源路径或者目标路径,则两个路径的文件全部消失不见(让我哭一会)
Linux:~ # ll
total 8
-rw-r--r-- 1 root root 82 Feb 24 13:30 test
drwxr-xr-x 2 root root 4096 Feb 24 13:51 test2
Linux:~ # ll /tmp/ | grep test
lrwxrwxrwx 1 root root 10 Feb 24 13:49 test -> /root/test
lrwxrwxrwx 1 root root 12 Feb 24 13:52 test2 -> /root/test2/
# 删除软连接
Linux:~ # rm -f /tmp/test2 # 如果是目录,后面不能带上'/' 否则源文件目录也会被删除,如果文件的话,不影响
Linux:~ # ll /tmp/ | grep test
lrwxrwxrwx 1 root root 10 Feb 24 13:49 test -> /root/test
Linux:~ # ll
total 8
-rw-r--r-- 1 root root 82 Feb 24 13:30 test
drwxr-xr-x 2 root root 4096 Feb 24 13:54 test2
# 取消软连接
Linux:~ # unlink /tmp/test
Linux:~ # ll /tmp/ | grep test
Linux:~ # ll
total 8
-rw-r--r-- 1 root root 82 Feb 24 13:30 test
drwxr-xr-x 2 root root 4096 Feb 24 13:54 test2
动态监测命令运行结果
Linux:~ # watch -n 1 date
- 1秒钟输出一次date命令的运行结果
- 当需要查看某个路径的大小变化,就不需要自己一直重复执行命令
- watch 命令会占用当前终端,所以,需要动态监测的时候,需要另起一个终端
终端动态读出内容
Linux:~ # yum -y install pv.x86_64
Linux:~ # printf "\e[1;32m好看的皮囊嫌你丑,有趣的灵魂厌你俗\e[0m\n" | pv -qL 10
由ASCII字符组成艺术字
Linux:~ # yum -y install figlet.x86_64
Linux:~ # figlet Made in China
__ __ _ _ ____ _ _
| \/ | __ _ __| | ___ (_)_ __ / ___| |__ (_)_ __ __ _
| |\/| |/ _` |/ _` |/ _ \ | | '_ \ | | | '_ \| | '_ \ / _` |
| | | | (_| | (_| | __/ | | | | | | |___| | | | | | | | (_| |
|_| |_|\__,_|\__,_|\___| |_|_| |_| \____|_| |_|_|_| |_|\__,_|
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 172.31.243.179 -p tcp --dport 32190 -j DNAT --to 172.31.244.179
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