Linux 文件命令2
来源:互联网 发布:淘宝卖家收入怎么查看 编辑:程序博客网 时间:2024/05/18 23:15
剖析一个文件列表
ls 命令用来查看用户有执行权限的任意目录中的文件列表,该命令有许多有趣的选项。例如:
$ ls -liah *22684 -rw-r--r-- 1 bluher users 952 Dec 28 18:43 .profile19942 -rw-r--r-- 1 scalish users 30 Jan 3 20:00 test2.out925 -rwxr-xr-x 1 scalish users 378 Sep 2 2002 test.sh
上面的列表显示 8 列:
- 第 1 列指示文件的 inode,因为我们使用了 -i 选项。剩下的列通过 -l 选项来进行正常显示。
- 第 2 列显示文件类型和文件访问权限。
- 第3 列显示链接数,包括目录。
- 第 4 和第 5 列显示文件的所有者和组所有者。这里,所有者 "bluher" 属于组 "users"。
- 第 6 列显示文件大小(单位为所显示的单位,而不是默认的字节数,因为我们使用了 -h 选项。
- 第 7 列显示日期(它看起来像是三列),包括月、日和年,以及当天的时间。
- 第 8 列显示文件名。在选项列表中使用 -a 将使列表中包含隐藏文件(如 .profile)的列表。
可以移动 (mv)、复制 (cp) 或删除 (rm) 文件和目录。明智地使用 -i 选项,以获得确认通常是个不错的主意。
$ cp -i ls.out ls2.outcp:overwrite `ls2.out'?
mv 命令允许使用 -b 选项,这将在移动文件之前作一个备份拷贝。rm 和 cp 接受功能强大但却危险的 -r 选项,它将在一个目录和它的文件上递归执行。
$ rm -ir Testrm:descend into directory `Test'? y
可以用 mkdir 来创建目录,用 rmdir 来删除目录。不过,因为不能用 rmdir 来删除包含文件的目录,所以使用 rm 加 -r 选项通常要更方便些。
出于安全的原因,所有的文件都有所有权和保护。文件访问权限(或文件模式)包含之前提到的相同的 10 个字符:
- 第一个字符指示文件类型。最常见的是 - 代表文件,d 代表目录,而 l 代表链接。
- 接下来的 9 个字符是三种用户类别的访问权限:文件所有者(字符 2-4),用户组 (5-7) 和其它 (8-10),其中 r 表示读权限,w 表示写权限,x 指示一个文件上的执行权限。破折号 - 如果出现在这九个位置的任意一个,则指示这个操作对该类别的用户禁止。
可以使用 chmod 命令通过字符符号或二进制掩码来设置访问权限。要使用二进制掩码,必须将三个权限组的字符表示转换成二进制格式,然后转换成八进制格式:
用户类别: | 所有者 | 用户组 | 其它 |
字符表示: | rwx | r-x | r-- |
二进制表示: | 111 | 101 | 100 |
八进制表示: | 7 | 5 | 4 |
将写权限赋予用户组,您可以使用:
chmod g+w test.sh or chmod 774 test.sh
用 umask 命令,在 /etc/init.dev 文件中进行系统范围内的、或在 .profile 文件中进行的本地的文件权限默认设置。这个命令指示用 777 减去这个数字来获取默认的权限:
$ umask 022
这将为用户创建的所有新文件生成一个默认的文件权限 755。
可以用 chown 来修改文件的所有权:
$ chown bluher ls.out
这里,bluher 是新的文件所有者。类似地,组成员资格将按以下方式修改:
$ chgrp devgrp ls.out
这里,devgrp 是新的用户组。
ls 不提供哪些文件是文本的,哪些文件是二进制的的信息。要了解这个信息,您可以使用 file * 命令。
重命名文件
赋予一个文件多个名字的两种流行的方法是利用链接和 alias 命令。Alias 可以用来为一个更长的命令重新起一个更方便的名字:
$ alias ll='ls -l'$ ll
注意单引号的使用,这使得 BASH 将该项目传递给别名,而不是自己估计它。别名还可用作较长的路径名的缩写:
$ alias jdev9i=/jdev9i/jdev/bin/jdev
关于 alias 和它的反命令 unalias 的更多信息,请查看 BASH 的 man 页面的 "SHELL BUILTIN COMMANDS" 子部分。在最后一个例子中,定义了一个环境变量来实现相同的结果。
$ export JDEV_HOME=/jdev9i/jdev/bin/jdev$ echo $JDEV_HOME/jdev9i/jdev/bin/jdev$ $JDEV_HOME
链接允许几个文件名引用单个源文件,格式如下:
ln [-s] fileyouwanttolinkto newname
单独的 ln 命令创建到文件的一个硬链接,而使用 -s 选项来创建一个符号链接。简而言之,一个硬链接几乎不能和原始的文件区分开(除了这两个文件的 inode 将相同之外)。符号链接较容易区分,因为它们出现在一个长的文件列表中,并用 -> 来指示源文件,l 指示文件类型。
查看和查找文件
文件过滤器
用来读取文件内容和在文件内容上执行操作的命令有时被称为 ¹ý滤器。sed 和 awk 命令是两个滤波器的例子,因为在以前的 OTN 文章中有它们详细的讨论,在这里将略过。
诸如 cat、 more 和 less 之类的命令让您能够从命令行查看一个文本文件的内容,而无需调用编辑器。Cat 是 "concatenate" 的缩写,它将默认地在标准输出(显示屏)上显示文件内容。和 cat 一起提供的最有趣的选项之一是 -n 选项,它用编号的输出行来显示文件内容。
$ cat -n test.out1 This is a test.
因为 cat 一次性输出文件中的所有行,所以您可能更喜欢用 more 和 less,因为它们都一次输出一屏的文件内容。Less 是 more 的一个增强的版本,它允许用来自 vi 文本编辑器的关键命令来增强文件查看。例如,d 向前翻滚、b 向后翻滚 N 行(如果 N 是在 d 或 b 之前指定的)。为 N 输入的值成为随后的 d 命令的默认值。man 页面实用工具使用 less 来显示使用说明的内容。
重定向和管道
重定向允许将命令输出重定向到文件中,而不是标准输出,或者类似地,也可重定向输入。重定向的标准符号 > 创建一个新的文件。>> 符号将输出添加到一个现有的文件中:
$ more test2.outAnother test. $ cat test.out >> test2.out$ cat test2.outAnother test.This is a test.到文件的标准输入可以用 < 符号来重定向:
$ cat < test2.out
错误消息用 2> 和 2>> 来重定向和添加,格式如下:
$ command 2> name_of_error_file
要避免无意地覆盖一个现有的文件,使用 BASH 内置的命令集:
$ set -o noclobber
可以在命令和输出文件之间用 >! 符号来重载这个特性。要关闭这个特性,用 +o 代替 -o。
重定向在一个命令和文件之间、或文件和文件之间工作。重定向语句的一项必须是一个文件。
管道使用 |符号,并且在命令之间工作。例如,您可以用以下方式将一个命令的输出直接发送到打印机上:
$ ls -l * | lpr
可以用以下方式快速地找到历史列表中的一个命令:
$ history | grep cat
更多的滤波器
Grep、fgrep 和 egrep 都显示匹配一种模式的行。所有这三个命令都在文件中搜索指定的模式,如果您想不起来一个所需文件的名称,这将非常有用。基本格式是:
grep [options] PATTERN [FILE...]$ grep -r 'Subject' nsmail
CTRL-Z 将终止上述或其它任何命令。
grep 的最有用的选项可能是 -s。如果您以除根用户之外的任何身份搜索系统文件,那么对于每一个您没有访问权限的文件,都将产生错误消息。这个命令禁止那些消息。
Fgrep(也以 grep -F 调用)只查找固定的字符串,而不是 grep 接收的正则表达式。而 egrep 接收包含更大范围的特殊字符(如 “|”,它指示条件 OR 运算符)的模式。
$ egrep 'Subject|mailto' *
查找文件
find 命令的 GNU 版本非常强大、灵活并且比 UNIX 系统上存在的经典版本更具包容性。它对于涉及到目录结构的任务非常有用,包括在文件上查找和执行命令。find 命令的基本格式是:
$ find startdirectory options matchcriteria [actionoptions]
如果您知道文件的名称、或者甚至名称的一部分,但不知道它所处的目录,您可以这么做:
$ find .-name 'test*'./test./jdevhome/mywork/EmpWS/EmpBC4J/test
与经典的 UNIX 系统不同,在 Linux 中不需要在末尾添加 -print 操作,因为如果没有指定其它的操作选项,就将假定执行这个操作。在目录起始位置上的一个点 ( . ) 将使 find 在您的工作目录中开始搜索。两个点, ..,在父目录中开始搜索。您可以在任意目录下开始搜索。
注意,您可以使用通配符作为搜索准则的一部分(只要用单引号将整个项目括起来)。
$ find .-name 'test*' -print./test.out./test2.out
显示拥有 .out 扩展名的一系列文件:
$ find /home -name '*.out'
不过记住,除非您是作为超级用户运行这个命令,否则您将可能得到许多的 "Permission denied" 错误消息。
最强大的搜索工具之一是和 grep 一起使用的 -exec 操作:
$ find .-name '*.html' -exec grep 'mailto:foo@yahoo.com' {} /;
这里,我们让 find 命令在当前目录中开始执行, .,查找一个 html 文件,*.html,并在当前文件上执行 (-exec) grep 命令,{}。当使用 -exec 操作时,需要一个分号 ;,这是用来在使用 find 命令时执行其它一些操作。需要反斜线 / 和引号来确保这些项目通过 BASH,以使它们由命令而不是 shell 来进行解释。
立即掌握 Linux 文件命令
在 Linux 中提供了许多有用的命令和利用它们的强大的方法,在此无法一一说明。此外,完成许多任务通常都存在多种方法。
我们已经看到了一些最常用和最有启发意义的 Linux 文件命令。掌握这些基础但却关键的工具将使您的 Linux 学习走上快车道。利用您手头上的 man 页面,和试验的积极性,您现在拥有了足够的信息来开始探索 Linux 文件操作的力量。
在我的下一篇文章中,我将提供 Linux 系统命令的一个类似的说明。
- Linux 文件命令2
- linux文件搜索命令-2
- 2、Linux文件操作命令
- linux命令(文件处理命令)
- linux命令-文件处理命令
- Linux命令(文件处理命令)
- Linux 命令-文件管理命令
- Linux 命令-文件阅读命令
- 【linux 命令】文件相关命令
- Linux:文件命令精通指南-2-
- Linux常用命令—文件处理命令2
- 实用Linux命令(2)文件操作
- Linux-06-2文件相关命令初步
- linux命令2-目录文件常用命令
- Linux常用命令(二)文件处理命令2
- linux基本命令2--文件处理
- Linux文件处理命令
- linux文件命令
- Socket发送信息
- IOCP学习笔记
- Linux 文件命令1
- trim()
- 快乐生活
- Linux 文件命令2
- 微软黑屏:不够智慧
- 一个数(3000内)等于两个素数之和
- Windows平台多线程编程
- 模块参数使用示例
- 短信猫的发送与接收
- 闲聊hibernate的inverse的引入
- c#中windows窗体调用问题
- 加大Windows XP专业版中IIS 5.1的最大连接数限制