1、sort命令:
sort命令可以给文本进行排序。sort命令操作的是行。
shell中sort命令有3中执行模式,分别是排序文本,检查文件是否已经排序,合并文件。
2.sort的使用
语法:
sort[选项]...[文件]...
选项:
-b:忽略前面空格。
-c:测试文件是否已经排序。
-d:根据字典顺序排序,仅比较数字字母空格等字符。
-f:忽略大小写。
-i:仅比较可打印字符。
-n:纯数字排列
-R:根据哈希值随机排序。
-r:反向,颠倒顺序。
-k:定义排序关键字。原来的:第几个区间,与t相辅。
-t:分隔符
-m:仅仅合并已经排序好的文件,不执行排序操作。
-s:稳定的排序算法。
-o:排序结果写入文件,而不是标准输出到设备。
-u:相同的行只留一行
-M:月份
文件:
file:多个文件要使用空格分隔。
3.范例
3.1不加选项进行升序排序
直接执行sort,不加选项,默认根据第一列的信息进行排序。
3.2使用单行关键字排序-k
默认是根据第一列来排序,使用-k选项来定义排序的关键字,语法如下:
-kpos1[,pos2]
pos1表示起始位置,pos2表示结束位置。如果关键字的第一列相同,进行比较第二列。
-kpos并不是表示只比较pos列,而是比较从pos列,到行尾的列。
如何根据日志里面小时进行排序呢?(日志里的小时和日期写在一起,还有英文)
那就根据某列的第几个字符开始。格式如下:
-kpos1[.start][,pos2[.end]]
pos1表示起始位置,pos2表示结束位置。
start表示起始列的第几个字符。end表示结束列的第几个字符。
3.3根据关键字降序排序-r
默认的需要是升序排序,如果想倒叙排列,需要使用-r选项。
3.4数值列的排序-n
默认的排序是一个字符一个字符的比较。不能正确的比较出数值的大小,如果想比较出数值的大小需要使用-n选项。语法如下:两个等价
sort-n-k21.txt
sort-k2,2n1.txt
上面的默认的排序,下面的是数值排序。上面的就把排在了最下面。因为第一个字符9最大。
3.5自定义分隔符-t
如果分隔符不是空格或者制表符,需要使用-t选项来指定分隔符。
sort-t":"-r-k3/etc/passwd
3.6删除重复的行-u
使用-u选项,可以去掉重复的行,但是不知道为什么去不掉带空格的那行。
3.7根据多个关键字排序-k-k
根据第一个列升序,和第二列数字倒叙,应该怎么排。
sort-k1,1-k2,2rn1.txt
3.8合并文件
sort可以将两个文件合并,同时对文件内容进行排序,语法如下:
sortfile1file2...filen
2、ll和ls的区别:
ll和ls是我们在linux中经常使用的两个命令,这两个是有区别的,其中ll是CentOS等Linux默认支持,在debian中默认是不支持的别名,而ls命令则在大部分linux发行版中都支持,下面就这两个命令的区别详细说下。
ll列出来的结果详细,有时间,是否可读写等信息,象windows里的详细信息
ls只列出文件名或目录名就象windows里的列表
ll-t是降序,ll-t|tac是升序
ll不是命令,是ls-l的别ls命令可以说是linux下最常用的命令之一。
-a列出目录下的所有文件,包括以.开头的隐含文件。
-b把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c输出文件的i节点的修改时间,并以此排序。
-d将目录象文件一样显示,而不是显示其下的文件。
-e输出时间的全部信息,而不是输出简略信息。
-f-U对输出的文件不排序。
-g无用。
-i输出文件的i节点的索引信息。
-k以k字节的形式表示文件的大小。
-l列出文件的详细信息。
-m横向输出文件名,并以“,”作分格符。
-n用数字的UID,GID代替名称。
-o显示文件的除组信息外的详细信息。
-p-F在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通
文件;“/”表示目录;“
”表示符号链接;“”表示FIFOs;“=”表示套接字(sockets)。
-q用?代替不可输出的字符。
-r对目录反向排序。
-s在每个文件名后输出该文件的大小。
-t以时间排序。
-u以文件上次被访问的时间排序。
-x按列输出,横向排序。
-A显示除“.”和“..”外的所有文件。
-B不输出以“~”结尾的备份文件。
-C按列输出,纵向排序。
-G输出文件的组的信息。
-L列出链接文件名而不是链接到的文件。
-N不限制文件长度。
-Q把输出的文件名用双引号括起来。
-R列出所有子目录下的文件。
-S以文件大小排序。
-X以文件的扩展名(最后一个.后的字符)排序。
-1一行只输出一个文件。
–color=no不显示彩色文件名
–help在标准输出上显示帮助信息。
–version在标准输出上输出版本信息并退出。
只列出子目录
1.ls-F
grep/$或者aliassub=“ls-F
grep/$”(linux)
2.ls-l
grep“^d”或者ls-lL
grep“^d”(Solaris)
计算当前目录下的文件数和目录数
下面命令可以分别计算当前目录下的文件和目录个数:
#ls-l*
grep“^-”
wc-l—-tocountfiles
#ls-l*
grep“^d”
wc-l—–tocountdir
3、df命令:
df用来检查linux服务器的文件系统的磁盘空间占用情况。可以利用df来获取硬盘被占用了多少空间,剩多少空间。
功能:
显示指定文件的可用空间。如果没有文件名被指定,则所有当前被挂在的文件系统的可用空间将被显示。
默认情况下,磁盘空间将以1KB为单位进行显示,除非环境变量POSIXLY_CORRECT被指定,那样将以字节为单位显示。
常用选项:
-a,--all:全部文件系统列表
-B,--block-size=SIZE:指定分区块大小
-h:人类可阅读的方式显示
-i:以inode模式来显示磁盘使用情况
-k:区块为字节
-m:区块为字节
-l:只显示本地文件系统
--no-sync:忽略sync命令
-P:输出格式为POSIX
--sync:在取得磁盘信息前,先执行sync命令
-T:文件系统类型
-t文件系统类型只显示指定类型文件系统的磁盘信息
-x文件系统类型不示指定类型文件系统的磁盘信息
df:
第一列:代表文件系统对应的设备文件的路径名
第二列:给出分区包含的数据块(字节)的数目
第三,四列:分别是已用和可用的数据块数目
第三四列数目之和不等于第二列,这是因为缺省的每个分区都留了少量空间供管理员使用;即使遇到管理员空间已满的情况下,管理员仍能登陆和留有解决问题所需的
工作空间。清单中,Use%表示普通用户所占的百分比,既使这一数字达到百分之百,分区仍能留有管理员使用的空间。Mountedon表示文件系统的挂载点。
df-i:以inode来显示磁盘使用情况
df-ia:列出各文件系统i节点使用情况
df-t:显示指定类型磁盘
df-T:累出文件系统类型
4、du命令:
一、du:显示每个文件和目录的磁盘使用空间~~~文件的大小。
命令参数:
-a#显示目录中文件的大小单位KB。
-b#显示目录中文件的大小,以字节byte为单位。
-c#显示目录中文件的大小,同时也显示总和;单位KB。
-k、-m、#显示目录中文件的大小,-k单位KB,-m单位MB.
-s#仅显示目录的总值,单位KB。
-h#以KMG为单位显示,提高可读性~~~(最常用的一个~也可能只用这一个就满足需求了)
-x#以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L#显示选项中所指定符号链接的源文件大小。
-S#显示个别目录的大小时,并不含其子目录的大小。
-X#在文件指定目录或文件。
--exclude=目录或文件#略过指定的目录或文件。
-D#显示指定符号链接的源文件大小。
-H或--si#与-h参数相同,但是K,M,G是以为换算单位。
-l#重复计算硬件链接的文件。
二、df:显示磁盘分区上可以使用的磁盘空间
这里只记住两个参数就好:
-a#查看全部文件系统,单位默认KB
-h#使用-h选项以KB、MB、GB的单位来显示,可读性高~~~(最常用)
三、free可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。
1.命令格式:
free[参数]
2.命令功能:
free命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
3.命令参数:
-b以Byte为单位显示内存使用情况。
-k以KB为单位显示内存使用情况。
-m以MB为单位显示内存使用情况。
-g以GB为单位显示内存使用情况。
-o不显示缓冲区调节列。
-s间隔秒数持续观察内存使用状况。
-t显示内存总和列。
-V显示版本信息。
5、点运算符(.):source命令:
source命令是一个内置的shell命令,用于从当前shell会话中的文件读取和执行命令。
source命令通常用于保留、更改当前shell中的环境变量。简而言之,source一个脚本,将会在当前shell中运行execute命令。
source命令也称为“点命令”也就是一个符号(.).source命令通常用于重新执行刚修改的初始或文件,使之立即生效,而不必注销并重新登录。
source命令可用于:
1.刷新当前的shell环境
2.在当前环境使用source执行Shell脚本
3.从脚本中导入环境中一个Shell函数
4.从另一个Shell脚本中读取变量
5.读取并执行命令
语法:
source命令它需要一个文件,如果提供了参数,那么将用作传递脚本的位置参数。
sourceFILENAME[ARGUMENTS]
也可以使用.替代source命令:
.FILENAME[ARGUMENTS]
可以在当前的shell环境中定义一个别名。为ls-al定义一个别名为ll:
6、mv命令
是move的缩写,可以用来移动文件或者将文件改名(move(rename)files)。
命令格式
mv[选项]源文件或目录目标文件或目录
1.当mv命令中的第二个参数类型(目标)是文件时,实现**重命名**源文件或目录的功能,记住这里源文件或目录只能有一个,因为如果有多个时,会存在命名冲突的问题。
2.当mv命令中的第二个参数类型(目标)是目录时,实现的是移动源文件和目录的功能,这里源文件或目录可以有多个,mv命令会将源文件或目录移动到目标目录下。
3.mv-b:当覆盖文件之前先行备份。
4.mv-f(force强制):当覆盖文件时,不询问直接覆盖:
5.mv-i:当覆盖文件之前,会询问是否覆盖:
6.mv-u:只有当源文件是最新更新时,才可以覆盖目标文件。
7.mv-t:当需要移动多个源文件时,适用于这种方式,这时目标目录在前,源文件在后
7、rm命令:
参数:
8、清空日志的四种方法:
1、/logs/file.log
2、cat/dev/null/logs/file.log
3、echo""/logs/file.log
脚本中常用清空日志方法:
用冒号
4、:/logs/file.log
9、单引号、双引号、反引号区别
脚本内容:
#!/bin/sh
str="IamstuABC"
echo$str
str="Iam"stu"ABC"
echo$str
str=Iam"stu"ABC
echo$str
stu="CTC"
str=Iam"$stu"ABC
echo$str
str="Iam"$stu"ABC"
echo$str
执行结果
IamstuABC
IamstuABC
Iam"stu"ABC
Iam"$stu"ABC
IamCTCABC
从运行结果分析:
1.整体来看,双引号和单引号的优先级没有高低之分,但在外部的优先级较高
2.$后跟变量名,取变量的值,可直接用echo$stu或echo"$stu"
3.内部的内容无论有什么一定会直接输出,不会替换
4.""内部的内容会先搜索是否存在可以查找的变量,先替换再输出
5.""内部嵌套的""会消除双引号进行输出,比较显得比较高级