文档章节

关于Shell的一些常用命令

justphp
 justphp
发布于 2015/05/07 12:28
字数 1668
阅读 75
收藏 5
ls -lat 列出当前目录所有东东的东东
ls -lath 人看的大小
ls -F | grep "/$"只搞目录
ls -lR 包括子目录…
ls --ignore filename -lt 忽略某个


which,在PATH变量指定的路径中,搜索看某个命令是否存在,以及执行的到底是哪一个位置的命令。
whereis, 搜索程序名,而且只搜索二进制文件、man说明文件和源代码文件。如果省略参数,则返回所有信息。
locate,在系统特定的数据库中指定文件名查找,譬如CentOS它只在每天某个时间把新增的文件更新到/var/lib/mlocate/mlocate.db这个数据库,定时见/etc/cron.daily/mlocate.cron,strings可以看到部分内容
还有一些好用的工具如tree,file,type等


-mtime 修改时间
-type 文件类型
-mmin 修改分钟
-perm 权限
-user 用户
-group 组
-maxdepth 搜索目录的层级

更多的东西请找你男人,man



find . -maxdepth 1 -type f  ! -name "*.txt"
在层级为1的目录(当前目录)查找不是.txt的普通文件
find . -maxdepth 1 -type f  \( -name "*.txt" ! -name "haha.txt" \)
查找.txt但不包括类似.haha.txt这样的文件
find . -maxdepth 1 -type f  \( -name "*.php" -o -name "*.txt" \)
查找.php或者.txt的文件


-exec会将find匹配到的所有文件一次性接收过来操作,不幸的是,有些系统对能够传递给 exec的命令长度有限制,会出现溢出错误,譬如提示"Argument list too long"
getconf ARG_MAX 看看参数的字节限制
那怎么办?


xargs xargs命令每次只获取一部分文件而不是全部,不像 -exec选项那样。这样它可以先处理 最先获取的一部分文件,然后是下一批,并如此继续下去。
find . -name "*.txt" | xargs -n 200 ls -lat
find . -name "*.txt" | xargs -I file -n 1 mv file file.log  更好理解的表达


find查找避开某个目录
find . -path "./subdir*" -prune -o  -type f -name "*.txt" -print
查找/update/目录下但不包括子目录./subdir下面的东西
上面是啥意思? 个人理解:
别被-path迷惑,其实-path就是-wholename,在这里用-wholename  "./subdir*" 一样的。
-depth与-prune冲突,有-depth的话-prune失效
可以用伪代码表示:
find ... 得到好长好长一串。。。
在这好长一串里
if (-path "./subdir*")
then
          -prune #切切切
else (找-type f -name "*.txt")
          -print
避开多个目录
find . -path './subdir' -prune -o -path './subdir1' -prune -o -path './subdir2' -prune -o -path './subdir3' -prune -o -name "*.txt" -print
简写成下面的:
find .  \( -path './subdir' -o -path './subdir1'  -o -path './subdir2'  -o -path './subdir3'  \) -prune -o -name "*.txt" -print


 grep -n a *.txt
显示匹配行及行号
 grep -c a *.txt
只输出匹配行的计数
 grep -v a *.txt
不包含匹配
 grep '\<abcd\>' *.txt 
精确匹配a
grep '[A-Z][a-z][0-9]' *.txt
打印类似"Ab1"的内容,支持posix正则
 grep '[a-z]\{4,\}log' *.txt
打印小写字母重复四次以上的行,如aaaa,aabbc等
 grep -v '^$|^#' *.txt
过滤空行与#开头的行(通常是注释)
grep –A5 –B5 'haha' *.txt
打印匹配到'haha'的行以及上5行、下5行
grep '192.168.100.34:3306|pfantasy' –R /usr/local/wwwroot/ 
也可以写成egrep -e '192.168.100.34:3306' -e 'pfantasy' -R /usr/local/wwwroot/
 grep '192.168.100.34:3306.*pfantasy' -R /usr/local/wwwroot/


awk语句都由模式和动作组成
模式部分决定找对象的时机,一般由条件语句或者正则组成,包括两个特殊字段:BEGIN{}和END{}
动作就是在某些情况下该干些啥。。。
BEGIN{} 在任何文本浏览动作之前,一般用作制表,END{} 用来在完成文本浏览后,通常用作统计
因此一般的结构是:awk 'BEGIN{预定义点啥}{正式干点啥}{又干点啥}...END{干完了总结汇报点啥}'


$1 $2 $3 ... 
$0代表全部,动作缺省情况下打印全部
通常域的分隔符是空格或者\t
awk 'BEGIN{print "Hello---------\n"}{print $1,$2}END{print "ByeBye----------\n"}' a.txt


动作部分可能要点条件或者循环啥的
awk '{if (xx) print $0}'a.txt
awk '{for (oo) print $0}'a.txt
关于匹配
先来一发 ~
awk '{if ($2 ~ /D/ && $3 ~ /[Hh]aoren/) print $0}' a.txt
再来一发 ==
awk '{if ($2 ~ /D/ && $3 == "Haoren") print $0}' a.txt
其实以上两个可以写成,因为动作是默认print的
awk '$2 ~ /D/ && $3 ~ /[Hh]aoren/' a.txt
awk '$2 ~ /D/ && $3 == "Haoren"' a.txt
awk 'BEGIN{IGNORECASE = 1;}{if ($2 ~ /D/ && $3 ~ /[Hh]aoren/) print $0}' a.txt 忽略大小写


sed跟awk一样,也是流编辑器
sed有两个空间
pattern space 模式空间,sed在没有-n(suppress automatic printing of pattern space)参数时都默认打印模式空间。一般每一行记录都只路过模式空间一次。
hold space  暂存空间,中转地方,譬如把模式空间的东东往暂存空间存一下,然后模式空间注入新的东西,一会再去暂存空间取出来。


sed常用的内部操作
n   读取下一行替换当前模式空间的行。
N  读入下一行,追加到模式空间行后面,此时模式空间有两行但只是一坨东西。    
h  把模式空间里的行拷贝到暂存空间。    
H  把模式空间里的行追加到暂存空间。    
g  用暂存空间的内容替换模式空间的行。
G  把暂存空间的内容追加到模式空间的行后。    
X  将暂存空间的内容与模式空间里的内容互换。    
 !  对所选行以外的所有行应用命令。
p  打印当前模式空间的内容。
d   删除模式空间,开始下一个从头开始的操作。
D   删除第一个在模式空间里的换行符前段内容,开始下一个从头开始的操作。
$  匹配最后一行


一些练习
每一行后加一个空行
用一个保持为NULL(里面包括了\n)的东东来追加到模式空间后面
sed 'G' a.txt
在匹配行前加入一个空行
由于在行前加,实际上是先打印NULL再打印行内容,因此需要x交换一个NULL过来。匹配行之后,把模式空间的东西扔到暂存空间(x),于是模式空间当前为NULL,把它打印,然后换回来,模式空间为之前的内容,自动打印模式空间。
sed '/aaa b/{x;p;x;}' a.txt
打印奇数行
有跳行的操作,要跟n/N有关了,不打印就是删除就d吧
sed '{n;d}' d.txt
sed -n '{p;n}' d.txt
sed '0~2d' d.txt
打印偶数行
sed -n '{n;p}' d.txt
sed '1~2d' d.txt
偶数行后加一个空行
sed '{n;G}' d.txt
偶数行置空
sed '{n;g}' d.txt


nohup command &
screen
crontab
expect

© 著作权归作者所有

上一篇: VIM一些用法
下一篇: Gvim 个性化配置
justphp
粉丝 7
博文 13
码字总数 6324
作品 0
深圳
程序员
私信 提问
Linux学习记录--shell script

shell script shell script是利用shell的功能所写的一个程序,这个程序使用纯文本文件,将一些shell的语法和命令写在里面,搭配正则表达式,管道命令与数据流重定向等功能,达到我们想要的目...

tiankefeng0520
2014/03/14
0
0
Shell脚本基础1—认识Shell

什么是Shell shell是一个很多命令的集合,一个内核。shell脚本就是通过一些相关shell命令的组合来达到完成一个任务的文件,文件一般是以,sh结尾。查看当前系统支持的shell 使用“Ctri+l”快捷...

小八路2222
03/22
0
0
Linux SHELL常用命令,你能想到的都在这

  小编友情提示:先收藏后阅读,满满都是干货   这里对Linux Shell中的一些常用命令进行介绍,注意不是linux 命令哦!废话不多说,接着看您就明白了,Come On。   break命令   break...

恒生开发者社区
2017/03/15
0
0
对话 UNIX: 使用 fish!

英语是一种令人困惑的语言。例如,请考虑 moon 和 good 这两个单词。对外行人而言,这两个单词似乎应该是押韵的,但是前者的读音是 /mun/(根据 International Pronunciation Alphabet),而...

红薯
2009/02/21
621
2
Android adb常用命令

Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 可以通过下列几种方法加入adb: 在设备上运行shell命令 通过端口转发来管理模拟器或设备 从模拟器或设备...

helloOne
2016/06/15
12
0

没有更多内容

加载失败,请刷新页面

加载更多

REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
1
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
1
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
2
0
今天的学习

今天学到了<select></select>标签: <label for="unittype">Select unit type: </label><select id="unittype" name="unittype" autofocus > <option value="1"> Miner </option> ......

墨冥
昨天
2
0
程序员随想-关于分享

最早的时候,文字是贵族这些上层人士才会学习的,底层人士没有资格和渠道去学习,同样用文字、图像等其他载体承载的知识大部分也只有贵族阶层才能享受的。后来有了造纸术、印刷术,成本降低,...

Lubby
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部