liunx系统目录总结

301 阅读6分钟

Linux系统的目录系统是层次结构的文件系统,根目录(/)是所有目录和文件的起点。从根目录开始,可以访问系统中的所有文件和目录。以下是一些常见的默认路径及其用途:

根目录(/)

根目录是文件系统的顶级目录,所有其他目录都在此目录下。

常见的子目录

  1. /bin

    • 存放基本的用户命令(binaries),如 ls, cp, mv, rm 等。
    • 这些命令在系统单用户模式下也可用。
  2. /sbin

    • 存放系统管理命令(system binaries),如 ifconfig, reboot, shutdown 等。
    • 通常只有超级用户可以使用这些命令。
  3. /boot

    • 存放启动系统所需的文件,如内核、初始RAM磁盘映像等。
  4. /dev

    • 存放设备文件,每个设备(如硬盘、终端设备)都有一个对应的文件。
  5. /etc

    • 存放系统的配置文件和脚本,如用户密码文件 /etc/passwd,网络配置文件等。
  6. /home

    • 存放用户的主目录,每个用户都有一个对应的子目录,如 /home/username
  7. /lib

    • 存放基本的共享库文件和内核模块。
  8. /media

    • 挂载点目录,用于临时挂载的可移动介质(如CD-ROM, USB设备)。
  9. /mnt

    • 挂载点目录,用于临时挂载的文件系统。
  10. /opt

    • 存放附加的应用程序软件包。
  11. /proc

    • 虚拟文件系统,包含内核和进程的信息,如 /proc/cpuinfo
  12. /root

    • 超级用户(root)的主目录。
  13. /run

    • 存放系统运行时产生的文件。
  14. /srv

    • 存放服务的数据,如Web服务器的数据。
  15. /sys

    • 虚拟文件系统,提供与系统硬件和内核模块交互的接口。
  16. /tmp

    • 存放临时文件,系统重新启动后会被清空。
  17. /usr

    • 存放用户级程序和数据。
    • 重要的子目录包括:
      • /usr/bin:存放用户使用的命令。
      • /usr/sbin:存放系统管理员使用的命令。
      • /usr/lib:存放用户程序使用的库文件。
      • /usr/local:存放本地安装的软件。
  18. /var

    • 存放经常变化的数据文件,如日志文件、邮件、打印机队列等。
    • 重要的子目录包括:
      • /var/log:存放系统日志文件。
      • /var/spool:存放临时文件,如打印队列文件。
      • /var/tmp:存放临时文件,系统重新启动后不会被清空。

树状结构示意图

/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin
├── srv
├── sys
├── tmp
├── usr
│   ├── bin
│   ├── lib
│   ├── local
│   └── sbin
└── var
    ├── log
    ├── spool
    └── tmp

在Linux系统中,root用户和非root用户的默认工作目录和程序存放目录有所不同。下面是详细的解释:

root 用户

当前工作目录

  • 当以root用户登录并打开一个终端时,默认的当前工作目录是 /root
    • 这是root用户的主目录,类似于非root用户的 /home/username

安装程序的目录

  • 使用包管理器安装的软件通常放在以下几个目录中:
    • /bin:基本的用户命令(binaries)。
    • /sbin:系统管理命令(system binaries)。
    • /usr/bin:用户级别的可执行文件。
    • /usr/sbin:系统管理命令,但主要供超级用户使用。
    • /usr/local/bin:本地安装的用户命令。
    • /usr/local/sbin:本地安装的系统管理命令。

这些目录中的程序可以被所有用户访问和使用,具体取决于程序和系统的配置。

非root 用户

当前工作目录

  • 非root用户登录并打开一个终端时,默认的当前工作目录是该用户的主目录,通常位于 /home/username
    • 例如,用户 john 的主目录是 /home/john

安装程序的目录

  • 非root用户通常没有权限将程序安装到系统级别的目录(如 /bin/usr/bin 等)。
  • 非root用户可以在其主目录中安装和使用程序,常见的目录包括:
    • ~/bin:用户级别的可执行文件(~ 代表用户的主目录)。
      • 例如:/home/john/bin
    • ~/local:本地安装的程序和库文件。
      • 例如:/home/john/local

示例

  1. root 用户

    • 登录后默认工作目录:
      root@hostname:~# pwd
      /root
      
    • 安装程序的位置(使用包管理器,如 aptyum):
      apt install some-package
      # 程序将被安装到 /usr/bin 或 /usr/sbin 等目录
      
  2. 非root 用户

    • 登录后默认工作目录:
      john@hostname:~$ pwd
      /home/john
      
    • 安装程序的位置(假设用户安装到其主目录中的 ~/bin):
      # 手动安装或编译程序
      ./configure --prefix=/home/john/local
      make
      make install
      # 程序将被安装到 /home/john/local/bin
      

总结

  • root 用户:默认工作目录是 /root,安装的程序通常放在 /bin/sbin/usr/bin/usr/sbin/usr/local/bin/usr/local/sbin 等目录。
  • 非root 用户:默认工作目录是其主目录(如 /home/john),用户自行安装的程序通常放在其主目录下的 ~/bin~/local 等目录。

Docker容器的工作目录

在Docker中,执行命令的工作路径(working directory)可以通过多种方式定义和控制。默认情况下,工作路径是镜像的默认工作路径,但你可以在运行容器时指定不同的工作路径。以下是一些常见的情况和设置方法:

1. 默认工作路径

  • 当你运行一个Docker容器时,如果没有指定工作路径,容器将使用镜像的默认工作路径。
  • 默认工作路径通常在Dockerfile中通过 WORKDIR 指令指定。

2. 在Dockerfile中指定工作路径

  • 你可以在构建镜像时通过 WORKDIR 指令设置工作路径。这将成为容器启动时的默认工作路径。
FROM node:14
WORKDIR /app
COPY . /app
RUN npm install
CMD ["node", "index.js"]

在这个例子中,WORKDIR /app 指定了容器的默认工作路径为 /app

3. 在运行容器时指定工作路径

  • 你可以在运行容器时通过 -w--workdir 选项指定工作路径。
docker run -it -w /custom-dir my-image

这个命令将把工作路径设置为 /custom-dir,即使镜像的默认工作路径是其他目录。

4. 检查容器的当前工作路径

  • 你可以在运行中的容器中检查当前的工作路径。使用 docker exec 命令并运行 pwd
docker exec -it container_id pwd

示例

假设你有一个简单的Dockerfile如下:

FROM node:14
WORKDIR /app
COPY . /app
RUN npm install
CMD ["node", "index.js"]

构建镜像:

docker build -t my-node-app .

运行容器时不指定工作路径(将使用默认工作路径 /app):

docker run -it my-node-app

运行容器时指定工作路径为 /custom-dir

docker run -it -w /custom-dir my-node-app

在运行中的容器中检查当前工作路径:

docker exec -it container_id pwd

总结

  • 默认情况下,Docker容器的工作路径由镜像的 WORKDIR 指令指定。
  • 你可以在运行容器时使用 -w--workdir 选项指定工作路径。
  • 你可以在运行中的容器中使用 docker execpwd 命令检查当前工作路径。

通过这些方法,你可以灵活地控制和检查Docker容器的工作路径。如果有更多问题或需要进一步的帮助,请告诉我!