linux-tutorial/docs/linux/02.Linux文件目录管理.md

260 lines
9.5 KiB
Markdown
Raw Normal View History

2018-09-27 17:26:46 +08:00
---
title: Linux 文件目录管理命令
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
# Linux 文件目录管理
> 关键词:`cd`, `ls`, `pwd`, `mkdir`, `rmdir`, `tree`, `cp`, `mv`, `rm`
<!-- TOC depthFrom:2 depthTo:3 -->
- [Linux 文件目录管理要点](#linux-文件目录管理要点)
- [Linux 目录结构](#linux-目录结构)
- [Linux 文件属性](#linux-文件属性)
- [命令概述](#命令概述)
- [切换目录 - cd](#切换目录---cd)
- [显示目录信息 - ls](#显示目录信息---ls)
- [显示当前目录的绝对路径 - pwd](#显示当前目录的绝对路径---pwd)
- [创建目录 - mkdir](#创建目录---mkdir)
- [删除空目录 - rmdir](#删除空目录---rmdir)
- [树状显示目录的内容 - tree](#树状显示目录的内容---tree)
- [复制文件或目录 - cp](#复制文件或目录---cp)
- [移动文件或目录 - mv](#移动文件或目录---mv)
- [删除文件或目录 - rm](#删除文件或目录---rm)
<!-- /TOC -->
## Linux 文件目录管理要点
### Linux 目录结构
linux 目录结构是树形结构,其根目录是 `/` 。一张思维导图说明各个目录的作用:
![](http://dunwu.test.upcdn.net/images/linux/linux-folders.png)
### Linux 文件属性
Linux 系统是一种典型的多用户系统不同的用户处于不同的地位拥有不同的权限。为了保护系统的安全性Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们可以使用 ll 或者 ls l 命令来显示一个文件的属性以及文件所属的用户和组,如:
```sh
$ ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
```
实例中bin 文件的第一个属性用 `d` 表示。`d` 在 Linux 中代表该文件是一个目录文件。
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为 `d` 则是目录
- 当为 `-` 则是文件;
- 若是 `l` 则表示为链接文档(link file)
- 若是 `b` 则表示为装置文件里面的可供储存的接口设备(可随机存取装置)
- 若是 `c` 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中以三个为一组且均为『rwx』 的三个参数的组合。其中,`r` 代表可读(read)、`w` 代表可写(write)、`x` 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 `-` 而已。
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
![](http://oyz7npk35.bkt.clouddn.com/images/20180920180927171909.png)
从左至右用 0-9 这些数字来表示。
- 第 0 位确定文件类型
- 第 1-3 位确定属主(该文件的拥有者)拥有该文件的权限。
- 第 4-6 位确定属组(拥有者的同组用户)拥有该文件的权限。
- 第 7-9 位确定其他用户拥有该文件的权限。
- 第 1、4、7 位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限。
- 第 2、5、8 位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限。
- 第 3、6、9 位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。
#### Linux 文件属主和属组
```sh
$ ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
```
- 对于文件来说,它都有一个特定的拥有者,也就是对该文件具有所有权的用户。
- 同时,在 Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。
- 文件拥有者以外的用户又可以分为文件拥有者的同组用户和其他用户。
- 因此Linux 系统按文件拥有者、文件拥有者同组用户和其他用户来规定了不同的文件访问权限。
- 在以上实例中bin 文件是一个目录文件,属主和属组都为 root属主有可读、可写、可执行的权限与属主同组的其他用户有可读和可执行的权限其他用户也有可读和可执行的权限。
## 命令概述
### 切换目录 - cd
> cd 命令用来切换工作目录。
>
> 参考http://man.linuxde.net/cd
示例:
```sh
cd # 切换到用户主目录
cd ~ # 切换到用户主目录
cd - # 切换到上一个工作目录
cd .. # 切换到上级目录
cd ../.. # 切换到上两级目录
```
### 显示目录信息 - ls
> ls 命令用来显示目录信息。
>
> 参考http://man.linuxde.net/ls
示例:
```sh
ls # 列出当前目录可见文件
ls -l # 列出当前目录可见文件详细信息
ls -la # 列出所有文件(包括隐藏)的详细信息
ls -lh # 列出详细信息并以可读大小显示文件大小
ls -lt # 按时间列出文件和文件夹详细信息
ls -ltr # 按修改时间列出文件和文件夹详细信息
ls --color=auto # 列出文件并标记颜色分类
```
### 显示当前目录的绝对路径 - pwd
> pwd 命令用来显示当前目录的绝对路径。
>
> 参考http://man.linuxde.net/pwd
### 创建目录 - mkdir
> mkdir 命令用来创建目录。
>
> 参考http://man.linuxde.net/mkdir
示例:
```sh
# 在当前目录中创建 zp 和 zp 的子目录 test
mkdir -p zp/test
# 在当前目录中创建 zp 和 zp 的子目录 test权限设置为文件主可读、写、执行同组用户可读和执行其他用户无权访问
mkdir -p -m 750 zp/test
```
### 删除空目录 - rmdir
> rmdir 命令用来删除空目录。
>
> 参考http://man.linuxde.net/rmdir
示例:
```sh
# 删除子目录 test 和其父目录 zp
rmdir -p zp/test
```
### 树状显示目录的内容 - tree
> tree 命令以树状显示目录的内。
>
> 参考http://man.linuxde.net/tree
示例:
```sh
# 列出目录 /private 第一级文件名
tree /private -L 1
/private/
├── etc
├── tftpboot
├── tmp
└── var
# 忽略文件夹
tree -I node_modules # 忽略当前目录文件夹 node_modules
tree -P node_modules # 列出当前目录文件夹 node_modules 的目录结构
tree -P node_modules -L 2 # 显示目录 node_modules 两层的目录树结构
tree -L 2 > /home/www/tree.txt # 当前目录结果存到 tree.txt 文件中
# 忽略多个文件夹
tree -I 'node_modules|icon|font' -L 2
```
### 复制文件或目录 - cp
> cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
>
> 参考http://man.linuxde.net/cp
示例:
#### 参数
- 源文件制定源文件列表。默认情况下cp 命令不能复制目录,如果要复制目录,则必须使用`-R`选项;
- 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
示例:
```sh
# 将文件 file 复制到目录 /usr/men/tmp 下,并改名为 file1
cp file /usr/men/tmp/file1
# 将目录 /usr/men下的所有文件及其子目录复制到目录 /usr/zh 中
cp -r /usr/men /usr/zh
# 强行将 /usr/men下的所有文件复制到目录 /usr/zh 中,无论是否有文件重复
cp -rf /usr/men/* /usr/zh
# 将目录 /usr/men 中的以 m 打头的所有 .c 文件复制到目录 /usr/zh 中
cp -i /usr/men m*.c /usr/zh
```
### 移动文件或目录 - mv
> mv 命令用来对文件或目录重新命名或者将文件从一个目录移到另一个目录中。source 表示源文件或目录target 表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
>
> 参考http://man.linuxde.net/mv
示例:
```sh
mv file1.txt /home/office/ # 移动单个文件
mv file2.txt file3.txt file4.txt /home/office/ # 移动多个文件
mv *.txt /home/office/ # 移动所有 txt 文件
mv dir1/ /home/office/ # 移动目录
mv /usr/men/* . # 将指定目录中的所有文件移到当前目录中
mv file1.txt file2.txt # 重命名文件
mv dir1/ dir2/ # 重命名目录
mv -v *.txt /home/office # 打印移动信息
mv -i file1.txt /home/office # 提示是否覆盖文件
mv -uv *.txt /home/office # 源文件比目标文件新时才执行更新
mv -vn *.txt /home/office # 不要覆盖任何已存在的文件
mv -f *.txt /home/office # 无条件覆盖已经存在的文件
mv -bv *.txt /home/office # 复制时创建备份
```
### 删除文件或目录 - rm
> rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
>
> 参考http://man.linuxde.net/rm
```sh
rm test.txt # 删除文件
rm -i test.txt test2.txt # 交互式删除文件
rm -r * # 删除当前目录下的所有文件和目录
rm -r testdir # 删除目录下的所有文件和目录
rm -rf testdir # 强制删除目录下的所有文件和目录
rm -v testdir # 显示当前删除操作的详情
```