“常用命令”的版本间差异
无编辑摘要 |
无编辑摘要 |
||
(未显示同一用户的3个中间版本) | |||
第1行: | 第1行: | ||
==rm== |
==rm== |
||
如果您想保留文件'345.bak',而删除'124.bak'和'583.bak'。这看起来有些难度,因为被删文件的名称除了后缀其他都不同。但幸运的是,您可以用不含有来指定文件: |
如果您想保留文件'345.bak',而删除'124.bak'和'583.bak'。这看起来有些难度,因为被删文件的名称除了后缀其他都不同。但幸运的是,您可以用不含有来指定文件: |
||
⚫ | |||
⚫ | |||
这将被读为:除了以'6.bak'结尾的文件,删除其他所有以'.bak'结尾的文件。您必须将取反号(negation sign)与取反字符(这里是 6)放到括号中,不然的话,shell 会将惊叹号(exclamation mark)解释成历史记录替换的开始(the beginning of a history substitution)。取反号在本篇介绍的所有匹配模式中都有效。 |
这将被读为:除了以'6.bak'结尾的文件,删除其他所有以'.bak'结尾的文件。您必须将取反号(negation sign)与取反字符(这里是 6)放到括号中,不然的话,shell 会将惊叹号(exclamation mark)解释成历史记录替换的开始(the beginning of a history substitution)。取反号在本篇介绍的所有匹配模式中都有效。 |
||
请注意:通配符'*'与取反号连用,很容易产生问题。猜猜 |
请注意:通配符'*'与取反号连用,很容易产生问题。猜猜 |
||
⚫ | |||
⚫ | |||
表示什么?这个命令将删除所有文件,甚至包括名称中包含'6'的文件。如果您将通配符'*'放到了取反号前面和后面,实际上取反号将失效,因为 shell 将其解释为"所有名称中任何位置都不含该字符的文件"。在我们的例子里,只有文件'666.bak'不符合该模式。第二个通配符是问号(question mark):'?'。在匹配时,一个问号只能代表一个字符。为了示范其用途,我们在上例的假设中添加两个新文件:'311.bak~'和'some.text'。现在,列出所有在点号后有四个字符的文件: |
表示什么?这个命令将删除所有文件,甚至包括名称中包含'6'的文件。如果您将通配符'*'放到了取反号前面和后面,实际上取反号将失效,因为 shell 将其解释为"所有名称中任何位置都不含该字符的文件"。在我们的例子里,只有文件'666.bak'不符合该模式。第二个通配符是问号(question mark):'?'。在匹配时,一个问号只能代表一个字符。为了示范其用途,我们在上例的假设中添加两个新文件:'311.bak~'和'some.text'。现在,列出所有在点号后有四个字符的文件: |
||
⚫ | |||
⚫ | |||
问号通配符能够有效地避免上面提到的'取反号陷阱'(negation trap): |
问号通配符能够有效地避免上面提到的'取反号陷阱'(negation trap): |
||
⚫ | |||
⚫ | |||
将扩展成"所有除了点号前倒数第二个字符为'4'的文件",也就是只保留文件'346.bak'。 |
将扩展成"所有除了点号前倒数第二个字符为'4'的文件",也就是只保留文件'346.bak'。 |
||
您可能会问,有没有其他匹配方式?到目前为止,您只看到了在指定位置匹配唯一字符的方法。但其实您也可以这样: |
您可能会问,有没有其他匹配方式?到目前为止,您只看到了在指定位置匹配唯一字符的方法。但其实您也可以这样: |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
接下来,您将高兴地看到还可以定义匹配的范围: |
|||
⚫ | |||
将列出所有点号前倒数第二个字符落在'3'到'8'范围的文件。在我们的例子中,匹配的文件是'346.bak'和'583.bak'。 |
将列出所有点号前倒数第二个字符落在'3'到'8'范围的文件。在我们的例子中,匹配的文件是'346.bak'和'583.bak'。 |
||
引用 shell 的特殊字符 |
|||
但是,上面的那些机制存在一个缺点:shell 总在命令执行前,试着进行扩展。有时候,会变得很棘手: |
|||
l 文件名包含特殊字符。假设您在那个目录中还有一个名为'!56.bak'的文件。下面试图进行模式匹配: |
|||
rm !* |
|||
第103行: | 第86行: | ||
:$ 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。 |
:$ 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。 |
||
:因此 sed /^$/d filename :删除文件中的空行 |
:因此 sed /^$/d filename :删除文件中的空行 |
||
==tee== |
|||
把标准输入转化为标准输出。 |
|||
==lpr== |
|||
-# n打印份数 |
|||
==passwd== |
|||
passwd命令用于设置在linux系统中的密码。 |
|||
其使用语法为:passwd [options] [LOGIN] |
|||
*Options: -d, --delete 删除密码 |
|||
*-k, --keep-tokens 密码过期后,才能更新 |
|||
*-l, --lock 锁住账户,此用户无法登录系统 |
|||
*-S, --status 列出密码的相关信息。 |
|||
*-u, --unlock 解锁账户 |
|||
==专题== |
==专题== |
||
[[ dd ]] |
[[ dd ]] |
||
2014年12月2日 (二) 13:48的最新版本
rm
如果您想保留文件'345.bak',而删除'124.bak'和'583.bak'。这看起来有些难度,因为被删文件的名称除了后缀其他都不同。但幸运的是,您可以用不含有来指定文件:
rm *[!6].bak
这将被读为:除了以'6.bak'结尾的文件,删除其他所有以'.bak'结尾的文件。您必须将取反号(negation sign)与取反字符(这里是 6)放到括号中,不然的话,shell 会将惊叹号(exclamation mark)解释成历史记录替换的开始(the beginning of a history substitution)。取反号在本篇介绍的所有匹配模式中都有效。 请注意:通配符'*'与取反号连用,很容易产生问题。猜猜
rm *[!6]*.bak
表示什么?这个命令将删除所有文件,甚至包括名称中包含'6'的文件。如果您将通配符'*'放到了取反号前面和后面,实际上取反号将失效,因为 shell 将其解释为"所有名称中任何位置都不含该字符的文件"。在我们的例子里,只有文件'666.bak'不符合该模式。第二个通配符是问号(question mark):'?'。在匹配时,一个问号只能代表一个字符。为了示范其用途,我们在上例的假设中添加两个新文件:'311.bak~'和'some.text'。现在,列出所有在点号后有四个字符的文件:
ls *.????
问号通配符能够有效地避免上面提到的'取反号陷阱'(negation trap):
rm *[!4]?.*
将扩展成"所有除了点号前倒数第二个字符为'4'的文件",也就是只保留文件'346.bak'。 您可能会问,有没有其他匹配方式?到目前为止,您只看到了在指定位置匹配唯一字符的方法。但其实您也可以这样:
ls [13]*
将列出所有以字符'1'或'3'开头的文件;在我们的例子中,文件'124.bak'、'311.bak~'和'346.bak'匹配。注意到您必须用中括号将匹配的模式括起来,否则模式只匹配以字符串'13'开头的文件。接下来,您将高兴地看到还可以定义匹配的范围:
ls *[3-8]?.*
将列出所有点号前倒数第二个字符落在'3'到'8'范围的文件。在我们的例子中,匹配的文件是'346.bak'和'583.bak'。
chmod,chown和chgrp
- 用户有3种 u(user) g(group) o(owner) *权限有 read write x(execute) d(delete) 四个, rwx还可以用二进制的方式来表示, 完全权限r(100)+w(010)+x(001)=4+2+1=7
- 例子:chmod u+r file 给文件的user加上read的权限
- 例 chmod g-w 给文件所在组减去write权限:chmod 755 file 表owner用7的权限(完全),group和user有5的权限(r+x,读和执行)
- 文件的所有者可用 chown 改变,所在组可用chgrp改变
- chmod,chown chgrp都可以改变文件夹的属性,在-R 设置下同时改变文件夹内的其他文件熟悉。
- 现在的文件还多了一个 -T -S的标签
- -T 好现是除了文件创造者之外不能删除,-S还不清楚,一般设置在user上可以用chmod u+t file的方式改变
umask
umask是对权限的过滤器,因此它的工作方式和chmod恰好相反。全部权限等价与777(rwxrwxrwx),umask值0222(-w--w--w-)则代表权限555(r-xr-xr-x)
grep
- grep -nH "keywords" *.pro ;检索关键词
cat
- cat file1 file2 | sort | uniq
- 取出两个文件的并集(重复的行只保留一份)
- cat file1 file2 | sort | uniq -d
- 取出两个文件的交集(只留下同时存在于两个文件中的文件)
- cat file1 file2 | sort | uniq -u
- 删除交集,留下其他的行
- cat file1 file2 > file3
- paste file2 to the end of file1 and write to file3
- paste 将两file横向合并
tr
- tr -d ' ' < test.txt >> test2.txt
- 删除 test.txt 中间所有的空格,输出至test2.txt
- tr ' ' ‘ *’ < test.txt >> test2.txt
- 替换 test.txt 中间所有的空格为*,输出至test2.txt
- Note: 输出必须重定向,可能效果没有sed好
sed
sed命令参见 http://dev.firnow.com/course/3_program/shell/shelljs/20090307/159092.html
sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。
sed可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。 sed不改变文件内容,只对终端流起作用,因此输出重定向
- sed 's/txt/dat/g' filename
- 将filename中的txt 替换成 dat
- 注:filename 中的内容并没有变。如果要改变,需要重定向
- sed -e s'/^[0-9]\{1,\}://g' file
- 去掉文件中到行号和冒号
- sed '$d' filename1 > filename2
- 删除文件最后一行 (head -n-1 input.file > output.file)
- sed '2d' example-----删除example文件的第二行。*sed '2,$d' example-----删除example文件的第二行到末尾所有行。
- sed '/test/'d example-----删除example文件所有包含test的行。
- /*/ 匹配符
- ^ 锚定行的开始 如:/^sed/匹配所有以sed开头的行。
- $ 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
- 因此 sed /^$/d filename :删除文件中的空行
tee
把标准输入转化为标准输出。
lpr
-# n打印份数
passwd
passwd命令用于设置在linux系统中的密码。 其使用语法为:passwd [options] [LOGIN]
- Options: -d, --delete 删除密码
- -k, --keep-tokens 密码过期后,才能更新
- -l, --lock 锁住账户,此用户无法登录系统
- -S, --status 列出密码的相关信息。
- -u, --unlock 解锁账户