跳转到内容

LPI Linux 认证/执行基本文件管理

来自维基教科书,开放世界中的开放书籍

详细目标

[编辑 | 编辑源代码]

(LPIC-1 版本 5.0)

权重: 4

描述: 候选人应该能够使用基本的 Linux 命令来管理文件和目录。

关键知识领域

  • 分别复制、移动和删除文件和目录。
  • 递归地复制多个文件和目录。
  • 递归地删除文件和目录。
  • 在命令中使用简单和高级的通配符规范。
  • 使用 find 根据类型、大小或时间来定位和操作文件。
  • tarcpiodd 的使用。

以下是使用的文件、术语和实用程序的部分列表

  • 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 中查找所有可能的匹配项,而不仅仅是第一个匹配项。

  1. 编写一个交互式命令来删除主目录中的所有 .tmp 文件。对每个提示都回答 y。
  2. 列出用户主目录中所有以 .pdf 结尾且大小大于 50 个块且一个月内未被访问的文件。
  3. 创建一个名为 file.h 的文件,其中包含在 /usr 目录中找到的所有以 .h 结尾的文件名。
  4. 对 /usr/src/packages 目录中找到的所有 c 文件进行 touch 操作。
  5. 创建新文件和新目录时的默认权限是什么?
  6. 如何创建一个文件名中包含空格的新文件或目录?(例如:'new dir')
  7. 删除主目录中所有类型为字符和块的文件的命令是什么?
  8. 如何查找 find 程序的位置?
  9. 删除 /tmp 中所有不属于 root 且一周内未被访问的文件。


华夏公益教科书