文档章节

Linux Shell 命令总结

f
 fjabing
发布于 2014/04/30 15:25
字数 2225
阅读 236
收藏 17

1. 前言

本文介绍了常用的Linux shell命令,包括date、cut、sort、uniq、sed、vi、diff、find等,同时给出尽可能使用的实例以便于理解。

2. Linux shell命令

2.1 date

作用:获取或者设置日期

用法:date [选项] 显示时间格式(以+开头,后面接格式)

举例:

(1) 以固定格式显示时间:date + “%Y%m%d%H”

(2) 显示明天的日期:date -d “tomorrow” +”%Y-%m-%d”

(3) 显示前天的日志:date -d “1 days ago” +”%Y-%m-%d”

2.2 cut

作用:从输入文件或者命令的输出中析取出各种域

用法:cut –c{字符串范围} –d{字段间分割符} –f{字段索引编号}

举例:

(1)查看在线用户:who | cut –c1-8

(2)从系统文件/etc/passwd中获取用户名列表:cut –d: -f1 /etc/passwd

2.3. paste

作用:将多个域合并

用法:cut –d{字段间分割符}

举例:

paste –d’:’ filename1 filename2

2.4. sort

作用:排序

用法:

-t  指定分隔符, 默认为空格

-r 以降序来排列

-u 去掉重复行

-d 以字典序来排列,包括字母,数字,符号等

-n 以数字序来排列

+positon1 -positon2 从第position1 字段到position2字段,包括position1,不包括position2。positon1从0开始。

-k KeyDefinition 指定排序关键字。KeyDefinition 选项的格式为:

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

排序关键字包括任何以 FStart 变量指定的字段和 CStart 变量指定的列开头的字符及以 FEnd 变量指定的字段和

CEnd 变量指定的列结束的字符。Modifier 变量的值能够是 b、d、f、i、n 或 r。修饰符和同一字母的标志等价。

举例:

(1) 对/etc/passwd 文件的第三项进行排序(userid): sort -t: -k 3n /etc/passwd

(2) 基于ip地址对/etc/hosts文件排序: sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts

2.5. uniq

作用:对数据进行去重

用法:先要对数据进行排序,然后再去重

-d:输出重复行

-c:对数据进行计数

举例:

找出/etc/passwd文件中的重复用户名:sort /etc/passwd | cut –f1 –d: | uniq –d

2.6. sed

作用:编辑数据

用法:

sed command file

-n选项:指定行号或者行号范围,如果未指定,表示任意一行;用p表示打印

举例:

sed –n ‘-1,2p’ file.txt #显示前两行

sed –n ‘/UNIX/p’ filename #显示包含“UNIX“的行

d命令:删除数据

举例:

sed ‘1,2d’ intro #删掉前两行

sed ‘/UNIX/d’ intro #删掉包含“UNIX“的行

s命令:替换

举例

Sed ‘s/Unix/UNIX/g’ intro > temp #将文件intro中“Unix“替换为UNIX, 并将结果保存到temp文件中

2.7. vi

(1) 光标移动

nG:光标移至第n行首

n+:光标下移n行

n-:光标上移n行

n$:光标移至第n行尾

(2) 删除命令

do:删至行首

d$:删至行尾

ndd:删除当前行及其后n-1行

:n1,n2 d:将n1行到n2行之间的内容删除

(3) 搜索替换

/pattern:从光标开始处向文件尾搜索pattern

?pattern:从光标开始处向文件首搜索pattern

:s/p1/p2/g:将当前行中所有p1均用p2替代

:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代

:g/p1/s//p2/g:将文件中所有p1均用p2替换

(4) 复制粘贴

yy:复制当前行,将光标移动到某一行,p粘贴

n1,n2 co n3:n1为起始行,n2为结束行,n3为粘贴行(其中,co是copy的简称,也可以直接用copy代替)

(5) 文件保存与退出

:w :保存当前文件

:x :保存当前文件并退出

:q!:不保存文件并退出vi

(6) 多个文件之间的复制粘贴

先在开始处做标志mk (注:m是做标注的命令,语法是m[字母],[字母]为该行的标注)

然后在末尾用”ay k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)

其中a表示缓冲区a

然后用ex转义到你的文件B中,然后用”ap命令粘贴就行

即:vi 1.txt 2.txt mk“ay kex 2.txt ”ap

(7) vi切分窗口

:split two.c:打开另一个窗口并用该窗口编辑另一个指定的文件

:vsplit:垂直分割窗口

CTRL-W:跳转窗口

(8) 比较两个文件的不同之处

vimdiff 1.txt 2.txt

2.8. diff和patch

(1) diff命令

功能是用来比较两个文件的不同,然后记录下来,也就是所谓的 diff 补丁

选项

-r 是一个递归选项

-u 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。

(2) patch命令

patch 就是利用 diff 制作的补丁来实现源文件(夹) 和目的文件(夹) 的转换。

选项:

-p0 选项要从当前目录查找目的文件(夹)

-p1 选项 要忽略掉第一层目录,从当前目录开始查找。

-E  选项说明如果发现了空文件,那么就删除它

-R  选项说明在补丁文件中的 “ 新 ” 文件和 “ 旧 ” 文件现在要调换过来了(实际上就是给新版本打补丁,让它变成老版本)

举例:

单个文件:

diff –uN   from-file   to-file   >to-file.patch

patch –p0 < to-file.patch

patch –RE –p0 < to-file.patch

多个文件:

diff –uNr   from-docu   to-docu  >to-docu.patch

patch –p1 < to-docu.patch

patch –R –p1 <to-docu.patch

2.9. find

find pathname -options [-print -exec -ok ...]

(1) 含义解释

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

-print: find命令将匹配的文件输出到标准输出。

-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ {  } \;,注意{   }和\;之间的空格。

-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

(2) 选项

-name:按照文件名查找文件

-mtime -n +n:按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前

-newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件

-type:查找某一类型的文件,诸如:b – 块设备文件,d – 目录,c – 字符设备文件,p – 管道文件,l – 符号链接文件,f – 普通文件

-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找

(3) xargs

find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用.

(4) 举例

用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中

find . -type f -exec ls -l {  } \;

查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;

find / -type f -size 0 -exec ls -l {  } \;

用grep命令在所有的普通文件中搜索hostname这个词:

find . -type f -print | xargs grep “hostname”

2.10. 数学计算

(1) expr

expr可用于计算各种表达式的值,可包含字符串,逻辑运算和函数(但没有指数或者对数函数)。

加法:answer=`expr $c + $d`

减法:answer=`expr $c – $d`

乘法:answer=`expr $c \* $d`

减法:answer=`expr $c / $d`

(2) shell内部运算

shell自身可进行数学计算,使用shell内部函数的好处是,不用调用外部程序,从而减少外部内存使用量。

加法:answer=$(($c + $d))

减法:answer=$(($c – $d))

乘法:answer=$(($c * $d))

减法:answer=$(($c / $d))

(3) bc计算器

前面两种数学计算方法均是集中在整数计算上,而bc是一个实现任意精度的计算器,可通过设置scale(小数点后十进制位数),达到想要的精确度的结果。

加法:answer=`echo “$c + $d”|bc`

减法:answer=`echo “$c – $d”|bc`

乘法:answer=`echo “$c * $d”|bc`

减法:answer=`echo “$c / $d”|bc`

使用scale设置精度:

answer=`echo “scale=5;$c * $d”|bc`

若想使用三角函数,需要用-l选项激活bc,启动数学函数库:

answer=`echo “scale=5; c($d)”|bc -l`

3. 参考资料

(1) linux Sort命令使用方法介绍 (举例说明) :http://blog.hexu.org/archives/657.shtml

书籍《Unix Shell 编程(第三版)》

(2) http://vimcdoc.sourceforge.net/doc/usr_08.html#usr_08.txt

(3) http://blog.csdn.net/cww0403/archive/2009/09/08/4533022.aspx

(4) http://www.linuxsir.org/main/?q=node/137#2.2


本文转载自:http://dongxicheng.org/script/linux-shell/

f
粉丝 1
博文 70
码字总数 7656
作品 0
龙岩
私信 提问
Linux Shell 常用命令与目录分区的学习总结

很早就想根据自己的学习规律和遗忘规律,自己总结一下Linux/Unix系统的Shell命令,一来便于自己时常查询之用,二来也分享于各位博友 Linux shell是系统的用户界面,即命令行。它提供了用户与...

长平狐
2013/01/06
120
0
教会你Linux Shell自动交互的三种方法

你了解Linux系统么?你是Linux系统的应用者么?如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享一下。 一、背景...

魏邪乎
2014/02/13
237
0
16个桌面Linux用户必须要知道的Shell命令

有些人仍然会有这中愚蠢的想法,他们认为使用Linux就必须使用Linux shell命令。胡说!你可以不懂得任何Linux命令,比如说ps,grep,ls等,但是你仍然可以使用很多现代的Linux桌面发行版。 Li...

王振威
2012/05/06
15.8K
28
linux shell数据重定向(输入重定向与输出重定向)详细分析

导读小文:【http://www.ibm.com/developerworks/cn/linux/l-iotips/】 技巧:Linux I/O重定向的一些小技巧 简介: Linux I/O 重定向虽然很简单,但在脚本编写、系统管理时却要常常打交道,搞...

无明时空
2013/03/06
3.3K
0
Linux学习方法分享

Linux学习方法分享 随着Linux应用的扩展许多朋友开始接触Linux,对于刚接触Linux的人而严,不知从何处开始学起。以下是一位Linux系统管理员,在看了许多有关Linux的文档和书籍并为学习Linux...

不想留名
2014/06/14
851
2

没有更多内容

加载失败,请刷新页面

加载更多

堆”和“栈

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。...

SibylY
27分钟前
3
0
总结:Https

一、介绍 简单理解,https即在http协议的基础上,增加了SSL协议,保障数据传输的安全性。 它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式 ...

浮躁的码农
29分钟前
4
0
数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
今天
7
0
MySQL 表崩溃修复

MySQL日志报错 2019-10-19 13:41:51 19916 [ERROR] /usr/local/mysql/bin/mysqld: Table './initread_hss/user_info' is marked as crashed and should be repaired2019-10-19 13:41:51 1......

雁南飞丶
今天
6
0
Error和Exception

1.Error类和Exception类都是继承Throwable类 2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问...

大瑞清_liurq
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部