提升效率的一些linux命令以及shell 语法整理

整理一下日常开发中linux下的常用命令:

  1. 根据进程名找到进程id 并且kill掉

    $ps ux | grep demo
    userzhao+   378  0.0  0.0  10540   552 tty1     S    21:30   0:00 ./demo1
    
    # 找到进程id
    $ps ux | grep demo | grep -v grep | awk '{print $2}'
    378
    
    # 然后kill掉 xargs 是个好东西
    # xargs -t 表示输出对应的命令
    $ps ux | grep demo | grep -v grep | awk '{print $2}' | xargs -t kill -9
    kill -9 378
    
  2. grep某个区间时间段的日志

    $ grep "2019-05-21 14:42:4[5-6]" dpkg.log
    2019-05-21 14:42:45 status not-installed linux-headers-generic:amd64 <none>
    2019-05-21 14:42:45 status installed linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:45 remove linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54 <none>
    2019-05-21 14:42:45 status half-configured linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:45 status half-installed linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:46 status config-files linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:46 status config-files linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:46 status config-files linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:46 status not-installed linux-headers-4.15.0-50-  generic:amd64 <none>
    2019-05-21 14:42:46 status installed linux-headers-4.15.0-50:all 4.15.0-50.54
    
    # 查询cpu 80~89之间的日志
    grep "cpu : 8[0-9]%" *.log
    
    cat out.log 
    [20210708 23:29:01.645568] cpu usage: 0%
    [20210708 23:29:06.642943] cpu usage: 1%
    [20210708 23:29:11.643244] cpu usage: 2%
    [20210708 23:29:16.640893] cpu usage: 3%
    [20210708 23:29:21.642805] cpu usage: 4%
    [20210708 23:29:26.646420] cpu usage: 5%
    
    // 查看cpu操过3%的记录
    grep "cpu" out.log | awk -F'%' '{print $1}'|awk '{if ($NF > 3) print $0}'
    

    其他的grep,find的相关的alias:
    https://www.jianshu.com/p/ea22a699e456

  3. awk使用substr打印前n个字符

    $ cat /etc/passwd | awk -F : '{print substr($1,0,3)}'
    roo
    dae
    bin
    sys
    syn
    gam
    man
    
  4. 性能指标查询的相关命令

    top -b > profile.log    # 记录某个时间的cpu和内存状态 
    top -H -p pid             # 查看某个进程下面的线程cpu状态
    free -g                      # 查看内存
    iotop                         # 查看io
    pidstat -p pid            # 查看某个进程
    
  5. mysql 在shell上面直接执行查询

    mysql -uroot -e "use information_schema;select * from COLUMNS limit 1;"
    
  6. 查找相关的命令 grep的结果高亮显示 --color=auto

    // 查找文件中包含某个字符串的
    grep "xxxxx" xxx.log --color=auto 
    grep -rn "xxxx"  xxx.log
    
    // 查找包含某个字符串的文件名
    find . -name "table*"       // # 寻找是table开头的文件名
    find . -name "*table*"      // # 寻找包含table的文件名
    
  7. 统计文件中单词的数量

    $ cat test.txt 
    welcome shell 
    welcome to shell
    shell
    
     #方法1:
     $ cat test.txt| awk '{for(i=1; i<=NF;i++){a[$i]++}} END{for(key in a){print key" "a[key]}}'
     to 1
     welcome 2
     shell 3
    
     #方法2:
     $ cat test.txt | tr " " "\n" | awk '{if($1 != ""){a[$1]++}} END{for(key in a){print key" "a[key]}}'
     to 1
     welcome 2
     shell 3
    
  8. sort 排序

    $ cat out.txt 
    1 1000 40
    2 900 20
    3 600 80
    
    # 默认从小到大
    $ sort out.txt      
    1 1000 40
    2 900 20
    3 600 80
    
    # 相反的排序
    $ sort -r out.txt
    3 600 80
    2 900 20
    1 1000 40
    
    # 根据第3列排序
    $ sort -k 3n out.txt
    2 900 20
    1 1000 40
    3 600 80
    
  9. uniq去重

    cat testfile
    hello
    world
    friend
    hello
    world
    hello
    
    #cat testfile | sort |uniq
    friend
    hello
    world
    

shell的基本语法
  1. 定义变量的时候,不能加空格
a=100 # 不能加空格
  1. 条件判断必须要加空格
#判断等于
if [ $a1 = $b1 ]   #必须加上空格
then
   echo "eq"
else
   echo "not eq"
fi
  1. 其他的语法:
    https://github.com/zhaozhengcoder/CoderNoteBook/blob/master/note/bash%26shell%E7%BC%96%E7%A8%8B.md

  • 简单的shell操作
# 这基本上是变量的替换
path="/var/www"
cd $path
cp -r $src_code_path $build_name
  • shell操作数据库
# 使用shell再数据库上面创建database
src_db_user=root
build_db_name=test

mysql -u $src_db_user << EOF 2>/dev/null
CREATE DATABASE $build_db_name
EOF
if [ $? -eq 0 ]  
then 
    echo "created DB" 
else 
    echo "DB already exists, sh exit"
    exit 1;
fi

Shell中通常将 EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。 可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序。

回顾一下< <的用法。当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。

参考:https://blog.csdn.net/wyl9527/article/details/72655277

  • shell结合sed命令
src_db_host=10.12.235.102
build_db_host=10.12.235.102
# sed 替换到匹配到的内容
sed -i "s/host=${src_db_host}/user=${build_db_host}/g" file

# sed 替换到匹配到这一行
sed -i "/${src_db_host} /c ${build_db_host}"  file
  • shell拿到命令执行的结果
# 打印一个目录下面所有的php文件
for file in `ls | grep .php`
do 
   echo $file
done
  • shell中常见到的
0:表示键盘输入(stdin)
1:表示标准输出(stdout),系统默认是1 
2:表示错误输出(stderr)

1>/dev/null:表示标准输出重定向到空设备文件。
也就是不输出任何信息到终端,不显示任何信息。

2>&1:表示标准错误输出重定向等同于标准输出。
因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
  • shell 结合ini文件
    example.ini:

    DBNAME=test
    DBUSER=scott
    DBPASSWORD=tiger
    

    example.sh

    #!/bin/bash
    #Including .ini file
    . example.ini
    echo "${DBNAME}   ${DBUSER}  ${DBPASSWORD}"
    
  • shell的符号

$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

shell函数
  1. shell函数的例子
#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello
  1. shell函数处理输入和返回输出
# input  /var/www/
# output \/var\/www\/
handle_path_str()
{    
    echo $1 | sed 's#\/#\\\/#g'
}

build_path= /var/www/
build_path_str="$(handle_path_str $build_path)"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,365评论 0 5
  • 管道符、重定向 管道符 "|":将前一个命令的标准输出当作后一个命令的标准输入 输入输出重定向:>与< 命令行通配...
    Kylin824阅读 471评论 0 1
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,719评论 0 10
  • 经过一个周的学习,真的收获超级超级多,对工作和生活也有了更好的规划和安排,最直观的感受就是时间“多了”。具体有哪些呢?
    小恩叨逼叨阅读 284评论 1 4
  • 我们何其幸运 在这是圆非圆的世界 恰好遇见 我们何其幸运 在这六道轮回的时空 偏偏相逢 一切必有因 奈何纠结果 —...
    小5写日记阅读 512评论 4 8