Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Xbren master #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
ghost wants to merge 3 commits into master from xbren-master
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 29 additions & 29 deletions docs/commandLine/shell_first_view.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ cd 命令可以直接使用,不加任何参数,此时会默认切换到当

本节首先来学习一下查看文件与目录信息的相关命令。ls 命令最基本的形式会显示当前目录下的文件和目录。

注意,ls 命令输出的列表是按字母排序的(按列排序而不是按行排序)。可用带-F 参数的 ls 命令轻松区分文件和目录。
注意,ls 命令输出的列表是按字母排序的(按列排序而不是按行排序)。可用带-F 参数的 ls 命令轻松区分文件和目录。

```bash
$ ls -F
Expand All @@ -134,13 +134,13 @@ Pictures/

F 参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行文件(比如上面的 my_script 文件)的后面加个星号,以便用户找出可在系统上运行的文件。

Linux 经常采用隐藏文件来保存配置信息。在 Linux 上,隐藏文件通常是文件名以点号开始的文件。这些文件并没有在默认的 ls 命令输出中显示出来,因此我们称其为隐藏文件。要把隐藏文件和普通文件及目录一起显示出来,就得用到-a 参数。,使用`ls -a`,所有以点号开头的隐藏文件现在都显示出来了。
Linux 经常采用隐藏文件来保存配置信息。在 Linux 上,隐藏文件通常是文件名以点号开始的文件。这些文件并没有在默认的 ls 命令输出中显示出来,因此我们称其为隐藏文件。要把隐藏文件和普通文件及目录一起显示出来,就得用到-a 参数。,使用`ls -a`,所有以点号开头的隐藏文件现在都显示出来了。

-R 参数是 ls 命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。如果目录很多,这个输出就会很长。注意,首先-R 参数显示了当前目录下的内容,也就是之前例子中用户 home 目录下的那些文件。另外,它还显示出了用户 home 目录下所有子目录及其内容。如果当前路径下的目录有更多的子目录,-R 参数会继续进行遍历。正如你尝试的,如果目录结构很庞大,输出内容会变得很长。
-R 参数是 ls 命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。如果目录很多,这个输出就会很长。注意,首先-R 参数显示了当前目录下的内容,也就是之前例子中用户 home 目录下的那些文件。另外,它还显示出了用户 home 目录下所有子目录及其内容。如果当前路径下的目录有更多的子目录,-R 参数会继续进行遍历。正如你尝试的,如果目录结构很庞大,输出内容会变得很长。

命令行的多个选项一般并不一定要分开输入:`ls -F -R -a`。它们可以进行如下合并:`ls -FRa`。

在基本的输出列表中,ls 命令并未输出太多每个文件的相关信息。要显示附加信息,另一个常用的参数是-l。-l 参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。这种长列表格式的输出在每一行中列出了单个文件或目录。除了文件名,输出中还有其他有用信息。输出的第一行显示了在目录中包含的总块数。在此之后,每一行都包含了关于文件(或目录)的下述信息:
在基本的输出列表中,ls 命令并未输出太多每个文件的相关信息。要显示附加信息,另一个常用的参数是-l。-l 参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。这种长列表格式的输出在每一行中列出了单个文件或目录。除了文件名,输出中还有其他有用信息。输出的第一行显示了在目录中包含的总块数(block)。在此之后,每一行都包含了关于文件(或目录)的下述信息:

```bash
$ ls -l
Expand All @@ -155,8 +155,8 @@ drwxr-xr-x 4 wallen wallen 4096 Dec 14 22:50 Pictures
drwxr-xr-x 2 wallen wallen 4096 Dec 13 11:28 Videos
```

- 文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b)
- 文件的权限
- 文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b);
- 文件的权限;
- 文件的硬链接总数;
- 文件属主的用户名;
- 文件属组的组名;
Expand All @@ -166,20 +166,20 @@ drwxr-xr-x 2 wallen wallen 4096 Dec 13 11:28 Videos

-l 参数是一个强大的工具。有了它,你几乎可以看到系统上任何文件或目录的大部分信息。在进行文件管理时,ls 命令的很多参数都能派上用场。如果在 shell 提示符中输入 man ls,就能看到可用来修改 ls 命令输出的参数有好几页。别忘了可以将多个参数结合起来使用。你不时地会发现一些参数组合不仅能够显示出所需的内容,而且还容易记忆,例如 ls -alF。

由前面的例子可知,默认情况下,ls 命令会输出目录下的所有非隐藏文件。有时这个输出会显得过多,当你只需要查看单个少数文件信息时更是如此。幸而 ls 命令还支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件或目录。这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器:当用户指定特定文件的名称作为过滤器时,ls 命令只会显示该文件的信息。有时你可能不知道要找的那个文件的确切名称。ls 命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:
由前面的例子可知,默认情况下,ls 命令会输出目录下的所有非隐藏文件。有时这个输出会显得过多,当你只需要查看单个或者少数文件信息时更是如此。幸而 ls 命令还支持在命令行中定义过滤器(filter)。它会用过滤器来决定应该在输出中显示哪些文件或目录。这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器:当用户指定特定文件的名称作为过滤器时,ls 命令只会显示该文件的信息。有时你可能不知道要找的那个文件的确切名称。ls 命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:

- 问号(?)代表一个字符;
- 星号(\*)代表零个或多个字符。

在过滤器中使用星号和问号被称为`文件扩展匹配`(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作`元字符通配符`(metacharacter wildcards)。除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。
在过滤器中使用星号和问号被称为`文件扩展匹配`(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作`元字符通配符`(metacharacter wildcards)。除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配,例如可以使用中括号:

```bash
$ ls -l my_scr[ai]pt
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
```

在这个例子中,我们使用了中括号以及在特定位置上可能出现的两种字符:a 或 i。中括号表示一个字符位置并给出多个可能的选择。可以像上面的例子那样将待选的字符列出来,也可以指定字符范围,例如字母范围[a - i]
在这个例子中,我们使用了中括号以及在特定位置上可能出现的两种字符:a 或 i。中括号表示一个字符位置并给出多个可能的选择。可以像上面的例子那样将待选的字符列出来,也可以指定字符范围,例如字母范围[a - i]:

```bash
$ ls -l f[a-i]ll
Expand All @@ -188,7 +188,7 @@ $ ls -l f[a-i]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
```

另外,可以使用感叹号(!)将不需要的内容排除在外
另外,可以使用感叹号(!)将不需要的内容排除在外:

```bash
$ ls -l f[!a]ll
Expand All @@ -197,41 +197,41 @@ $ ls -l f[!a]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full
```

在进行文件搜索时,文件扩展匹配是一个功能强大的特性。它也可以用于 ls 以外的其他 shell 命令。随后的部分会有到更多相关的例子
在进行文件搜索时,文件扩展匹配是一个功能强大的特性。它也可以用于 ls 以外的其他 shell 命令。随后的部分会有更多相关的例子

## 文件的处理

### touch 创建文件

touch 命令用于创建空白文件。如果作用于一个已有文件,可以更改其修改时间。
如果只想改变访问时间,可用-a 参数
如果只想改变访问时间,可用`-a`参数:

```bash
$ touch -a test_one
ls -l --time=atime test_one
```

如果只使用 ls -l 命令,并不会显示访问时间。这是因为默认显示的是修改时间。要想查看文件的访问时间,需要加入另外一个参数:--time=atime。有了这个参数,就能够显示出已经更改过的文件访问时间
如果只使用 ls -l 命令,并不会显示访问时间。这是因为默认显示的是修改时间。要想查看文件的访问时间,需要加入另外一个参数:--time=atime。有了这个参数,就能够显示出已经更改过的文件的访问时间

### cp 复制文件

复制文件的格式为
复制文件的格式为:

```bash
$ cp source destination
```

当 source 和 destination 参数都是文件名时,cp 命令将源文件复制成一个新文件,并且以 destination 命名。新文件就像全新的文件一样,有新的修改时间。

如果目标文件已经存在,cp 命令可能并不会提醒这一点。最好是加上-i 选项,强制 shell 询问是否需要覆盖已有文件。
如果目标文件已经存在,cp 命令可能并不会提醒这一点。最好是加上`-i`选项,强制 shell 询问是否需要覆盖已有文件。

也可以将文件复制到现有目录中。

```bash
$ cp -i test_one /home/christine/Documents/
```

新文件现就在目录 Documents 中了,和源文件同名。
新文件就出现在目录 Documents 中了,和源文件同名。

上面的例子在目标目录名尾部加上了一个正斜线(/),这表明 Documents 是目录而非文件。这有助于明确目的,而且在复制单个文件时非常重要。如果没有使用正斜线,子目录/home/christine/Documents 又不存在,就会有麻烦。在这种情况下,试图将一个文件复制到 Documents 子目录反而会创建一个名为 Documents 的文件,连错误消息都不会显示!

Expand All @@ -243,16 +243,16 @@ $ cp -i test_one /home/christine/Documents/
$ cp -i /etc/NetworkManager/NetworkManager.conf .
```

cp 命令的-R 参数威力强大。可以用它在一条命令中递归地复制整个目录的内容
cp 命令的-R 参数威力强大。可以用它在一条命令中递归地复制整个目录的内容:

```bash
$ ls -Fd *Scripts #-d选项只列出目录本身的信息,不列出其中的内容。一般可与l选项搭配显示目录自身详情
$ ls -Fd *Scripts #-d选项只列出目录本身的信息,不列出其中的内容。一般可与 l 选项搭配显示目录自身详情
$ cp -R Scripts/ Mod_Scripts
```

在执行 cp -R 命令之前,目录 Mod_Scripts 并不存在。它是随着 cp -R 命令被创建的,整个 Scripts 目录中的内容都被复制到其中。注意,在新的 Mod_Scripts 目录中,所有的文件都有对应的新日期。Mod_Scripts 目录现在已经成为了 Scripts 目录的完整副本。

也可以在 cp 命令中使用通配符
也可以在 cp 命令中使用通配符:

```bash
$ cp *script Mod_Scripts/
Expand Down Expand Up @@ -284,15 +284,15 @@ $ mv fzll Pictures/ #把文件fzll从/home/wallen移动到了/home/wallen/Pir
```

注意,mv 将文件名从 fall 更改为 fzll,但 inode 编号和时间戳保持不变。这是因为 mv 只影响文件名。
和 cp 命令类似,也可以在 mv 命令中使用-i 参数。这样在命令试图覆盖已有的文件时,你就会得到提示。
和 cp 命令类似,也可以在 mv 命令中使用`-i`参数。这样在命令试图覆盖已有的文件时,你就会得到提示。

也可以使用 mv 命令移动文件位置并修改文件名称,这些操作只需一步就能完成
也可以使用 mv 命令移动文件位置并修改文件名称,这些操作只需一步就能完成:

```bash
$ mv /home/wallen/Pictures/fzll /home/wallen/fall
```

也可以使用 mv 命令移动整个目录及其内容
也可以使用 mv 命令移动整个目录及其内容:

```bash
$ mv Mod_Scripts Old_Scripts
Expand All @@ -319,24 +319,24 @@ rm 命令的另外一个特性是,如果要删除很多文件且不受提示

### ln 链接文件

链接文件是 Linux 文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为`链接`。链接是目录中指向文件真实位置的占位符。在 Linux 中有两种不同类型的文件链接:
链接文件是 Linux 文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为"链接"。链接是目录中指向文件真实位置的占位符。在 Linux 中有两种不同类型的文件链接:

- 符号链接(Symbolic link)
- 硬链接(hard link)

`符号链接`就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。
"符号链接"就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。

要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用 ln 命令以及-s 选项来创建符号链接
要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用 ln 命令以及`-s`选项来创建符号链接:

```bash
$ ln -s data_file sl_data_file
-rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file
lrwxrwxrwx 1 christine christine 9 May 21 17:29 sl_data_file -> data_file
```

在上面的例子中,注意符号链接的名字 sl_data_file 位于 ln 命令中的第二个参数位置上。显示在长列表中符号文件名后的->符号表明该文件是链接到文件 data_file 上的一个符号链接。
在上面的例子中,注意符号链接的名字 sl_data_file 位于 ln 命令中的第二个参数位置上。显示在长列表中符号文件名后的`->`符号表明该文件是链接到文件 data_file 上的一个符号链接。

另外还要注意的是,符号链接的文件大小与数据文件的文件大小。符号链接 sl_data_file 只有 9 个字节,而 data_file 有 1092 个字节。这是因为 sl_data_file 仅仅只是指向 data_file 而已。它们的内容并不相同,是两个完全不同的文件。
另外,还要注意的是符号链接的文件大小与数据文件的文件大小。符号链接 sl_data_file 只有 9 个字节,而 data_file 有 1092 个字节。这是因为 sl_data_file 仅仅只是指向 data_file 而已。它们的内容并不相同,是两个完全不同的文件。

另一种证明链接文件是独立文件的方法是查看 inode 编号。文件或目录的 inode 编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的 inode 编号,可以给 ls 命令加入-i 参数。

Expand All @@ -346,13 +346,13 @@ $ ls -i *data_file
296891 sl_data_file
```

从这个例子中可以看出数据文件的 inode 编号是 296890,而 sl_data_file 的 inode 编号则是 296891所以说它们是不同的文件。
从这个例子中可以看出数据文件的 inode 编号是 296890,而 sl_data_file 的 inode 编号则是 296891,所以说它们是不同的文件。

当含有一连串符号链接的链接串时,不必一个一个用 ls 查看其链接关系,可以直接使用 `readlink -f filename` 指令查到当前符号链接串的尽头是什么。

---

`硬链接`会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用 ln 命令时不再需要加入额外的参数了。
"硬链接"会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用 ln 命令时不再需要加入额外的参数了。

```bash
$ ln code_file hl_code_file
Expand Down

AltStyle によって変換されたページ (->オリジナル) /