Linux系统的目录系统是层次结构的文件系统,根目录(/)是所有目录和文件的起点。从根目录开始,可以访问系统中的所有文件和目录。以下是一些常见的默认路径及其用途:
根目录(/)
根目录是文件系统的顶级目录,所有其他目录都在此目录下。
常见的子目录
-
/bin:
- 存放基本的用户命令(binaries),如
ls,cp,mv,rm等。 - 这些命令在系统单用户模式下也可用。
- 存放基本的用户命令(binaries),如
-
/sbin:
- 存放系统管理命令(system binaries),如
ifconfig,reboot,shutdown等。 - 通常只有超级用户可以使用这些命令。
- 存放系统管理命令(system binaries),如
-
/boot:
- 存放启动系统所需的文件,如内核、初始RAM磁盘映像等。
-
/dev:
- 存放设备文件,每个设备(如硬盘、终端设备)都有一个对应的文件。
-
/etc:
- 存放系统的配置文件和脚本,如用户密码文件
/etc/passwd,网络配置文件等。
- 存放系统的配置文件和脚本,如用户密码文件
-
/home:
- 存放用户的主目录,每个用户都有一个对应的子目录,如
/home/username。
- 存放用户的主目录,每个用户都有一个对应的子目录,如
-
/lib:
- 存放基本的共享库文件和内核模块。
-
/media:
- 挂载点目录,用于临时挂载的可移动介质(如CD-ROM, USB设备)。
-
/mnt:
- 挂载点目录,用于临时挂载的文件系统。
-
/opt:
- 存放附加的应用程序软件包。
-
/proc:
- 虚拟文件系统,包含内核和进程的信息,如
/proc/cpuinfo。
- 虚拟文件系统,包含内核和进程的信息,如
-
/root:
- 超级用户(root)的主目录。
-
/run:
- 存放系统运行时产生的文件。
-
/srv:
- 存放服务的数据,如Web服务器的数据。
-
/sys:
- 虚拟文件系统,提供与系统硬件和内核模块交互的接口。
-
/tmp:
- 存放临时文件,系统重新启动后会被清空。
-
/usr:
- 存放用户级程序和数据。
- 重要的子目录包括:
- /usr/bin:存放用户使用的命令。
- /usr/sbin:存放系统管理员使用的命令。
- /usr/lib:存放用户程序使用的库文件。
- /usr/local:存放本地安装的软件。
-
/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。
- 这是root用户的主目录,类似于非root用户的
安装程序的目录
- 使用包管理器安装的软件通常放在以下几个目录中:
- /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。
- 例如:
- ~/bin:用户级别的可执行文件(
示例
-
root 用户:
- 登录后默认工作目录:
root@hostname:~# pwd /root - 安装程序的位置(使用包管理器,如
apt或yum):apt install some-package # 程序将被安装到 /usr/bin 或 /usr/sbin 等目录
- 登录后默认工作目录:
-
非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 exec和pwd命令检查当前工作路径。
通过这些方法,你可以灵活地控制和检查Docker容器的工作路径。如果有更多问题或需要进一步的帮助,请告诉我!