CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
常用Linux命令
统计
- 统计当前目录下的所有文件行数:
bash wc -l *
- 当前目录以及子目录的所有文件行数:
bash find . * | xargs wc -l
- 统计目录以及子目录所有c文件行数:
find . -name "*.c" | xargs wc -l
- 统计某小时中各分钟的请求个数:
cat access.log | grep 3cf0266e | grep "16/Mar/2017:15" | awk '{print $4}' | awk -F':' '{sum[$3]++}END{for (i in sum) print i, sum[i]}' | sort -k1
- 正则统计某个字符串出现的次数:
cat log | awk '{match($0, /(BASE_[_A-Z]+)/, a); cnt[a[1]]++} END{for (i in cnt) {print i"\t"cnt[i]}}'
查找与替换
- 查找当前目录下所有的文件包含某字符串
bash grep str *
- 查找包含某字符串的所有c++文件
find . -type f -name "*.h" -o -name "*.cpp" | xargs grep 'hello'
- 替换掉某个文件夹下所有字符串
find . -type f |xargs sed -i 's/odp_0331/odp/g'
- 多个key进行查找
grep -E "key1|key2|key3" file
文本处理
- 将多行归并成一行文本
cat txt | awk ‘{a=(a”,“$0)}END{print a}
- 对一个文件按行shuffle
awk 'BEGIN{srand()}{a[rand()NR]=$0}END{for (l in a) prin a[l]}' file
- 按列归并两个文件
f1
sina.com 52.5 sohu.com 42.5 baidu.com 35
f2
www.news.sina.com sina.com 80 www.over.sohu.com baidu.com 20 www.fa.baidu.com sohu.com 50 www.open.sina.com sina.com 60 www.sport.sohu.com sohu.com 70 www.xxx.sohu.com sohu.com 30 www.abc.sina.com sina.com 10 www.fa.baidu.com baidu.com 50 www.open.sina.com sina.com 60 www.over.sohu.com sohu.com 20
awk 'FNR==NR{a[$1]=$2;next}{print $0,a[$2]}' f1 f2
svn
- 删除代码路径下的svn
find . -name ".svn" | xargs rm -rf
系统
- 打开core dump
ulimit -c unlimited
- 查看coredump是否打开:
ulimit -c
- 通过修改 /proc/sys/kernel/core_uses_pid 文件可以让生成 core 文件名是否自动加上 pid 号
echo 1 > /proc/sys/kernel/core_uses_pid
- 修改文件或目录所属用户
chown -R username /var/data/
进程
- 删除某个进程
ps -ef | grep {execute file name} | awk '{print $2}' | xargs kill
- 查看某个进程的启动路径
ll /proc/{pid}/
- 根据pid查看进程是否存活
now=`date +%Y%m%d%H%M%S` pid=$(`cat ${base_path}/var/run.pid`) ps ax | awk '{print $1}' | grep "^${pid}$" if [ $? == 0 ]; then echo "[WARNNING]""$now"" run.sh is already running, stop this script." >&2 exit 1 else echo "[WARNNING]""$now"" previous pid[""$pid"" failed!" >&2 fi
- 程序运行时指定句柄数限制方法
nohup limit -n 1000000 ./bin/gateway & // 或者 ulimit -n 100000 && nohup ./bin/gateway &
网络
- 统计tcp各个状态个数
bash netstat -an | awk '/^tcp/ {++state[$NF]} END{for (key in state) print key,"\t",state[key]}'
NGINX
- 日志切割
bash nginx_dir="/home/soft/resty/nginx" nginx_pid="/home/soft/resty/nginx/logs/nginx.pid" cd $nginx_dir log_dir="${nginx_dir}/logs" time=
date +%Y%m%d%Hlogfile="access.js_mobojoy.conf.log" mv $log_dir/${logfile} $log_dir/${logfile%.*}_$time.log kill -USR1
cat ${nginx_pid}