[本文作者:dudebing99 链接: https://dudebing99.github.io/Blog/shell.html]
统计网络连接状态及数目
1 | # netstat 工具 |
统计进程打开的文件句柄数目
1 | lsof -p PID |
查看打开某个端口的进程
1 | # 查看打开端口 80 的进程 |
字符串截取
man bash 获取更全面的语法(在线手册)
1 | # ${parameter#word} 最小限度从前面截取 word |
匹配、过滤、替换
awk
1 | # 打印出从 1 到 10 之间的偶数 |
grep
Tips:
- ‘*‘ 在 shell 中代表通配符,用来代表任意字符,但是在正则表达式中,其含义不同,代表有 0 个或多个某个字符(’*‘ 前面指定的字符)。例如 oo* 表示第一个 o 一定存在,第二个 o 可以有一个或多个,也可以没有,因此代表至少一个 0
- shell 中的反向选择为 [!range],正则里面为 [^range]
1 | # 匹配指定行,并输出行号 |
sed
[[:space:]] 表示空格或者 tab 的集合
1 | # 替换文件中所有 \r |
综合使用
1 | # 将当前目录下所有 env.conf 文件中 debug 替换为 release |
求和、求平均值
1 | root@0c1d475c709b:/# for((i=1;i<=3;++i)) do echo $i; done |
过滤空白行
1 | # 使用 grep |
for 循环的常用写法
数值类型
1 | # i = i*3+1 |
1 | for i in $(seq 1 10) |
1 | for i in {1..10} |
1 | awk 'BEGIN {for(i=1; i<=10; i++) print i}' |
字符串类型
1 | for i in `ls` |
1 | for i in $* |
1 | for i in f1 f2 f3 |
1 | list="rootfs usr data" |
shell 数组与字典
1 | #/!/bin/bash |
shell 文件属性获取
1 | -e (equal) |
分割、合并大文件
1 | # 按照指定行数分割 |
检查 IPv4 地址合法性
1 | CheckIPAddr() |
检查进程是否重启
1 |
|
nohup 后台启动 java 进程
1 | nohup java -classpath xxx_service_1.0.jar xxx_entry > xxx_service.log 2>&1 & |
获取进程号、杀进程
1 | ps afx|grep 进程名|grep -v grep|awk '{print $1}'|xargs kill -9 |
查询、启动、停止服务
1 | # 新管理方式,如 Cent OS >= 7.x |
显示已经登录的用户、执行的命令
1 | # 显示已经登录的用户以及正在执行的命令 |
添加定时任务
at 定时任务
1 | # 示例:添加一个 1 分钟之后执行的任务,按 Ctrl + D 退出 |
crontab 定时任务
1 | # 添加定时任务 |
watch 持续监视命令的执行情况
1 | # 每隔 3s,打印一次指定端口 9999 处于连接已建立的连接数目 |
TCP/UDP 收发数据、探测端口是否打开
nc
1 | # 监听 1234 |
telnet
1 | telnet 127.0.0.1 1234 |
逐行读取文件
while 循环
1 | while read LINE |
重定向法(管道法)
1 | cat $FILE|while read LINE |
文件描述符法
1 | # 如下两个操作可合并 |
for 循环
1 | for LINE in `cat $FILE` |
如何解决 Linux Error: No space left on device
判断磁盘空间是否满,inode 是否耗尽
1 | df -h |
查找大文件
1 | # 按照大小降序排列(取出前 10 个大文件) |
查找访问某个目录的进程
1 | lsof +d /tmp |
删除文件(少量)
1 | find /tmp -type f -exec rm {} \; |
删除文件(大量)
1 | # 先建立一个空目录 |
删除大文件
1 | cat /dev/null > target.file |
查找指定范围内的日志信息
1 | # 查找时间范围 2018/03/28 05:00:00 ~ 2018/03/28 07:59:59 的所有日志 |
tr 字符进行替换、压缩和删除
1 | # 将输入字符由大写转换为小写 |
编译、打包脚本
1 |
|
openssl 自签证书
download: 自签证书
初始化 CA
1 |
|
颁发证书
1 |
|
sudo 保存 vim 打开的文件
1 | # 方法一 |
拷贝并忽略特定的文件
1 | cp `ls|grep -v dummy.txt|xargs` target_dir |
统计文件数目
1 | # 统计普通文件数目,不包括隐藏文件(即,以'.'开头的文件) |
shell 实现多进程
1 |
|
expect 自动登陆
1 | #!/usr/bin/expect -f |
获取字符串的长度
1 | # 利用${#str}来获取字符串的长度 |
一键部署 zookeeper/kafka 集群
功能:部署 zookeeper/kafka 集群
说明:
需要提前规划好 zookeeper/kafka 集群,并配置好 basic.info,详见 basic.info。
可以支持 zookeeper/kafka 单机或集群部署
单机部署,配置信息参考 basic_example_standalone.info
集群部署,配置信息参考 basic_example_cluster.info使用步骤:
- 修改 install_zk_kafka.tar.gz 中 install_zookeeper.sh/install_kafka 中安装包的路径(建议从内网下载安装包,可搭建 ftp 或 http 服务器),重新生成 install_zk_kafka.tar.gz
- 将步骤 1 中生成的压缩包上传到 ftp 或 http 服务器
- 将 zk_kafka_deploy.tar.gz 拷贝到操作机器(操作机器能够访问集群中所有机器即可)
- 解压,修改 zk_kafka_deploy.sh 中 install_zk_kafka.tar.gz 的路径
- 修改集群配置信息 basic.info
- 执行脚本 ./zk_kafka_deploy.sh
download:
部署
1 |
|
集群配置信息
1 | # 此文件只能修改 value,不能修改 key |
添加自定义系统服务
备注:源码编译安装 Apache Tomcat 之后,可以将其添加到系统服务(此方法仅适用于 CentOS 7 之前版本)
进入 /etc/ini.d 文件夹,新建文件 tomcat
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 2345是要设为要启动的运行级别,10启动优先级,90杀死进程的优先级
# chkconfig: 2345 10 90
# description: script to start/stop tomcat service
# by dudebing99 2014-10-28
source /etc/profile
case $1 in
#start service
start)
sh /usr/share/apache-tomcat-7.0.56/bin/startup.sh
echo ""
;;
#stop service
stop)
sh /usr/share/apache-tomcat-7.0.56/bin/shutdown.sh
echo ""
;;
#restart service
restart)
sh /usr/share/apache-tomcat-7.0.56/bin/shutdown.sh
echo ""
#status
status)
var=$(ps -ef | grep tomcat | grep -v "grep" | wc -l)
if [[ $var -eq 4 ]] ; then
echo -e "\nTomcat is running.\n"
else
echo -e "\nTomcat is stopped.\n"
fi
;;
#help
help)
echo -e "\nUsage:start|stop|restart|status\n"
;;
#other
*)
echo -e "\nUnexpected command, tips as follows.\n"
echo -e "Usage:start|stop|restart|status\n"
;;
esac更改文件权限
1
chmod 755 /etc/init.d/tomcat
添加服务
1
chkconfig --add tomcat
确认服务是否已开启
1
chkconfig tomcat --list
awk 转义单引号、双引号
1 | # 转义双引号,直接使用 \" 即可 |
cp 拷贝同一个文件到多个目录
1 | # 拷贝 dummy.txt 到目录 /tmp/1 和 /tmp/2 |
cp 同时拷贝多个文件到同一个目录
- 拷贝多个文件
1 | [root@localhost ~]# ls /tmp/dummy/ |
- 文件名有共同前缀
1 | [root@localhost ~]# ls destdir/ |
xxd 十六进制转换
1 | kevin@ubuntu:~$ echo "hello world"|xxd -ps |
chattr 和 lsattr 保护文件
通常,可以通过
chattr +i
实现对文件的保护
1 | root@iZbp18qlevqaoff8jmlpx7Z:~# lsattr stack.log |
md5sum 校验文件完整性
1 | # 生成 md5sum |
获取子脚本的返回值
1 | # cat ./a.sh |
1 | # cat ./a.sh |
1 | # ./b.sh |