LPI Linux 认证/执行基本文件管理
外观
(LPIC-1 版本 5.0)
权重: 4
描述: 候选人应该能够使用基本的 Linux 命令来管理文件和目录。
关键知识领域
- 分别复制、移动和删除文件和目录。
- 递归地复制多个文件和目录。
- 递归地删除文件和目录。
- 在命令中使用简单和高级的通配符规范。
- 使用
find
根据类型、大小或时间来定位和操作文件。 tar
、cpio
和dd
的使用。
以下是使用的文件、术语和实用程序的部分列表
cp
find
mkdir
mv
ls
rm
rmdir
touch
tar
cpio
dd
file
gzip
gunzip
bzip2
xz
unxz
- 文件通配
要创建目录,请使用 mkdir。
mkdir [options] dir
常见选项
-m mode: set permission mode. Default use umask. -p parent: create parent directory as needed.
示例
mkdir -m 0700 bin mkdir -p bin/system/x86
要删除空目录,请使用 rmdir。
rmdir [options] dir
常见选项
-p parent: remove empty superdirectories.
示例
rmdir tmp rmdir -p bin/system/x86
要将一个文件复制到另一个文件或目录,请使用 cp。
cp [options] source target
源和目标可以是文件或目录。
常见选项
-i interactive: prompt to overwrite -r recursive: copy the subdirectories and contents. Use -R for special files. -f force: force the overwriting
默认情况下会静默覆盖目标文件。(这不会改变源文件)
示例
cp *.[a-z] /tmp cp readme readme.orig cp ls /bin cp -ri bin/* /bin
要重命名文件或目录,或将文件或目录移动到另一个位置,请使用 mv。
mv [options] source target
源和目标可以是文件或目录。
常见选项
-i interactive: prompt to overwrite -f force: force the overwriting -v verbose
默认情况下会静默覆盖目标文件。
示例
mv *.[a-z] /tmp mv readme readme.orig mv ls /bin mv -fi bin/* /bin
列出当前目录中的文件的命令是 ls。
ls [options] [filenames]
常见的选项是
-l For a long format -F Append a file type character -a All files, including hidden files -R Recursive listing of subtree -d Do not descend into directory
ls 等同于 DOS 上的 dir 命令。
ls 输出的示例
$ ls -l /bin/ls -rwxr-xr-x 1 root root 46784 mar 23 2002 /bin/ls $ ls -ld /bin drwxr-xr-x 2 root root 2144 nov 5 11:55 /bin $ ls -a . .bash_history .bash_profile .bashrc ... $ ls -dF /etc .bashrc /bin/ls .bashrc /bin/ls* /etc/
长格式意味着
$ ls -l /etc/hosts #List a long format of the file hosts -rw-r—r-- 1 root root 677 Jul 5 22:18 /etc/hosts
文件内容和位置 Linux/Unix 不像 Windows 那样通过文件名扩展名来区分文件。要确定文件内容,请使用 file。
$ file /etc .bashrc /bin/ls /dev/cdrom /etc: directory .bashrc: ASCII English text /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped /dev/cdrom: symbolic link to /dev/hdc
要确定命令是内置 shell 命令还是程序,请使用 type,并使用 which 来查找其位置。
$ type cp cd ls which type cp is /bin/cp cd is a shell builtin ls is aliased to `ls $LS_OPTIONS' which is aliased to `type -p' type is a shell builtin $ which cut /usr/bin/cut
文件名可以用以下方式创建
- I/O 重定向
cat chapter1 chapter2 > book
- 编辑器,如 vi。
vi mynewfile
- 许多 Unix 实用程序
cp file newfile
- 应用程序
netscape
- touch 命令,它创建空文件(或更新现有文件的“修改日期”)
touch memo
有效的文件名可能包含(或为)
- 每个文件名最多 255 个字符
- 除正斜杠 '/' 之外的任何字符
- 建议使用字母数字字符以及加号、减号和下划线字符。
- 区分大小写('A' 和 'a' 被视为不同)
要避免的字符
- 连字符。
touch my-file -lt
- 空格。
touch more drink touch "more drink"
- 大多数其他特殊字符 !@#$%^&*():;"'}{|\<,>.?~`
touch memo*
要删除文件或子树目录,请使用 rm。
rm [options] files
文件可以是文件或目录。
常见选项
-i interactive: prompt for each removal -f force: force the overwriting -r recursive: remove subtree directories and contents
没有“撤销删除”或“恢复”命令。
示例
rm *.[a-z] rm readme readme.orig rm ls /bin rm -rfi /bin cd; rm -rf * .* # This removes all files in the home directory of the current user, as well as those in the subdirectories therein!
要搜索子树目录中的文件,请使用 find。
find [subtrees] [conditions] [actions]
该命令可以接受多个条件,并将递归地搜索子树。
一些可能的条件是
-name [FNG] # Search for the FNG name -type c # Type of file [bcdfl] -size [+-]# # Has a +- size in blocks (c: bytes, k: kilobytes) -user [name] # Own by user -atime [+-]# # Accessed days ago. +n means the file has not been accessed for the last n days. -n means the file has been accessed in the last n days. -mtime [+-]# # Modified days ago -perm nnn # Has permision flags nnn
一些可能的动作是
-print # Print the pathname -exec cmd {} \; # Execute cmd on the file -ok cmd {} \; # Same as -exec but ask first
示例
find . -name '*.[ch]' -print find /var /tmp . -size +20 -print find ~ -type c -name '*sys*' -print find / -type f -size +2c -exec rm -i {} \; find / -atime -3 -print find ~jo ~toto -user chloe -exec mv {} /tmp \;
要定位二进制文件、源文件或手册页,请使用 whereis。
whereis [options]
常见选项
-b: Search only for binaries. -m: Search only for manual sections. -s: Search only for sources.
示例
$ whereis host host: /usr/bin/host /etc/host.conf /usr/share/man/man1/host.1.gz $ whereis -m host host: /usr/share/man/man1/host.1.gz
要定位由 PATH 变量定义的位置的文件,请使用 which。
$ which -a ls /bin/ls
-a 将在 PATH 中查找所有可能的匹配项,而不仅仅是第一个匹配项。
- 编写一个交互式命令来删除主目录中的所有 .tmp 文件。对每个提示都回答 y。
- 列出用户主目录中所有以 .pdf 结尾且大小大于 50 个块且一个月内未被访问的文件。
- 创建一个名为 file.h 的文件,其中包含在 /usr 目录中找到的所有以 .h 结尾的文件名。
- 对 /usr/src/packages 目录中找到的所有 c 文件进行 touch 操作。
- 创建新文件和新目录时的默认权限是什么?
- 如何创建一个文件名中包含空格的新文件或目录?(例如:'new dir')
- 删除主目录中所有类型为字符和块的文件的命令是什么?
- 如何查找 find 程序的位置?
- 删除 /tmp 中所有不属于 root 且一周内未被访问的文件。