Linux 文件和目录


linux中除了进程外,其它都是文件,目录是一种特殊的文件。所有文件被组织成一个层次结构,层次结构的顶端称为根目录(使用/表示)。


用户登录后,打开终端窗口时进入的目录称为home目录(使用~表示),home目录和登录时使用的用户名是一样的。cd命令不带参数,会更改用户当前所在目录为home目录。以下简称用户当前所在目录当前目录

pwd

pwd(print working directory)命令输出当前目录。pwd命令没有参数。

$ pwd

cd

cd(change directory)命令更改当前目录到指定目录。目录参数可以不指定。

$ cd
$ cd /usr/bin
$ cd bin
$ cd ..
$ cd ../..
$ cd ../bin
$ cd ~/bin
$ cd -

cd命令会更改当前目录为home目录。

cd /usr/bin命令会更改当前目录为/usr/bin目录。

cd bin命令会更改当前目录为当前目录的子目录bin。

cd ..命令将当前目录更改为当前目录的父目录,cd ../..命令将当前目录更改为当前目录的父目录的父目录。

cd ../bin命令会更改当前目录为和当前目录同级的目录bin。

cd ~/bin命令会更改当前目录为home目录的子目录bin。

cd -命令返回到前一次的当前目录。

ls

ls(list)命令列出当前目录(不指定目录参数时)或指定目录的文件,一次可指定多个目录。目录参数可以是绝对路径(从根目录开始),也可以是相对路径(相对当前目录)。

$ ls
$ ls /usr/bin
$ ls bin
$ ls ~
$ ls ~/bin
$ ls ..
$ ls -a
$ ls -l
$ ls file*

ls bin命令会列出当前目录的子目录bin中的所有文件。如果当前目录为/usr/local(pwd命令的输出),则列出/usr/local/bin目录的文件。

ls ~命令会列出home目录中的所有文件。

ls ~/bin命令会列出home目录的子目录bin中的所有文件。

ls ..命令会列出当前目录的父目录中的所有文件。

ls -a命令会显示所有的文件,包含隐藏文件。隐藏文件是以.开头的文件。其中有两个特殊的隐藏文件,一个是.用来表示当前目录,另一个是..表示当前目录的父目录。

ls -l命令会显示文件的详细信息,包含文件访问权限、文件大小、文件所属用户和组,文件更改时间等信息。有些系统上有ll命令,是ls -l命令的简写形式。

ls file*命令会列出当前目录中所有以file开头的文件。

mkdir

mkdir(make directory)命令用于创建目录。可以一次创建多个目录,也可以一次创建多级目录。

$ mkdir tutor
$ mkdir python js
$ mkdir -p java/tutor
$ mkdir -p js/tutor c/tutor
$ mkdir -p /java/tutor

mkdir tutor命令在当前目录中创建子目录tutor。

mkdir python js命令在当前目录中创建两个子目录python和js。

mkdir -p java/tutor命令在当前目录中创建子目录java,同时在目录java下创建子目录tutor。

mkdir -p js/tutor c/tutor命令在当前目录中创建两个子目录js和c,同时在目录js和c下再分别创建子目录tutor。

mkdir -p /java/tutor命令在在根目录下创建子目录java,目录java下再创建子目录tutor。

cp

cp(copy)命令用来复制文件或目录。

$ cp file1 file1_bak
$ cp file1 file2 dir1
$ cp file1 /c/tutor
$ cp -r dir1 /java/tutor
$ cp -i file1 file2

cp file1 file1_bak命令复制当前目录中的文件file1,得到一个新文件file1_bak。

cp file1 file2 dir1命令复制当前目录中两个文件file1和file2到当前目录的子目录dir1中。即一次复制多个文件。

cp file1 /c/tutor命令复制当前目录中文件file1到目录/c/tutor,目录/c/tutor必须存在。

cp -r dir1 /java/tutor命令复制当前目录的子目录dir1,包含dir1的子目录,到目录/java/tutor。复制的源目录可以有多个。

cp -i file1 file2命令复制文件file1为file2,如果file2已经存在,会提示是否覆盖file2。

mv

mv(move)命令用来将文件或目录从一个位置移动到另一个位置。也用来更改文件名。

$ mv file1 file2
$ mv file1 file2 dir1
$ mv file1 /c/tutor
$ mv dir1 /java/tutor
$ mv -i file1 file2

mv file1 file2命令更改文件file1的文件名为file2。

mv file1 file2 dir1命令移动当前目录中两个文件file1和file2到当前目录的子目录dir1中。即一次移动多个文件。

mv file1 /c/tutor命令移动当前目录中文件file1到目录/c/tutor,目录/c/tutor必须存在。

mv dir1 /java/tutor命令移动当前目录的子目录dir1,包含dir1的子目录,到目录/java/tutor。移动的源目录可以有多个。

mv -i file1 file2命令更改文件file1的文件名为file2,如果file2已经存在,会提示是否覆盖file2。

rm

rm(remove)命令用来删除文件或目录。

$ rm file1
$ rm file*
$ rm -r dir1
$ rm -rf dir1
$ rm -i file1

rm file1命令删除当前目录中的文件file1。可以一次指定多个文件。

rm file*命令删除当前目录中所有以file打头的文件。不能删除目录。

rm -r dir1命令删除当前目录的子目录dir1,包含dir1的子目录。如果dir1目录不存在,提示目录不存在。

rm -rf dir1命令删除当前目录的子目录dir1,包含dir1的子目录。-f选项会忽略不存在的目录。

rm -i file1命令删除当前目录中的文件file1,会提示是否确定要删除。可以一次指定多个文件。

ln

ln(link)用来创建硬链接(hard link)或符号链接(symbolic link,也称为软链接)。不能对目录创建硬链接。

$ ln file1 link1
$ ln -s file1 link1
$ ln -s dir1 link2

ln file1 link1命令创建文件file1的一个硬链接link1。硬链接link1和文件file1没什么区别。删除文件file1后,link1还可以访问。

ln -s file1 link1命令创建文件file1的一个符号链接link1。符号链接link1相当于文件file1的快捷方式,如果删除文件file1后,访问link1会提示文件不存在。

ln -s dir1 link2命令创建目录dir1的一个符号链接link2。

file

file命令用来检测文件类型。linux不通过文件扩展名来区分文件类型。

$ file file1

file file1命令检测文件file1的类型。

less

less命令用来查看文件内容。支持分页,查找,文件内跳转。

$ less file1

less file1命令显示文件当前目录中文件file1的内容。

常用的less命令:

  • f空格键:向前滚动一页。
  • b:向后滚动一页。
  • d:向前滚动半页。
  • u:向后滚动半页。
  • j:向前滚动一行。命令前面加数字,可以一次滚动多行。
  • k:向后滚动一行。命令前面加数字,可以一次滚动多行。
  • g:移动到第一行。
  • G:移动到最后一行。
  • /:后面跟要搜索的内容,回车,向前搜索指定内容。输入n,搜索下一个匹配。输入p,搜索上一个匹配。
  • ?:后面跟要搜索的内容,回车,向后搜索指定内容。输入n,搜索下一个匹配。输入p,搜索上一个匹配。
  • q:退出less。
  • h:显示帮助。

touch

touch命令用来创建空文件或更改文件的访问时间和更改时间。

$ touch file1
$ touch -a file1
$ touch -m file1
$ touch -t 202005300730.20 file1

touch file1命令创建文件file1,如果file1不存在;存在则更改文件的访问时间和更改时间为当前时间。

touch -a file1命令更改文件file1的访问时间为当前时间。

touch -m file1命令更改文件file1的更改时间为当前时间。

touch -t 202005300730.20 file1命令更改文件file1的访问时间和更改时间为2020年5月30日7点30分20秒。

stat

stat命令显示文件或文件系统的状态

$ stat stat /etc/passwd

stat /etc/passwd命令显示文件/etc/passwd的状态,包含文件类型、最近访问和最近更改时间等。