Linux 系统中的目录结构为树状结构,最顶级的目录为根目录 /
其他目录可以通过挂载(mount)添加到树中,也可以通过解除挂载(umount)移除。

在操作文件和目录前,需要理解绝对路径相对路径的概念:

  • 绝对路径:从根目录 / 开始书写的完整路径,例如 /usr/share/doc

  • 相对路径:相对于当前目录的路径,例如在 /usr/share/doc 下切换到 /usr/share/man,可以使用 cd ../man


一、常用目录操作命令

Linux 提供了丰富的命令用于处理目录与文件:

  • ls(list files):列出目录内容

  • cd(change directory):切换工作目录

  • pwd(print working directory):显示当前目录

  • mkdir(make directory):创建新目录

  • rmdir(remove directory):删除空目录

  • cp(copy file):复制文件或目录

  • rm(remove):删除文件或目录

  • mv(move file):移动文件或目录,或重命名

可以使用 man [命令] 查看各命令的详细使用文档,例如 man cp


1. ls — 列出目录内容

ls 是 Linux 中最常用的命令之一。
基本用法:

ls [选项] 目录名称

示例:

# 使用常用选项
ls [-aAdfFhilnrRSt] 目录名称

# 设置输出颜色
ls [--color={never,auto,always}] 目录名称

# 显示完整时间
ls [--full-time] 目录名称

常用选项说明

  • -a:显示全部文件,包括隐藏文件(以 . 开头的文件)

  • -d:仅显示目录自身,而不是列出目录内的文件内容

  • -l:使用长格式显示,包含文件的详细属性和权限等信息

长格式 -l 输出详解

使用 ls -lls -al 可以显示详细信息,每一列含义如下:

  1. 文件类型和权限(第一列)

    • 第一位:- 普通文件,d 目录,l 链接

    • 接下来的九位:权限,分三组表示:拥有者、组用户、其他人

      • r 可读,w 可写,x 可执行

    • 示例:-rw-r--r-- 表示普通文件,拥有者可读写,组用户可读,其他人可读

  2. 硬链接数(第二列)

    • 表示文件被多少个名字引用

    • 对目录而言:硬链接数 = 2 + 子目录数量

    • 示例:

      $ touch a.txt
      $ ln a.txt b.txt   # 创建硬链接
      $ ls -l
      -rw-r--r-- 2 user user 0 May 18 10:00 a.txt
      -rw-r--r-- 2 user user 0 May 18 10:00 b.txt

      这里 2 表示 a.txtb.txt 都指向同一份数据,删除其中一个仍然存在。

  3. 拥有者(第三列)

    • 文件所属用户,例如 huifeng

  4. 所属组(第四列)

    • 文件所属组,例如 huifeng

  5. 文件大小(第五列)

    • 单位为字节(B)

  6. 最后修改时间(第六列到第八列)

    • 格式为 月 日 时间,例如 May 18 10:00

  7. 文件名(最后一列)

    • 文件或目录的名称

-d 选项详解

  • 作用

    • 默认情况下,ls 列出目录里的内容:

      $ ls /home/user
      file1.txt  file2.txt  folder1
    • 如果直接 ls folder1,显示的是目录里的文件,而不是目录本身

    • 加上 -d,只显示目录自身的信息:

      $ ls -ld folder1
      drwxr-xr-x 2 user user 4096 May 18 09:50 folder1
  • 常用组合

    • ls -ld *:显示当前目录下每个文件和目录的详细信息,而不展开目录内容

    • 对比:

      • ls -l folder1 → 显示 folder1 内的文件

      • ls -ld folder1 → 显示 folder1 自己的信息

  • 直觉理解

    • 把目录想象成“箱子”:

      • ls folder1 → 打开箱子,看里面有什么东西

      • ls -d folder1 → 只看箱子本身,比如箱子的大小、颜色、标签,而不看里面的内容

示例命令总结

# 列出当前目录所有文件(包括隐藏文件)并显示详细信息
ls -al

# 仅查看目录自身的详细信息
ls -ld folder1

# 查看当前目录下每个文件和目录的详细信息
ls -ld *

2. cd — 切换目录

语法:

cd [相对路径或绝对路径]

示例:

mkdir runoob         # 创建目录
cd /root/runoob/     # 使用绝对路径切换
cd ./runoob/         # 使用相对路径切换
cd ~                 # 回到家目录
cd ..                # 切换到上一级目录

3. pwd — 显示当前目录

语法:

pwd [-P]
  • -P:显示真实路径而非符号链接路径

示例:

cd /var/mail
pwd        # 显示 /var/mail(可能是链接)
pwd -P     # 显示实际路径 /var/spool/mail

4. mkdir — 创建目录

语法:

mkdir [-mp] 目录名称

选项:

  • -m:设置权限,例如 mkdir -m 711 test2

  • -p:递归创建多级目录

示例:

mkdir test
mkdir -p test1/test2/test3/test4
mkdir -m 711 test2

5. rmdir — 删除空目录

语法:

rmdir [-p] 目录名称
  • -p:递归删除多级空目录

示例:

rmdir runoob
rmdir -p test1/test2/test3/test4

注意:rmdir 只能删除空目录,非空目录需使用 rm -r


6. cp — 复制文件或目录

语法:

cp [-adfilprsu] 来源 目标

常用选项:

  • -a:归档模式(保留属性、递归)

  • -r:递归复制目录

  • -i:覆盖前提示确认

  • -f:强制覆盖

  • -p:保留文件属性

示例:

cp ~/.bashrc /tmp/bashrc
cp -i ~/.bashrc /tmp/bashrc
cp -r test test-cp

7. rm — 删除文件或目录

语法:

rm [-fir] 文件或目录

常用选项:

  • -f:强制删除,无警告

  • -i:交互式删除

  • -r:递归删除目录(危险!)

示例:

rm -i bashrc
rm -rf testdir

8. mv — 移动或重命名文件/目录

语法:

mv [-fiu] source destination

选项:

  • -f:强制覆盖

  • -i:覆盖前询问

  • -u:只更新旧文件

示例:

mkdir mvtest
mv bashrc mvtest/        # 移动文件到目录
mv mvtest mvtest2        # 重命名目录

三、Linux 文件内容查看

Linux系统中使用以下命令来查看文件的内容:

  • cat  由第一行开始显示文件内容

  • tac  从最后一行开始显示,可以看出 tac 是 cat 的倒着写!

  • nl   显示的时候,顺道输出行号!

  • more 一页一页的显示文件内容

  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!

  • head 只看头几行

  • tail 只看尾巴几行

你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。

cat:由第一行开始显示文件内容

语法:

cat [-AbEnTv]

选项与参数:

  • -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;

  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!

  • -E :将结尾的断行字节 $ 显示出来;

  • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;

  • -T :将 [tab] 按键以 ^I 显示出来;

  • -v :列出一些看不出来的特殊字符

检看 /etc/issue 这个文件的内容:

[root@www ~]# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m

tac:从最后一行开始显示

tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:

[root@www ~]# tac /etc/issue

Kernel \r on an \m
CentOS release 6.4 (Final)

nl:显示行号

语法:

nl [-bnw] 文件

选项与参数:

  • -b :指定行号指定的方式,主要有两种:
    -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    -b t :如果有空行,空的那一行不要列出行号(默认值);

  • -n :列出行号表示的方法,主要有三种:
    -n ln :行号在荧幕的最左方显示;
    -n rn :行号在自己栏位的最右方显示,且不加 0 ;
    -n rz :行号在自己栏位的最右方显示,且加 0 ;

  • -w :行号栏位的占用的位数。

实例一:用 nl 列出 /etc/issue 的内容

[root@www ~]# nl /etc/issue
     1  CentOS release 6.4 (Final)
     2  Kernel \r on an \m

more:一页一页翻动

[root@www ~]# more /etc/man_db.config 
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
--More--(28%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

在 more 这个程序的运行过程中,你有几个按键可以按的:

  • 空白键 (space):代表向下翻一页;

  • Enter         :代表向下翻『一行』;

  • /字串         :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;

  • :f            :立刻显示出档名以及目前显示的行数;

  • q             :代表立刻离开 more ,不再显示该文件内容。

  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

less

功能更强大,除了从上到下查看,还可以向上翻页,并提供更丰富的搜索和导航功能。

一页一页翻动,以下实例输出/etc/man.config文件的内容:

[root@www ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
:   <== 这里可以等待你输入命令!

less运行时可以输入的命令有:

  • 空白键    :向下翻动一页;

  • [pagedown]:向下翻动一页;

  • [pageup]  :向上翻动一页;

  • /字串     :向下搜寻『字串』的功能;

  • ?字串     :向上搜寻『字串』的功能;

  • n         :重复前一个搜寻 (与 / 或 ? 有关!)

  • N         :反向的重复前一个搜寻 (与 / 或 ? 有关!)

  • q         :离开 less 这个程序;

head:取出文件前面几行

语法:

head [-n number] 文件 

选项与参数:

  • -n :后面接数字,代表显示几行的意思

[root@www ~]# head /etc/man.config

默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:

[root@www ~]# head -n 20 /etc/man.config

tail:取出文件后面几行

语法:

tail [-n number] 文件 

选项与参数:

  • -n :后面接数字,代表显示几行的意思

  • -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测

[root@www ~]# tail /etc/man.config
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config