Shell 命令--文件创建、搜索命令--总结自《Linux Shell 脚本攻略》

(一)文件创建命令

1.touch命令

例如:touch abc命令在本地目录中创建了一个名为abc的空文件

2.cp命令

cp命令允许我们把一个文件的内容复制到同名或不同名的文件中,复制得到的文件可以在任何目录。使用cp命令的一个风险是它会在不提示用户的情况下很容易覆盖掉不同目录中的文件
-r选项支持递归复制。例如:cp -ar /usr/share/doc/. /doc/ 将复制源目录中所有子目录以及相关文件

3.mv命令

mv命令实质上市给文件贴上不同的标签,例如:mv file1 file2 命令就是把file1的名字改为file2
mv命令也可以用于目录

4.ln命令

链接文件允许用户编辑不同目录中的同一个文件
硬链接包含了文件的一个副本。只要硬链接文件是在同一个分区中,则它们的索引号相同 ln /etc/samba/smb.conf smb.conf
软连接起着重定向的作用。当我们打开一个用软链接创建的文件时,则链接把我们重定向到原来的文件。ln -s /etc/samba/smb.conf smb.conf

5.rm命令

-r开关选项可以按递归方式进行
-f开关选项可以覆盖掉任何安全措施  rm -rf  /root/a/b

6.目录创建和删除

mkdir和rmdir命令用于创建和删除目录
-p  no error if existing, make parent directories as needed
例如 mkdir -p /test1/test2/test3 
rmdir -p /test1/test2/test3

7.alias命令

可以用来简化几个命令。对于root用户,默认的别名可以提供一点安全性

(二)文件搜索

1.find命令

find / -name name.conf 此命令从根目录开始搜索
find /usr -name name.conf 从/usr目录下开始搜索

2.locate命令

RHEL允许用户创建一个数据库,它保存了全部的安装文件和目录。locate命令的缺点是此数据库通常每天只更新一次,这在/etc/cron.daily/mlocate.cron脚本文件中有记录
这个脚本文件可以直接由root用户从命令行接口中执行。只要输入这个文件的完整目录就行

(三)文本文件的管理

1.cat命令

最简单的文本文件读取命令是cat。cat filename命令可以翻页显示filename文件的内容。

2.less和more命令

用more filename命令可以翻页显示文本文件的内容,每次一个屏幕从头到尾显示
用less filename命令,我们可以用PAGE UP和PAGE DOWN键向前或向后翻页查看铜件的文本
less命令有几个功能是more和cat这两个命令所没有的。它可以读取用Gzip格式压缩的文本文件,通常这种文件的扩展名为.gz

3.head和tail命令

head 命令读取文件的头部
语法:$ head –n N file 打印前N行 $ head –n -N file 打印除最后N行外的所有行
tail命令总是读取文件的尾部
语法:$ tail –n N file 打印后N行 $ taill –n +N file 打印除了前N行之外的所有行

(四)处理文本流的命令

文本流就是数据的流动。例如,cat filename命令把来自filename的数据流输出到屏幕上。当这些文件变大时,最好先用过滤器命令对这些流进行处理。

1.sort命令

可以用多种方法对文件的内容进行排序。默认情况下,sort命令按照字母顺序将文件内容按每行首字符进行排序。

2.grep命令

grep命令用于文本搜索,默认读取一个文件的所有行
$ grep match_pattern filename 或者 $ grep “match_pattern” filename
一个grep命令也可以对多个文件进行搜索 $grep "match_text" file1 file2 file3 ...
grep命令通常将match_pattern视为通配符。如果要使用正则表达式,需要添加-E选项——这意味着使用扩展(extended)正则表达式,或者使用默认允许正则表达式的egrep命令。 例如: $ grep -E "[a-z]+" 或者 $egrep "[a-z]" 匹配url的正则表达式 $ egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-z]{2,3}" index.html
--color=atuto 选项:可以在输出行中重点标记出匹配到的单词
-o选项:只输出文件中匹配到的文本部分。 例如:输出每个单词 echo this is a test file | egrep -o "\b[[:alpha:]]+\b"
-v选项:打印包含match_pattern的行之外的所有行
-c选项:统计文件或文本中包含匹配字符串的行数
-b选项: 打印样式匹配所位于的字符或字节偏移,选项-b总是和-o配合使用 例如:$echo gnu is not unix | grep -b -o "not"
其他选项:
1)递归搜索文件 $ grep "text‘ . -R -n
2)  忽略样式中的大小写 $ echo hello world | grep -i "HELLO"
3)  用grep匹配多个样式 $ grep -e "pattern1" -e "pattern2" 或者 在样式文件中逐行写下需要匹配的样式,然后用选项-f执行grep。 $echo hello this is cool | grep -f pat_file
4)  在grep搜索中包括或排除文件  
只在目录中递归搜索所有的.c和.cpp文件: $ grep "main()" . -r --include *.{c,cpp} 注意:some{string1,string2}会扩展成somestring1 somestring2
在搜索中排除所有的README文件: $ grep "main()" . -r --exclude "README"
如果要排除目录,可以使用 --exclude-dir 选项
如果需要从文件中读取所需要排除的文件列表,使用 --exclude-from FILE
5)  使用0值字节后缀的grep与xargs
在下面的命令序列中,grep输出以0值字节作为终结符的文件(\0)。这可以用grep的-Z选项来指定。xargs -0 读取输入并用0值字节终结符分割文件名:
$ grep "test" file* -lZ | xargs -0 rm 。-Z通常和-l结合使用
6)grep的静默输出:在静默模式(quiet mode)中,grep命令不会向标准输出打印任何输出。它仅是运行命令,然后根据命令执行成功与否返回退回状态。使用-q
7) 打印出匹配文本之前或之后的行
要打印匹配某个结果之后的3行,使用-A选项  -A NUM, --after-context=NUM。例如 $seq 10 | grep   -A 3 5
要打印匹配某个结果之前的3行,使用-B选项 -B NUM, --before-context=NUM。例如 $seq 10 | grep  -B 3 5
要打印匹配某个结果之前以及之后的3行,使用-C选项  -C NUM, -NUM, --context=NUM。例如 $seq 10 | grep-C 3 5
如果有多个匹配,那么以一行“--”作为各匹配之间的定界符。例如 $ echo -e "a\nb\nc\na\nb\nc" | grep a -A 1

3.diff命令

diff命令可以找出两个文件的差别。
diff /root/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0

4.wc命令

wc是一个用于统计的工具。它是Word Count(单词统计)的缩写。
1)统计行数$ wc -l file
2)统计单词数 $ wc -w file
3)统计字符数 $ wc -c file
4)当不适用任何选项执行wc时:$ wc file 它只会打印文件的行数、单词数和字符数,彼此之间用制表符分割

5.sed命令

sed命令是流编辑(stream editor)的缩写符,用于搜索并修改文件中指定的单词甚至文本流。
如果要替换所有内容,需要在命令尾部加上参数g 其方法如下:$ sed ‘s/pattern/replace_string/g‘ file 后缀/g意味着sed会替换每一处匹配。但是有时候我们不需要替换前N处匹配,而是需要替换剩下的匹配。当需要从第N处匹配开始替换时,可以使用/Ng 例如: $echo this thisthisthisthis | sed ‘s/this/THIS/4g‘
sed常用组合命令
1)移除空白行
2) 已匹配字符串标记& 
$ echo this is an example | sed ‘s/\w\+/[&]/g‘ 正则表达式 \w\+ 匹配每一个单词,然后我们用[&]替换它,&对应于之前所匹配到的单词
3) 子串匹配标记\1  &代表匹配给定样式的字符串
4)组合多个表达式 
5) 引用
sed可以替换给定文本中的字符串。 $ sed ‘s/pattern/replace_string/‘ file
-i选项:将替换结构应用于原文件。 例如:$ sed -i ‘s/text/replace/‘ file  等价于 $ sed ‘s/text/replace/‘ file > newfile    ;   $mv newfile file
 $ sed ‘/^$/d‘ file
在sed中,用&标记匹配样式的字符串,就能够在替换字符串时使用已匹配的内容
$ echo seven EIGNT | sed ‘s/\([a-z]\+\) \([A-Z]\+\)/\2 \1/‘   ([a-z]\+\)匹配第一个单词 ([A-Z]\+\)匹配第二个单词 \1和、2用来引用它们。这种医用被称为向后引用(back  referencing)。在替换部分,它们的次序被更改为 \2  \1 因此结果就呈现出逆序的形式。
$ sed ‘expression‘ | sed "expression‘ 等价于 $ sed  ‘expression; expression‘
sed表达式通常用单引号引用。不过也可以使用双引号。双引号会通过对表达式求值来对其进行扩展。当我们想在sed表达式中使用一些变量字符串时,双引号就有用武之地了。例如: $  text=hello  $echo hello world | sed "s/$text/HELLO/"  结果HELLO word, $text的求值结果是hello

6.awk命令

一个awk脚本通常由3部分组成: BEGIN语句块、END语句块和能够使用模式匹配的通用语句块。
例如 echo -e "line1\nline2" | awk  ‘BEGIN {print "Start"} {print} END{print "End"}‘
关于print,需要记住两件重要的事情:当print的参数是以逗号进行分割时,参数打印时则以空格作为定界符;在awk的print语句中,双引号是被当做拼接操作符(concatenation operator)使用的。例如:
$ echo | awk ‘{ var1="v1"; var2="v2"; var3="v3"; \ print var1,var2,var3;}‘ 输出 v1 v2 v3
$ echo | awk ‘{  var1="v1"; var2="v2"; var3="v3"; \ print var1 "-" var2 "-" var3;}‘  输出 v1-v2-v3
补充内容
1)特殊变量
NF:表示字段数量(number of fields ),在执行过程中对应于当前的字段数。
$0 :这个变量包含执行过程中当前行的文本内容
$1 :这个变量包含第一个字段的文本内容
$2 :这个变量包含第二个字段的文本内容
例如 我们可以用print $NF打印一行中最后一个字段,用$(NF-1)打印倒数第二个字段,其他字段依次类推即可。
要打印从M行到N行这个范围内的所有文本,语法 $ awk ‘NR==M, NR==N‘ filename
要打印处于start_pattern与end_pattern之间的文本,语法 $ awk ‘/start_pattern/, /end_pattern/‘ filename 用于awk中的样式为正则表达式
2)将外部变量值传递给awk
还有另一种灵活的方法可以将多个外部变量传递给awk 例如:
$ var1="Variable1" ;var2="Variable2" $ echo | awk ‘{ print v1,v2 }‘ v1=$var1 v2=$var2
在上面的方法中,变量之间用空格分隔,以键-值对的形式(v1=$var1 v2=$var2 )作为awk的命令行参数紧随在BEGIN、{ }和END语句块之后。
3)用getline读取行
例如:seq 5| awk ‘BEGIN { getline;print $0}{print $0}‘4)用样式对awk处理的行进行过滤
$ awk ‘NR < 5‘ # 行号小于5的行
$ awk ‘NR==1,NR==4‘ #行号在1到5之间的行
$ awk ‘/linux/‘ # 包含样式linux的行(可以用正则表达式来指定样式)
$ awk ‘!/linux/‘ # 不包含样式linux的行
5)设置字段定界符
在BEGIN语句块中则可以用FS=“delimiter” 设置输出字段的定界符 $ awk ‘BEGIN {FS=":"} {print $NF }‘ /etc/passwd
6) 从awk中读取命令输出
awk支持以文本作为索引的关联数组
7) 在awk中使用循环
awk有很多内建的字符串控制函数:
length(String)
index(string,search_string)
split(string,array,delimiter)
substr(string,start-position,end-position)
sub( regex, replacement_str, string) 将正则表达式匹配到的第一处内容替换成replacement_str
gsub( regex, replacement_str, string) 将正则表达式匹配到的所有内容替换成replacement_str
match( regex, string) 检查正则表达式是否能够匹配字符串。如果能够匹配,返回非0值;否则,返回0。match()有两个相关的特殊变量,RSTART包含正则表达式所匹配内容的起始位置,而RLENGTH包含正则表达式所匹配内容的长度。
awk被设计用于数据流。它非常有趣,其原因就在于它可以对列和行进行操作。
awk脚本的结构基本如下所示: awk ‘ BEGIN { print "start" } pattern { commands } END { print "end" } file
NR:表示记录数量(number of records),在执行过程中对应于当前行号。
。。。
$N :这个变量包含第N个字段的文本内容
例如:$var=10000 $ echo | awk -v VARIABLE=$var ‘{ print VARIABLE }‘
通常,grep默认读取一个文件的所有行。如果只想读取某一行,可以使用geiline函数。有时候,我们需要从BEGIN语句块中读取第一行。
我们可以为需要处理的行指定一些条件,例如:
默认的字段定界符是空格。我们可以用-F “delimiter”明确指定一个界定符: $ awk -F: ‘{ print $NF }‘ /etc/passwd
$echo | awk ‘{ "grep root /etc/password" | getline cmdout; print cmdout }‘ 通过使用getline,能够将外部shell命令的输出读入变量cmdout
在awk中可以使用for循环,其格式: for( i=0;i<10;i++) { print $i; } 或者 for( i in array) { print array[i] }
时间: 2024-10-22 16:54:58

Shell 命令--文件创建、搜索命令--总结自《Linux Shell 脚本攻略》的相关文章

《Linux Shell脚本攻略》 笔记 第二章:常用命令

<Linux Shell脚本攻略> 笔记 第二章:常用命令 1.cat cat -s //多个空白行压缩成一个 cat *.txt | tr -s '\n'   //移除空白行 cat -n //加行号 2.find 沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作. eg: find ./ ! -name "*.txt" -print [[email protected] program_test]# find ./  -type f -name "

2016/8/18 Linux常用命令 : 文件搜索命令

推荐一款windows软件:everything,可快速搜索到文件 1.文件搜索命令:find 不要在服务器使用高峰期用find,find范围尽量小 find [范围] [匹配条件] 范例: find /etc -name init :在目录/etc下查找文件init ,精准搜索,若要模糊搜索用*匹配 find /  -size +204800 :在根目录下查找大于100M的文件 find /home -user shenchao :在根目录下查找所有者为shenchao的文件 find /et

LINUX SHELL脚本攻略笔记[速查]

Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述符和重定向 cat 数组和关联数组 alias date 调试脚本 函数和参数 管道 读取命令输出 read 字段分隔符和迭代器 循环 比较和测试 find xargs tr md5sum sha1sum 对目录进行校验 sort uniq tempfile split bash变量匹配切分 exp

Linux Shell脚本攻略(1.4)

1.4 使用函数添加环境变量 1.4.1 简介 环境变量通常用于存储路径列表,这些路径用于搜索可执行文件.库文件等.例如:$PATH.$LD_LIBRARY_PATH,它们通常看起来像这样: PATH=/usr/bin;bin LD_LIBRARY_PATH=/usr/lib;lib 这意味着只要shell需要运行二进制可执行文件时,它会首先查找/usr/bin,然后查找/bin.在ubuntu14.04中,PATH和LD_LIBRARY_PATH存储的路径如下所示: PATH=/usr/loc

老李分享:《Linux Shell脚本攻略》 要点(四)

老李分享:<Linux Shell脚本攻略> 要点(四) 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2.grep用法 //在多级目录中对文本进行递归检索 [[email protected] program_test]# grep "yang" ./ -Rn ./test.txt:6:laoyang./right.txt:1:1 yang man //忽略大小写匹配 [[email protec

《Linux Shell脚本攻略》 笔记 第四章:高效文本处理

<Linux Shell脚本攻略> 笔记 第四章:高效文本处理 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2.grep用法 //在多级目录中对文本进行递归检索 [[email protected] program_test]# grep "yang" ./ -Rn ./test.txt:6:laoyang ./right.txt:1:1 yang man //忽略大小写匹配 [[email pr

Linux Shell脚本攻略(1.10)

1.10 获取.设置日期和延时 很多应用程序需要以不同的格式打印日期.设置日期和时间.根据日期和时间执行某项操作.延时通常用于在程序执行过程中提供一段等待时间(比如1秒).同样的,我们也能够一多种格式打印日期,或者在命令行中设置日期.在类Unix系统中,日期被存储为一个整数,其大小为自世界标准时间起所流逝的秒数.这种计时方式称为纪元时或Unix时间. 1.10.1 获取.设置时间 以下的程序给出了多种用法: #!/bin/bash start=$(date +%s) #获取纪元时间 date #

Linux Shell脚本攻略(1.8)

1.8 使用别名 linux中的别名就相当于windows中的快捷方式,使用别名可以省去用户输入一长串命令序列的麻烦. 1.8.1 创建临时别名(快捷方式) alias new_command='command sequence' #格式说明 alias install='sudo apt-get install' #实例说明 在声明 install='sudo apt-get install'之后,就可以用install代替'sudo apt-get install'了.使用这种方式声明的别名

Linux Shell脚本攻略(1.2)

1.2 终端打印 终端是交互式工具,用户可以通过它与shell环境进行交互.在终端中打印文本是大多数shell脚本和工具日常需要执行的基本任务.通过终端打印,人们可以知道系统的运行状态,这对用户来说是至关重要的. echo终端打印 echo "Welcome to Bash" echo 'Welcome to Bash' echo Welcome to Bash 以上三种方法的效果是一样的,输出内容都是"Welcome to Bash",并在末尾添加换行符.在默认情

Linux Shell脚本攻略(1.3)

1.3 玩转变量和环境变量 变量是任何一种编程语言都必不可少的组成部分,用于存放各种类型的变量.脚本语言大多是弱类型语言(动态语言),也就是说在使用变量时,不需要事先声明变量的类型,只需要直接赋值就可以.在Bash中,每一个变量的值都是字符串.无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.有一些特殊的变量会被shell环境和操作系统保留,用来存储一些特别的值,这类变量就称为环境变量,相信大家对环境变量也并不陌生,因为即使在windows操作系统上,也存在环境变量. 普通变量 普通变