1. “#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell

2. 分号可分隔一行中多条命令,shell分别执行

3. 命令以 & 符结尾,shell将在后台执行前面的命令,并不等该命令执行完,则执行下一条命令

4. sed (stream editor), 最常用功能是文本的替换

s命令以g结尾表示全局性,如果没有g,则会替换第一个匹配,加数字n,表示替换第n个匹配的内容

sed address command 可以处理特殊指定的行

sed '/eee/ s/555/8888/' sed.txt 将含有eee的行中的555改为8888

sed '/eee/! s/111/39829287/' sed.txt 将不包含eee行中, 包含111改为3982987

sed '/^$/d' dataTest.dat 删除空白行

sed -n 4p 打印显示第4行

5. cut 命令选择文件中特定域内容。

cut -c 以字符内容为主,选出特定字符

cut -d \t 以指定的域分割符分割文件, 结合-f选择指定的域

cut -f 选择指定列

例 : cut -d " " -f 2 sed.txt 以空格作分割符,,选择第一列

cut -c 1-3 sed.txt 选择第1-3 个字符

5。 paste a.dat b.dat -d "\t" 拼接文件各列 -d delimter 分割符

6. join 命令可以拼接key相同的字段

join -t $'\t' ageRaw.txt app.dat > ageJoinApp.dat

bb 8 2

ff 2 4

cc 4 4

dd 5 5

join file1.txt file2.txt

输出:aa 1 2 2 1

bb 2 3 8 2

join -1 2 -2 3 file1.txt file2.txt # 以第一个文件的第二列和第二个文件的第三列做匹配字段

输出: 1 aa 2 aa 2

2 bb 3 bb 8

4 cc 6 ff 2

4 cc 6 cc 4

join -o 1.1 1.1 2.2 1.2 file1.txt file2.txt # 输出第一个文件的第1列,第二个文件第2列,第一个文件第1列

join -a1 file1.txt file2.txt # 左连接

join -a2 file1.txt file2.txt # 右连接

join -a1 -a2 file1.txt file2.txt # 全连接

join -v1 -v2 test1.dat test2.dat # 只显示没有join上的两个文件内容

7. uniq 用于选择sort后的重复行操作,(它只处理相邻行重复的内容,因此常与sort联 用)

sort test.txt | uniq -c -c 列出每行重复的个数,

2 aaa

3 bbb

2 ccc

sort test.txt | uniq -d -d 仅列出重复行

aaa

bbb

sort test.txt | uniq -u -u 仅列出非重复行

8. wc -c 计算字节数

wc -l 行数

wc -w 字符数

9. 文件描述符0、1、2分为别标准输入、输出、错误输出

ls 1> standout.dat 2> standerr.dat 将标准输出到第一个文件 ,错误输出到第二个文件

ls > test.dat 2>&1 将错误输出,也输出到第一个文件,其中 &1 是shell语法,表示标准输出文件

10. df -h dir 以人类可读形式,给出目录空间资源使用情况

11. du -h dir 以人类可读形式,给出目录大家

12. diff newUserId.dat payUserId.dat 比较文件的不同

diff a.dat b.dat -y -W 50 -y表示并列输出, -W表示列宽

diff a.dat b.dat -u -u表示以合并的试显示不同的行

13. shell数学运算

a=2

let a++ //自加

let a-- //自减

let a+3

a=2

b=3

let c=a+b

echo $c

let c+=2

echo $c

--------------

a=2;b=3

c=$[ $a + $b ]

d=$((a + b))

e=`expr 3 + 4`

expr 5 \* 4

echo $c

-----------------

14. 数组定义(索引值以0开始)

a=("a" "b" "c")

b=(1 2 3 4)

echo ${a[2]}

echo ${b[3]}

c[0]="a"

c[1]="b"

echo ${c[1]}

echo ${!a[*]} #列出索引列表

echo ${!a[@]} #列出索引列表

15. 延时4秒 sleep 4

16. 压缩连续的空白行 : cat -s test.dat

显示行号 : cat -n test.dat

显示不可见字符:cat -v test.dat

cat -v test.dat | tr -d "^M"

移除空白行 : cat test.sh | tr -s '\n'

17. find [files or dirctory] [options]

1.  find game/  new*  查找game下包含new的所有文件

find etlTask/* -name "*at2tab*"

2 find game/ -name 'data'  查找game目录下,文件名为data的文件或目录

find ./* ! -name 'data' 不包含data的

多条件查找

find $subDir/ \( -name api.kkmh.com80_comic_refactor_server* -o -name api.kkmh.com80_topic_backend* -o -name ${month}* \) >> $baseDir/dataRep/comic$month".dat"

3 find newUserPay "new" | xargs  grep "input"  搜索newUserPay目录下 包含 "new"文件名的 ,包含 input字符的行

4 删除找到内容

18. xargs 将标准输入转换为命令行参数,也可将单行变为多行

cat dataTest.dat | xargs

cat dataTest.dat | xargs -n 3 换成3行

echo "a#b#c#d" | xargs -d "#"

find ./* "*.dat" | xargs cat | wc -l

19. tr 命令对标准输入,进行替换、删除及压缩,注意,它只能对标标准输入,不能对参数

原理:tr 将一个集合,映射到另一个集合

替换 :echo "HELLO " | tr 'A-Z' 'a-z'

删除 :

echo "abcda" | tr -d 'a' 删除字符串a,

echo "abcdefga" | tr -d 'a-c' 删除a至c之间的字符

tr -d '\n\t' 删除回换行

tr -s " " 删除空格

-c [set] 设定补集 echo "a1b2c3" | tr -d -c "0-9" 将非0-9的内容输出

cat dataTest.dat | $[ $(tr '\n' '+') 0 ] 将数字列相加

20. 文件校验和 : md5sum dataTest.dat

21. comm 可求两个文件的交集、差集,及求差,计算前需要对两文件进行sort排序

comm a.dat b.dat 对经sort排序过的两个文件进行排序,输出以 \t 分割,第一列为仅第一个文件 中出现,第二列为仅第二文件中出现,第三列为两文件交集

-1、-2、-3为删除输出列,comm a.dat b.dat -1 -2 仅输出第三列

comm a.dat b.dat -3 | sed 's/\t//g' 将两个文件各自有的,输出合并。

22. pushd . 将当前路径加入栈,popd . 输入栈中记录的目录

23. grep 匹配

grep -c "a" a.dat -c 计算匹配文本的行数

grep -v "a" a.dat -v 找出不匹配的内容 inverse

grep "a" . -R -n 递归匹配内容

grep -i aa dataTest.dat -i 忽略大小写

grep -e "aa" -e "b" dataTest.dat 多个匹配样式

egrep "@URL:|@FILTER:|@CONTENT:" 匹配多个模式,同时显示

grep -E ‘abc|xyz’ 匹配多个模式

grep "相关错误讯息\|正确\|文件过期" $report_log 多个条件或

grep ^[1-9]*$ 正则所有数字,不加引号

24. 迭代文件每一行

while read line;

do

echo $line

done < dataTest.dat

或 : cat dataTest.dat | while read line; do echo $line; done

25. 列出所有端口信息 lsof -i

26. history 列举近期使用的命令

27. watch 监视命令输出 watch 参数 命令

-n或--interval watch缺省每2秒运行一下程序

-d或--differences 用-d或--differences 选项watch 会高亮显示变化的区域

每隔一秒高亮显示网络链接数的变化情况 : watch -n 1 -d netstat -ant

每隔一秒高亮显示http链接数的变化情况 : watch -n 1 -d 'pstree|grep http'

监测当前目录中 gz 的文件的变化 :

watch -d 'ls -l| grep gz'

或者 watch du -b weibo-* (可用)

watch -n 2 -d wc -l weibo-*

watch ls . 监视当前目录

ls data/ | wc -l | xargs watch 监视目录文件 个数

watch du -k 7DayDevice.dat 监视文件大小变化

28. which 命令用于查找某条命令的位置 which hadoop

whereis 类似于which

whatis chown 查询命令的作用

29. vim 全选 ggVG ,全选复复制 ggyG

多行选中 : 按下大写V

多行注释 :1. 进入vi/vim编辑器,按CTRL+V进入可视化模式(VISUAL BLOCK)

2. 移动光标上移或者下移,选中多行的开头

3. 选择完毕后,按大写的的 I 键,此时下方会提示进入“insert”模式,输入你要插入的注释符

4. 最后按ESC键,你就会发现多行代码已经被注释了

5. 删除多行注释的方法,同样 Ctrl+v 进入列选择模式,移到光标把注释符选中,按下d,注释就被删除了

30.vim全局替换替换命令:

:%s/源字符串/目的字符串/g

31. 得到当前时间戳 date +%s

date -d "2017-12-01 00:00:00" +%s

时间戳转换为日期 date -d @1496198664

32 printf "%-5s,%4.2f" abcde 5.987 格式化输出,与echo类似

33. read abc #等待读取输入,直到回车后表示输入完毕,并将输入赋值给变量abc

read one two three #在控制台输入1 2 3,它们之间用空格隔开。

#echo "one = $one, two = $two, three = $three"

34. 别名就是提供一种便捷的方式来完成某些长串命令的操作。省去不必要的麻烦,提高效率。一般可以是函数或者alias命令来实现。

alias vi='vim'

35. wget http://www.linuxde.net/testfile.zip

wget --limit-rate=300k http://www.linuxde.net/testfile.zip

以下的例子是从网络下载一个文件并保存在当前目录

36. nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!

37. 查看系统类型 cat /etc/issue

38. top 命令查看系统运行进程状况

按下 1 键,可以查看CPU状态

top -p 8943 显示指定进程号

39. gzip压缩 :gzip a.dat 可得到a.dat.gz

gip解压 gunzip a.dat.gz 可解压该文件, 或gzip -d a.dat.gz

查看压缩内容:gzip -l a.dat.gz

递归压缩目录 : gzip -rv test 递归解压:gzip -rd test

使用 zip 压缩

zip -r bossData.zip bossData/

打包压缩命令:        tar -zcvf bigFile2Small.tar.gz part/

查看压缩包文件:     tar -ztvf small.tar.gz

解压文件                   tar -zxvf /tmp/etc.tar.gz  /usr/local/src

gzip -d **.gz

unzip yasuo.zip

40. date获取时间

1.获取当前时间

DATE=`date +%Y-%m-%d`

2.获取前一天时间

DATE=`date -d "-1 day" +%Y-%m-%d`

old_date=$(date -d "1 days ago" +%Y-%m-%d)

DATE=`date -d "-7 day" +%Y-%m-%d`

startTime=`date +%Y-%m-%d" "%H:%M:%S`

3 获取前一小时

date -d "2019-03-01" +%Y%m%d # 日期格式化 ,输出为 20190301

date -d "+3 days 2019-03-01" +%Y%m%d # 日期格式化 ,输出为 20190304

date -d "1 hours ago 2010-01-11 13:24:59"

date -d "1 hours ago" +%Y%m%d%H

nowDate=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`

4 获取前一个月

date -d "last month" +%m

41. ps命令

显示所有进程信息,连同命令行 ps -ef

列出目前所有的正在内存当中的程序 ps -aux

42. nc 命令 netcat 内网文件传输

查看端口内容 : (echo stats;echo quit) | nc 10.75.57.23 11234 | grep "baoquan.in.items"

a.接收端启动命令: nc -l 2389 > flumeTest.tar.gz

b.发送端启动命令:nc 10.9.33.117 2389 < flumeTest.tar.gz

43. column 命令:用来格式化列信息

column [-tx] [-c columns] [-s sep] [file ...]

mount | column -t

ll | column

44. sort 命令

按内存资源的使用量对进程进行排序 : ps aux | sort -rnk 4

按 CPU 资源的使用量对进程进行排序 : ps aux | sort -nk 3

45. script 命令可以用来记录所输入的命令,等exit时输出结束

46. stat 获取文件具体时间 stat tmp2.dat

Access: 2017-09-25 09:46:04.000000000 +0800

Modify: 2017-09-25 09:45:34.000000000 +0800

Change: 2017-09-25 09:45:34.000000000 +0800

[search@10 qi-user_type-format]$ stat tmp2.dat | grep Change

Change: 2017-09-25 09:45:34.000000000 +0800

47. #*/ 与 ##*/

#*/ : 删掉第一个 / 及其左边的字符串

##*/ 得到最后的内容

例如:a="a/b/c/d/e/f/g/a.txt",

b=${a#*/} ---> b/c/d/e/f/g/a.txt

c=${a##*/} ---> a.txt

48. exit

exit 0 : 上一条命令执行成功,则退出脚本

exit 1 : 上一条命令执行失败,则退出脚本

exit $? : 根据上一条命令的退出码退出脚本,脚本常用

49. 获取时间

DATE=`date +%Y-%m-%d`

DATE=`date -d "-1 day" +%Y-%m-%d`

DATE=`date -d "-7 day" +%Y-%m-%d`

date -d "1 hours ago 2010-01-11 13:24:59"

date -d "1 hours ago" +%Y%m%d%H

nowDate=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`

date -d "last month" +%m

date "+%s" 时间戳

50. 计算任务运行时间

start=$(date +%s)    #开始时间

retrievalHbase $inputFile  $type $fin alResultDir

end=$(date +%s)    #结束时间

time=$(( $end - $start ))

echo $time

51 同时杀死多个任务

ps -ef | grep off_setqueue.php | awk '{print $2}' | xargs kill -9

52 awk 把字符串数据按数值输出

(echo stats;echo quit) | nc 10.77.104.65 11233 | grep "" | awk -F " " '{tmp=$3};END{tmp=tmp+0;print tmp}'

53 删除队列名

printf 'delete contrib_async_mq+sub1+sub3\r\n'|nc 10.73.12.198 11233

print 'delete evaluate+topic_pic\r\n' | nc 10.77.104.194 11233

54 dirname 得到当前目录名

basename 得到文件名

baseDir=`cd $(dirname $0); pwd`

filePath=$(cd "$(dirname "$0")/../.."; pwd)

basename /data1/data_final/user_fans.txt

55 sleep

sleep 1 睡眠1秒

sleep 1s 睡眠1秒

sleep 1m 睡眠1分

sleep 1h 睡眠1小时

57 给邮箱发邮件

echo "file num is 100" | mail -s "topicNumAlarm" baoquan3@staff.weibo.com

mail -s "话题推荐数据推送报表-"$fileTime $users < $baseDir/dataRep/mail.dat

加附件

echo "file num is 100" | mail -s "topicNumAlarm" -a uid.dat baoquan3@staff.weibo.com

显示表格

formail -I "From: 962543810@qq.com" -I "To:baoquan3@staff.weibo.com" -I "MIME-Version:1.0" -I "Content-type:text/html;charset=zh_CN.utf-8" -I "Subject:邮件标题" < out.dat | /usr/sbin/sendmail -t "baoquan3@staff.weibo.com"

formail -I "From: search@10.73.12.132" -I "To:$users" -I "MIME-Version:1.0" -I "Content-type:text/html;charset=zh_CN.utf-8" -I "Subject:话题推荐数据推送报表-"$fileTime < $baseDir/dataRep/mail.dat | /usr/sbin/sendmail -t "$users"

mutt -s "media" -e 'set content_type="text/html set charset="utf-8"' -c $users -a $outFile < $tableFile

58 多行注释:

进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来

按大写字母I,再插入注释符,例如//

按esc键就会全部注释了

59 取消多行注释:

进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列

按字母j,或者k选中注释符号

按d键就可全部取消注释

60 split

-C: 文件大小 ; -l : 行数; -a :指定后缀长度 -d : 后缀以数字形式

61 ln 链接命令

ln -s /data1/minisearch/hadoop-baoquan3/test/exportDate.dat tmp.dat

它表示 : 软链接文件 tmp.dat 是指向 /data1/minisearch/hadoop-baoquan3/test/exportDate.dat

ln -s 【源文件】【目标文件】

-s    创建软链接

不加 -s 创建硬链接

62 for 循还

# 按数字循环

for i in {0..99}

按固定列宽

for i in $(seq -f "%02g" 0 24)

数组

selectIndex=("754" "730" "766" "758" "744" "797" "735" "719")

for i in ${selectIndex[@]};

-----------------------

len=${#INDEX[@]}

for((i=0;i<len;++i))

do

echo ${INDEX[$i]}","${PERCENT[$i]}

63 求每个月天数

cal 7 2003 | sed '/^$/d' | awk '{print $NF}' | tail -1

64 脚本互斥锁

flock -xn ./lock.gene1 -c "geneConf.sh aa bb"

65 输出小数

awk '{ if($1 == 0){print $2/1}else{printf "%.6f",$2/$1} }'

lineNum=`cat $baseDir/dataRep/tmp.dat | awk '{a+=$3;b+=$4;c+=$5;d+=$6}END{e=c/a;f=0;if(c!=0){f=d/c};printf "%d\t%d\t%d\t%d\t%.4f\t%.4f",a,b,c,d,e,f}'`

lineNum=`cat $inFile | awk '{a+=$3;b+=$4;c+=$5;d+=$6}END{e=c/a;f=0;if(c!=0){f=d/c};printf "'$lineDate'\t'$lineType'\t%d\t%d\t%d\t%d\t%.4f\t%.4f",a,b,c,d,e,f}'`

66 wait 命令

wait命令可以使当前shell进程挂起,等待所指定的由当前shell产生的子进程退出后,wait命令才返回。wait命令的参数可以是进程ID或是job specification,如

sleep 3 &

[3] 869

wait 869

wait命令一个很重要用途就是在Bash shell的并行编程中,可以在Bash shell脚本中启动多个后台进程(使用&),然后调用wait命令,等待所有后台进程都运行完毕,再继续向下执行。如

command1 &

command2 &

wait

wait $! #$!表示上个子进程的进程号,wait等待上一个子进程退出

67 惊叹号

!!代表了上一条执行的命令。可以看到,当输入两个感叹号时,它显示上条命令的同时会执行上一条命令。

linux 常用 shell 命令示例参考相关推荐

  1. 八、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(中)

    @Author : Runsen @Date:2020/9/11 文章是Runsen在Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到C ...

  2. 七、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(上)

    @Author : Runsen @Date:2020/9/11 文章是Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到CSDN中,这里 ...

  3. Linux基础(2)--Linux常用shell命令

    Linux常用shell命令 显示命令 查看当前工作路径 切换目录 清屏 显示和配置网络属性 新建文件夹 删除命令 压缩和解压命令 拷贝命令 帮助命令man 显示命令 – 命令:ls – 参数:a,l ...

  4. linux常用shell命令面试,shell经典笔试题目总结

    shell经典笔试题目总结 守望者整理了一些高手的博客记录的shell面试题分享给大家,有些比较有意思,帮助大家面试或则学习shell编程的学习例子 一 文件内容如下: 100 a         1 ...

  5. linux常用shell命令之文件操作命令

    # touch 新建空文件,或更新文件时间标记 touch path/filename user@computer: ~$ touch myfile # 在当前目录下新建myfile user@com ...

  6. Linux常用shell命令总结

    Linux shell命令: ifconfig  查看本地IP地址 ls dir 显示当前目录下的文件和文件夹 cd 目录 进入某个目录 cd .. 返回上一层目录   cat 文件名 输出文件内容到 ...

  7. linux常用shell命令之目录操作命令

    # pwd 查看当前所在目录 user@computer: ~$ pwd /home/user 复制代码 # cd 跳转到目标目录 user@computer: ~$ cd . # 到本目录 user ...

  8. linux shell 命令记录,linux常用shell命令记录

    获取本机内网IP /sbin/ifconfig | grep "inet addr" -m 1 | cut -d ":" -f 2 | cut -d " ...

  9. Linux 基础操作、常用shell命令、vi常用命令、man帮助手册

    Linux 基础操作.常用shell命令.vi常用命令.man帮助手册 一.简述 记录简单的Linux 基础操作.常用shell命令.vi编辑器常用命令.man帮助手册的使用. 二.Linux 基础操 ...

最新文章

  1. 《神经架构搜索NAS》最新进展综述,25页pdf
  2. Spring Cloud:查看注册到Eureka上的应用信息
  3. C# 中是否支持 Like 和 ln 条件的参数化查询 ?
  4. [vue] vue部署上线前需要做哪些准备工作?
  5. oracle如何检查是否rac,Oracle RAC 状态检查
  6. Maven : jenkins 报错 solution will not be attepmted utils the update interval of nexus has elapse
  7. WPF Grid布局
  8. 阻止系统自动睡眠的小软件,附C#制作过程
  9. 二维码生成器 python excel_python 自动生成excel
  10. VOC2007和VOC2012数据集下载地址
  11. 16元日薪,从阿里云雇佣一个专家阿里云中小企业AI产品码栈解析
  12. MAC使用Charles,代理后,部分网页无法打开解决方法
  13. Ubuntu下装codeblocks
  14. JavaScript中unshift() 方法
  15. 数据分析 第六讲 pandas
  16. Linux---Apache网页优化---网页压缩
  17. 【图论训练】天气晴朗的魔法【最小生成树】
  18. IBM p系列小型机日常维护及故障排除时常用命令(检查IBM设备状态汇总)
  19. 痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景与架构
  20. VMware虚拟机使用无线网络

热门文章

  1. java设计模式 课后习题参考答案 第 2 章 面向对象设计原则 清华出版社 刘伟
  2. 联想u310 u410已组好RAID即启用了IRST而因意外不能进入系统要(重装系统方法)
  3. win7电脑右键菜单选项的顺序怎么调整
  4. 显示被病毒隐藏的文件夹
  5. jquery input值发生变化时,时时触发事件 input propertychange 、 cheng
  6. javascript函数习题
  7. 如何阅读公司项目代码
  8. 寻找各类前端html样式模板
  9. 内核空间和应用空间的数据拷贝(copy_to_user copy_from_user)
  10. html 播放wma,在线播放器网页代码大全(wma,mp3,wmv,avi,rm)