关于Shell的一些常用命令

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

转载于:https://my.oschina.net/justphp/blog/411731

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Netty撸一个心跳机制和断线重连!

来源&#xff1a;www.jianshu.com/p/1a28e48edd92心跳机制何为心跳所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.注&#xff1a;心跳包还有另一个作用&#xff0c;经常被忽略&#xff0c;即&…

ThreadLocal线程范围内的共享变量

模拟ThreadLocal类实现&#xff1a;线程范围内的共享变量&#xff0c;每个线程只能访问他自己的&#xff0c;不能访问别的线程。 package com.ljq.test.thread;import java.util.HashMap; import java.util.Map; import java.util.Random;/*** 线程范围内的共享变量* * 三个模块…

Java中操作Excel的3种方法,太好用了!

一、介绍在平时的业务系统开发中&#xff0c;少不了需要用到导出、导入excel功能&#xff0c;今天我们就一起来总结一下&#xff0c;如果你正为此需求感到困惑&#xff0c;那么阅读完本文&#xff0c;你一定会有所收获&#xff01;二、poi大概在很久很久以前&#xff0c;微软的…

代理服务器Tengine的研究与测试

代理服务器Tengine的研究与测试一、Tengine介绍1.首先要知道什么Nginx1)Nginx&#xff08;发音同 engine x&#xff09;是一款轻量级的Web 服务器&#xff0f;反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;并在一个BSD-like 协议下发行。由…

不错!SpringBoot发布Jar包优化瘦身指南!

概要说明随着Spring Boot的流行&#xff0c;大家体验到只需构建输出一个jar文件&#xff0c;然后只需一个java -jar命令就能部署运行应用的爽快。常见一些单体应用随着项目规模的扩展单个jar文件的大小越来越大&#xff0c;动辄两三百MB。如果再引入微服务架构&#xff0c;动辄…

CountDownLatch:别浪,等人齐再团!

一入王者深似海&#xff0c;从此对象是路人。哈喽观众老爷们大家好&#xff0c;我是战神吕布字奉先&#xff0c;今天给大家来一部吕布的教学视频&#xff01;咳咳&#xff0c;不对。大家好&#xff0c;我是磊哥&#xff0c;今天给大家来一篇 CountDownLatch 的文章。在开始之前…

附彩蛋|Spring Security 竟然故意延长登录时间?知道真相的我惊呆了!

2011年12月21日&#xff0c;有人在网络上公开了一个包含600万个CSDN用户资料的数据库&#xff0c;数据全部为明文储存&#xff0c;包含用户名、密码以及注册邮箱。事件发生后CSDN在微博、官方网站等渠道发出了声明&#xff0c;解释说此数据库系2009年备份所用&#xff0c;因不明…

DirectX 矩阵

基础&#xff1a; 下标&#xff1a;第一个下标为该元素所在行的索引&#xff0c;第二个下标为该元素所在列的索引。如下图所示 行向量和列向量&#xff1a;只有单行的向量称为行向量&#xff0c;只有单列的称之为列向量。 相等 维数和元素都相等 数乘(与标量相乘) 每一个元素与…

为什么阿里内部不允许用Executors创建线程池?

来源&#xff1a;cnblogs.com/zjfjava/p/11227456.html1. 通过Executors创建线程池的弊端在创建线程池的时候&#xff0c;大部分人还是会选择使用Executors去创建。下面是创建定长线程池&#xff08;FixedThreadPool&#xff09;的一个例子&#xff0c;严格来说&#xff0c;当使…

RabbitMQ中7种消息队列和保姆级代码演示!

blog.csdn.net/qq_32828253/article/details/110450249七种模式介绍与应用场景简单模式&#xff08;Hello World&#xff09;做最简单的事情&#xff0c;一个生产者对应一个消费者&#xff0c;RabbitMQ相当于一个消息代理&#xff0c;负责将A的消息转发给B应用场景&#xff1a;…

CyclicBarrier:人齐了,老司机就发车了!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;上一篇咱讲了 CountDownLatch 可以解决多个线程同步的问题&#xff0c;相比于 join 来说它的应用范围更广&#xff0c;不仅可…

iOS平台快速发布HT for Web拓扑图应用

iOS平台一直是封闭的生态圈&#xff0c;iOS开发者要缴纳年费加入开发者计划才可进行iOS平台的APP开发测试&#xff0c;所开发的APP需要上传到App Store经过苹果审核以后才可对外发布。如果要开发企业内部应用&#xff0c;则要缴纳更高的费用购买企业账户才可以。 对于现在火如荼…

事务注解 @Transactional 失效的3种场景及解决办法

Transactional失效场景第一种 Transactional注解标注方法修饰符为非public时&#xff0c;Transactional注解将会不起作用。例如以下代码&#xff0c;定义一个错误的Transactional标注实现&#xff0c;修饰一个默认访问符的方法&#xff1a;/*** author zhoujy**/ Component pub…

Android的多语言实现

文章转自&#xff1a;http://blog.csdn.net/barryhappy/article/details/23436527 以前就知道Android的多语言实现很简单&#xff0c;可以在不同的语言环境下使用不同的资源什么的&#xff0c;但是一直没有实际使用过。 最近公司的项目要用到多语言于&#xff0c;是就研究了一下…

厉害了,自己手写一个Java热加载!

热加载&#xff1a;在不停止程序运行的情况下&#xff0c;对类&#xff08;对象&#xff09;的动态替换。Java ClassLoader 简述Java中的类从被加载到内存中到卸载出内存为止&#xff0c;一共经历了七个阶段&#xff1a;加载、验证、准备、解析、初始化、使用、卸载。接下来我们…

公司新来的小可爱,竟然把内存搞崩了!

ThreadLocal使用不规范&#xff0c;师傅两行泪组内来了一个实习生&#xff0c;看这小伙子春光满面、精神抖擞、头发微少&#xff0c;我心头一喜&#xff1a;绝对是个潜力股。于是我找经理申请亲自来带他&#xff0c;为了帮助小伙子快速成长&#xff0c;我给他分了一个需求&…

理解Node.js的event loop

为什么80%的码农都做不了架构师&#xff1f;>>> 关于Node.js的第一个基本概念是I/O操作开销是巨大的&#xff1a; 所以&#xff0c;当前变成技术中最大的浪费来自于等待I/O操作的完成。有几种方法可以解决性能的影响&#xff1a; 同步方式&#xff1a;按次序一个…

硬核|定时任务的10种实现方案,满足你的不同需求!

最近有几个读者私信给我&#xff0c;问我他们的业务场景&#xff0c;要用什么样的定时任务。确实&#xff0c;在不用的业务场景下要用不同的定时任务&#xff0c;其实我们的选择还是挺多的。我今天给大家总结10种非常实用的定时任务&#xff0c;总有一种是适合你的。一. linux自…

Semaphore自白:限流器用我就对了!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;大家好&#xff0c;我是 Semaphore&#xff0c;我的中文名字叫“信号量”&#xff0c;我来自 JUC 家族&#xff08;java.uti…

Android Activity和Intent机制学习笔记

文章转自&#xff1a;http://www.cnblogs.com/feisky/archive/2010/01/16/1649081.html Activity Android中&#xff0c;Activity是所有程序的根本&#xff0c;所有程序的流程都运行在Activity之中&#xff0c;Activity具有自己的生命周期&#xff08;见http://www.cnblogs.com…