**The linux common line**
  • 对于一个没基础,或者只是了解linux的学着来说,想学好linux很难,因为linux的起步就像是一个儿童刚开始学走路一样
    起步很难,因为你没有方向感你不知道该如何迈向第一步,这一步也不知该往哪去迈,抬起脚身子回晃你怕摔倒,以后的路会更难,你需要一双拉着你的手才会心安,学习linux也是如此,只要你骨气勇气有一定的耐心我相信你能学好
    这篇文章很基础 即使你没接触过linux只要你认真细心你就能看懂
    前提条件
    你电脑上需要安装一台VMware(虚拟机)任何版本都可以,然后 需要安装一个linux的系统至于版本 Centos redhat 都可以

第一次按键

好,开始吧。启动终端仿真器!一旦它运行起来,我们应该能够看到一行类似下面文字的输出:

[root@localhost~]$

这叫做 shell 提示符,当 shell 准备好了去接受输入时,它就会出现。然而, 它可能会以各种各样的面孔显示,这则取决于不

同的 Linux 发行版, 它通常包括你的用户名@主机名,紧接着当前工作目录(稍后会有更多介绍)和一个美元符号。
如果提示符的最后一个字符是“#”, 而不是“$”, 那么这个终端会话就有超级用户权限。 这意味着,我们或者是以根用户的身份
登录,或者是我们选择的终端仿真器提供超级用户(管理员)权限。
假定到目前为止,所有事情都进行顺利,那我们试着打字吧。在提示符下敲入 一些乱七八糟的无用数据,如下所示:

[root@localhost ~]$ kaekfjaeifj

因为这个命令没有任何意义,所以 shell 会提示错误信息,并让我们再试一下:

bash: kaekfjaeifj: command not found
[root@localhost ~]$

命令历史

如果按下上箭头按键,我们会看到刚才输入的命令“kaekfjaeifj”重新出现在提示符之后。 这就叫做命令历史。许多 Linux 发行版默认保存最后输入的500个命令。 按下下箭头按键,先前输入的命令就消失了。

移动光标

可借助上箭头按键,来获得上次输入的命令。现在试着使用左右箭头按键。 看一下怎样把光标定位到命令行的任意位置?通过使用箭头按键,使编辑命令变得轻松些。
关于鼠标和光标
虽然,shell 是和键盘打交道的,但你也可以在终端仿真器里使用鼠标。X 窗口系统 (使 GUI 工作的底层引擎)内建了一种机制,支持快速拷贝和粘贴技巧。 如果你想高亮一些文本,可以按下鼠标左键,沿着文本拖动鼠标(或者双击一个词),那么这些高亮的文本就被拷贝到了一个由 X 管理的缓冲区里面。然后按下鼠标中键, 这些文本就被粘贴到光标所在的位置。试试看
注意: 不要在一个终端窗口里,使用 Ctrl-c 和 Ctrl-v 快捷键,来执行拷贝和粘贴操作。 它们不起作用。对于 shell 来说,这些控制代码有着不同的含义,它们被赋值,早于 Microsoft Windows 许多年你的图形桌面环境(像 KDE 或 GNOME),努力想和 Windows 一样,可能会把它的聚焦策略 设置成“单击聚焦”。这意味
着,为了让窗口聚焦(变得活跃)你需要单击它。 这与“聚焦跟随着鼠标”的传统 X 行为不同,传统 X 行为是指只要把鼠标移动到一个窗口的上方, 这个窗口就成为活动窗口。这个窗口不会成为前端窗口,直到你单击它,但它能接受输入。 设置聚焦策略为“聚焦跟随着鼠标”,可以使拷贝和粘贴技巧更有益。尝试一下。 给它一个机会,我想你会喜欢上它的。在窗口管理器的配置程序中,你会找到这个设置
试试运行一些简单命令
现在,我们学习了怎样输入命令,那我们执行一些简单的命令吧。第一个命令是 date。 这个命令显示系统当前时间和日期。
[root@system1 Desktop]# date
Fri Aug 10 09:28:55 CST 2018
一个相关联的命令,cal,它默认显示当前月份的日历。

[root@system1 Desktop]# cal
August 2018 Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

查看磁盘剩余空间的数量,输入 df:

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rhel-root 5109760 3089140 2020620 61% / devtmpfs
1012216 0 1012216 0% /dev tmpfs 1021524
140 1021384 1% /dev/shm tmpfs 1021524 9004
1012520 1% /run tmpfs 1021524 0 1021524
0% /sys/fs/cgroup /dev/sda1 201388 105976 95412
53% /boot /dev/sr0 3654720 3654720 0 100%
/run/media/root/RHEL-7.0 Server.x86_64

同样地,显示空闲内存的数量,输入命令 free。
[

root@system1 Desktop]# free
total used free shared buffers cached Mem: 2043052 766392 1276660 9952 928
311824
-/+ buffers/cache: 453640 1589412 Swap: 2047996 0 2047996

结束终端会话
我们可以终止一个终端会话,通过关闭终端仿真器窗口,或者是在 shell 提示符下输入 exit 命令:

[root@system1 Desktop]# exit

幕后控制台
即使,终端仿真器没有运行,几个终端会话仍然在后台运行着。它们叫做虚拟终端 或者是虚拟控制台。在大多数 Linux 发行版中,这些终端会话都可以访问, 按下 Ctrl-Alt-F1 到 Ctrl-Alt-F6 访问不同的虚拟终端。当一个会话被访问的时候, 它会显示登录提示框,我们需要输入用户名和密码。从一个虚拟控制台转换到另一个, 按下 Alt 和 F1-F6。返回图形桌面,按下 Alt-F7
文件系统中跳转
我们需要学习的第一件事(除了打字之外)是如何在 Linux 文件系统中跳转。 在这一章节中,我们将介绍以下命令:
pwd — 打印出当前工作目录名
cd — 更改目录
ls — 列出目录内容
理解文件系统树
类似于 Windows,一个“类 Unix” 的操作系统,比如说 Linux,以分层目录结构来组织所有文件。 这就意味着所有文件组成了一棵树型目录(有时候在其它系统中叫做文件夹), 这个目录树可能包含文件和其它的目录。文件系统中的第一级目录称为根目录。 根目录包含文件和子目录,子目录包含更多的文件和子目录,依此类推。不同于 Windows 的是,Windows 每个存储设备都有一个独自的文件系统,类似于 Unix 的操作系统, 比如 Linux,总是有一个单一的文件系统树,不管有多少个磁盘或者存储设备连接到计算机上。 根据系统管理员的兴致,存储设备连接到(或着更精确些,是挂载到)目录树的各个节点上。 系统管理员负责维护系统安全。把文件系统想象成一个迷宫形状,就像一棵倒立的大树,我们站在迷宫的中间位置。 在任意时刻,我们处于一个目录里面,我们能看到这个目录包含的所有文件, 以及通往上面目录(父目录)的路径,和下面的各个子目录。我们所在的目录则称为当前工作目录。我们使用 pwd(打印工作目录)命令,来显示当前工作目录。

[root@system1 ~]# pwd
/root
当我首次登录系统后,(或者启动终端仿真器会话后),当前工作目录是我的主目录。 每个用户都有他自己的主目录,当用户以普通用户的身份操控系统时,主目录是唯一 允许用户编写文件的地方。

列出目录内容
列出一个目录包含的文件及子目录,使用 ls 命令。

[root@system1 ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg
Pictures Templates Desktop Downloads Music
Public Videos [root@system1 ~]#

更改当前工作目录
要更改工作目录(此刻,我们站在树形迷宫里面),我们用 cd 命令。输入 cd, 然后输入你想要的工作目录的路径名,就能实现愿望。路径名就是沿着目录树的分支 到达想要的目录,期间所经过的路线。路径名可通过两种方式来指定,一个是绝对路径, 另一个是相对路径。首先处理绝对路径。
绝对路径
绝对路径开始于根目录,紧跟着目录树的一个个分支,一直到达期望的目录或文件。 例如,你的系统中有一个目录,大多数系统程序都安装在这个目录下。这个目录的 路径名是 /usr/bin。它意味着从根目录(用开头的“/”表示)开始,有一个叫 “usr”的 目录包含了目录 “bin”。

[root@system1 ~]# cd /usr/bin
[root@system1 bin]# pwd
/usr/bin [ mcomp a2p
mcookie

我们把工作目录转到 /usr/bin 目录下,里面装满了文件。注意 shell 提示符是怎样改变的。 为了方便,通常设置提示符自动显示工作目录名

相对路径
绝对路径从根目录开始,直到它的目的地,而相对路径开始于工作目录。 一对特殊符号来表示相对位置,在文件系统树中。这对特殊符号是 “.” (点) 和 “..” (点点)。
符号 “.” 指的是工作目录,”..” 指的是工作目录的父目录。下面的例子说明怎样使用它。 再次更改工作目录到 /usr/bin:

[root@system1 ~]# cd /usr/bin
[root@system1 bin]# pwd
/usr/bin

好的,比方说更改工作目录到 /usr/bin 的父目录 /usr。可以通过两种方法来实现。或者使用绝对路径名:

[root@system1 bin] cd/usr[root@system1usr] c d / u s r [ r o o t @ s y s t e m 1 u s r ] cd /usr [root@system1 usr] pwd
/usr

或者, 使用相对路径:

[root@system1 bin]# cd ..
[root@system1 usr]# pwd
/usr

两种不同的方法,一样的结果。我们应该选哪一个呢? 输入量最少的那个
同样地,从目录 /usr/ 到 /usr/bin 也有两种途径。或者使用绝对路径:

[root@system1 usr]# cd /usr/bin
[root@system1 bin]# pwd
/usr/bin

或者,用相对路径:

[root@system1 usr]# cd ./bin
[root@system1 bin]# pwd
/usr/bin

有一件很重要的事,我必须指出来。在几乎所有的情况下,你可以省略”./”。它是隐含地。输入:

[root@system1 usr]$ cd bin
实现相同的效果,如果不指定一个文件的目录,那它的工作目录会被假定为当前工作目录。

有用的快捷键

快捷键 运行结果
cd 更改工作目录到主目录。
cd - 更改工作目录到先前的工作目录。
cd ~user_name 更改工作目录到用户主目录。例如, cd ~bob 会更改工作目录到用户“bob”的主目录。
关于文件名的重要规则
1. 以 “.” 字符开头的文件名是隐藏文件。这仅表示,ls 命令不能列出它们, 除非使用 ls -a 命令。当你创建帐号后,几个配置帐号的隐藏文件被放置在 你的主目录下。稍后,我们会仔细研究一些隐藏文件,来定制你的系统环境。另外,一些应用程序也会把它们的配置文件以隐藏文件的形式放在你的主目录下面。
2. 文件名和命令名是大小写敏感的。文件名 File1 和 file1 是指两个不同的文件名。
3. Linux 没有“文件扩展名”的概念,不像其它一些系统。可以用你喜欢的任何名字 来给文件起名。文件内容或用途由其它方法来决定。虽然类似 Unix 的操作系统, 不用文件扩展名来决定文件的内容或用途,但是应用程序会。
4. 虽然 Linux 支持长文件名,文件名可能包含空格,标点符号,但标点符号仅限 使用 “.”,“-”,下划线。最重要的是,不要在文件名中使用空格。如果你想表示词与 词间的空格,用下划线字符来代替。过些时候,你会感激自己这样做

探究操作系统
既然我们已经知道了如何在文件系统中跳转,是时候开始 Linux 操作系统之旅了。在开始之前,我们先学习一些对研究
Linux 系统有帮助的命令。
ls — 列出目录内容
file — 确定文件类型
less — 浏览文件内容
ls乐趣
有充分的理由证明,ls 可能是用户最常使用的命令。通过它,我们可以知道目录的内容,以及各种各样重要文件和目录的 属性。正如我们所知道的,只简单的输入 ls 就能看到在当前目录下所包含的文件和子目录列表。

[root@system1 ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg
Pictures Templates Desktop Downloads Music [root@system1 ~]#

除了当前工作目录以外,也可以列出指定目录的内容,就像这样:
[root@system1 bin]# ls
[ mcomp a2p
mcookie abrt-action-analyze-backtrace mcopy
abrt-action-analyze-c mc-tool

[root@system1 ~]# ls ~ /usr
/root: anaconda-ks.cfg Documents
initial-setup-ks.cfg Pictures Templates Desktop Downloads
Music Public Videos

/usr: bin etc games include lib lib64 libexec local sbin
[root@system1 ~]#

我们也可以改变输出格式,来得到更多的细节:

[root@system1 ~]# ls -l
total 8
-rw——-. 1 root root 1614 Aug 3 05:02 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Aug 2 21:08 Desktop
drwxr-xr-x. 2 root root 6 Aug 2 21:08 Documents
drwxr-xr-x. 2 root root 6 Aug 2 21:08 Downloads
使用 ls 命令的“-l”选项,则结果以长模式输出。

选项和参数

我们将学习一个非常重要的知识点,大多数命令是如何工作的。命令名经常会带有一个或多个用来更正命令行为的选项, 更进一步,选项后面会带有一个或多个参数,这些参数是命令作用的对象。所以大多数命令看起来像这样:

command -options arguments

大多数命令使用的选项,是由一个中划线加上一个字符组成,例如,“-l”,但是许多命令,包括来自于 GNU 项目的命令,也支持长选项,长选项由两个中划线加上一个字组成。当然, 许多命令也允许把多个短选项串在一起使用。下面这个例子,ls命令有两个选项, “l” 选项产生长格式输出,“t”选项按文件修改时间的先后来排序。

[root@system1 ~]$ ls -lt

加上长选项 “–reverse”,则结果会以相反的顺序输出:

[root@system1 ~]$ ls -lt –reverse

ls 命令有大量的选项

选项 长选项 描述
-a –all 列出所有文件,甚至包括文件名以圆点开头的隐藏文件。
-d –directory 通常,如果指定了目录名,ls 命令会列出这个目录中的内容,而不是目录本身。 把这个选项与-l 选项结合使用,可以看到所指定目录的详细信息,而不是目录中的 内容。
-F –classify 这个选项会在每个所列出的名字后面加上一个指示符。例如,如果名字是 目录 名,则会加上一个’/’字符。
-h –human-readable 以长格式列出。以人们可读的格式,而不是以字节数来显示文件的大小。
-l 以长格式显示结果。
-r –reverse 以相反的顺序来显示结果。通常,ls 命令的输出结果按照字母升序排列。
-S 命令输出结果按照文件大小来排序。
-t 按照修改时间来排序

深入研究长格式输出

rwxr-xr-x. 2 root root 6 Aug 2 21:08 Desktop
rwxr-xr-x. 2 root root 6 Aug 2 21:08 Documents
rwxr-xr-x. 2 root root 6 Aug 2 21:08 Downloads
rwxr-xr-x对于文件的访问权限。第一个字符指明文件类型。在不同类型之间, 开头的“-”说明是一个普
通文件,“d”表明是一个目录。其后三个字符是文件所有者的 访问权限,再其后的三个字符是 文件所属组中成员的访问权限,最后三个字符是其他所
有人的访问权限。这个字段的完整含义 将在第十章讨论。 1 文件的硬链接数目。参考随后讨论的关于链接的内容。 root 文件属主的用户名。
root 文件所属用户组的名字。
6 Aug 2 21:08上次修改文件的时间和日期。 vDocuments 文件名。

确定文件类型
随着探究操作系统的进行,知道文件包含的内容是很有用的。我们将用 file 命令来确定文件的类型。我们之前讨论过, 在Linux 系统中,并不要求文件名来反映文件的内容。然而,一个类似 “picture.jpg” 的文件名,我们会期望它包含 JPEG 压缩图像,但 Linux 却不这样要求它。可以这样调用 file 命令:

file filename
当调用 file 命令后,file 命令会打印出文件内容的简单描述。例如:
[root@system2 ~]# file picture.jpg
picture.jpg: cannot open (No such file or directory)
有许多类型的文件。事实上,在类似于 Unix 操作系统中比如说 Linux,有个普遍的观念就是“任何东西都是一个文件”。 随着课程的进行,我们将会明白这句话的真谛

用 less 浏览文件内容

less 命令是一个用来浏览文本文件的程序。纵观 Linux 系统,有许多人类可读的文本文件。less 程序为我们检查文本文件
提供了方便。什么是“文本”在计算机中,有许多方法可以表达信息。所有的方法都涉及到,在信息与一些数字之间确立一种关系,而这些数字可以
用来表达信息。毕竟,计算机只能理解数字,这样所有的数据都被转换成数值表示法。有些数值表达法非常复杂(例如压缩的视频文件),而其它的就相当简单。最早也是最简单的一种表达法,叫做ASCII
文本。ASCII(发音是 “As-Key”)是美国信息交换标准码的简称。这是一个简单的编码方法,它首先被用在电传打字机上,用来实现键盘字符到数字的映射。文本是简单的字符与数字之间的一对一映射。它非常紧凑。五十个字符的文本翻译成五十个字节的数据。文本只是包含 简单的字符到数字的映射,理解这点很重要。它和一些文字处理器文档不一样,比如说由微软和 OpenOffice.org 文档编辑器创建的文件。这些文件,和简单的 ASCII 文件形成鲜明对比,它们包含许多非文本元素,来描述它的结构和格式。 普通的 ASCII文件,只包含字符本身,和一些基本的控制符,像制表符,回车符及换行符。纵观 Linux 系统,许多文件 以文本格式存储,也有许多 Linux 工具来处理文本文件。甚至 Windows 也承认这种文件格式的重要性。著名的NOTEPAD.EXE 程序就是一个 ASCII 文本文件编辑器。

为什么我们要查看文本文件呢? 因为许多包含系统设置的文件(叫做配置文件),是以文本格式存储的,阅读它们 可以更深入的了解系统是如何工作的。另外,许多系统所用到的实际程序(叫做脚本)也是以这种格式存储的。 在随后的章节里,我们将要学习怎样编辑文本文件,为的是修改系统设置,还要学习编写自己的脚本文件,但现在我们只是看看它们的内容而已
less 命令是这样使用的:

less filename

一旦运行起来,less 程序允许你前后滚动文件。例如,要查看一个定义了系统中全部用户身份的文件,输入以下命令:

[root@system1 ~]$ less /etc/passwd
一旦 less 程序运行起来,我们就能浏览文件内容了。如果文件内容多于一页,那么我们可以上下滚动文件。按下“q”键, 退出 less 程序。

下表列出了 less 程序最常使用的键盘命令

Page UP or b 向后翻滚一页
Page Down or space 向前翻动一页
UP Arrow 向前移动一行
Down Arrow 向后移动一行
1G or g 移动到开头一行
/charaters 向前查找指定的字符串
n向前查找下一个出现的字符串,这个字符串是之前所指定查找的
h 显示帮助屏幕
q 退出 less 程序

less 就是 more(禅语:色即是空)
less 程序是早期 Unix 程序 more 的改进版。“less” 这个名字,对习语 “less is more” 开了个玩笑, 这个习语是现代主义建筑师和设计者的座右铭。
less 属于”页面调度器”程序类,这些程序允许通过页方式,在一页中轻松地浏览长长的文本文档。然而 more 程序只能向前分页浏览,而 less 程序允许前后分页浏览,它还有很多其它的特性。
旅行指南
Linux 系统中,文件系统布局与类似 Unix 系统的文件布局很相似。实际上,一个已经发布的标准, 叫做 Linux 文件系统层次
标准,详细说明了这种设计模式。不是所有Linux发行版都根据这个标准,但 大多数都是。
下一步,我们将在文件系统中游玩,来了解 Linux 系统的工作原理。这会给你一个温习跳转命令的机会。 我们会发现很多有趣的文件都是普通的可读文本。将开始旅行,做做以下练习:
1. cd 到给定目录
2. 列出目录内容 ls -l
3. 如果看到一个有趣的文件,用 file 命令确定文件内容
4. 如果文件看起来像文本,试着用 less 命令浏览它

Linux 系统中的目录

/ 根目录,万物起源。
/bin 包含系统启动和运行所必须的二进制程序。
/boot 包含 Linux 内核,最初的 RMA 磁盘映像(系统启动时,由驱动程序所需),和 启动加载程序。 有趣的文件: /boot/grub/grub.conf or menu.lst, 被用来配置启动加载程序。
/dev 这是一个包含设备结点的特殊目录。“一切都是文件”,也适用于设备。 在这个目录里,内核维护着 它支持的设备。 /etc 这个目录包含所有系统层面的配置文件。它也包含一系列的 shell 脚本, 在系统启动时,这些脚本 会运行每个系统服务。这个目录中的任何文件应该是可读的文本文件。 有意思的文件:虽然/etc 目录中的任何文件都有趣,但这里只列出了一些我一直喜欢的文件
/etc/crontab, 定义自动运行的任务。
/etc/passwd,包含用户帐号列表。
/lib 包含核心系统程序所需的库文件。这些文件与 Windows 中的动态链接库相似。 /lost+found 每个使用 Linux 文件系统的格式化分区或设备,例如 ext3文件系统, 都会有这个目录。当部分恢复 一个损坏的文件系统时,会用到这个目录。除非文件系统 真正的损坏了,那么这个目录会是个空目 录。
/media 目录会包含可移除媒体设备的挂载点, 例如 USB 驱动器,CD- ROMs 等等。这些设备连接到计算机之后,会自动地挂载到这个目录结点下。
/mnt 在早些的 Linux 系统中,
/mnt 目录包含可移除设备的挂载点。
/opt 这个/opt 目录被用来安装“可选的”软件。这个主要用来存储可能 安装在系统中的商业软件产品。
/sbin 这个目录包含“系统”二进制文件。它们是完成重大系统任务的程序,通常为超级用户保留。
usr 在 Linux 系统中,/usr 目录可能是最大的一个。它包含普通用户所需要的所有程序和文件。
/usr/lib 包含由/usr/bin 目录中的程序所用的共享库。
/usr/sbin 包含许多系统管理程序。
/usr/share/doc 大多数安装在系统中的软件包会包含一些文档。在/usr/share/doc 目录下, 我们可以找到按照软件 包分类的文档。
/var 除了/tmp 和/home 目录之外,相对来说,目前我们看到的目录是静态的,这是说, 它们的内容不会 改变。
/var 目录是可能需要改动的文件存储的地方。各种数据库,假脱机文件, 用户邮件等等,都 驻扎在这里。 这个/var/log 目录包含日志文件,各种系统活动的记录。这些文件非常重要,并且 应该时时监测它
/var/log 们。其中最重要的一个文件是/var/log/messages。注意,为了系统安全,在一些系统中, 你必须是
超级用户才能查看这些日志文件。

符号链接
在我们到处查看时,我们可能会看到一个目录,列出像这样的一条信息:

lrwxrwxrwx 1 root root 11 2018-08-10 07:34 libc.so.6 - libc-2.6.so
注意看,为何这条信息第一个字符是“l”,并且有两个文件名呢? 这是一个特殊文件,叫做符号链接(也称为软链接或者symlink )。 在大多数”类 Unix“ 系统中,有可能一个文件被多个文件名所指向。虽然这种特性的意义并不明显,但它真地很有用。描绘一下这样的情景:一个程序要求使用某个包含在名为“foo”文件中的共享资源,但是“foo”经常改变版本号。 这样,在文件名中包含版本号,会是一个好主意,因此管理员或者其它相关方,会知道安装了哪个“foo”版本。 这又会导致一个问题。如果我们更改了共享资源的名字,那么我们必须跟踪每个可能使用了 这个共享资源的程序,当每次这个资源的新版本被安装后,都要让使用了它的程序去寻找新的资源名。 这听起来很没趣。这就是符号链接存在至今的原因。比方说,我们安装了文件 “foo” 的 2.6 版本,它的 文件名是 “foo-2.6”,然后创建了叫做“foo” 的符号链接,这个符号链接指向 “foo-2.6”。 这意味着,当一个程序打开文件 “foo” 时,它实际上是打开文件 “foo-2.6”。现在,每个人都很高兴。依赖于 “foo” 文件的程序能找到这个文件,并且我们能知道安装了哪个文件版本。 当升级到 “foo-2.7” 版本的时候,仅添加这个文件到文件系统中,删除符号链接 “foo”, 创建一个指向新版本的符号链接。这不仅解决了版本升级问题,而且还允许在系统中保存两个不同的文件版本。 假想 “foo-2.7” 有个错误(该死的开发者!),那我们得回到原来的版本。 一样的操作,我们只需要删除指向新版本的符号链接,然后创建指向旧版本的符号链接就可以了。在上面列出的目录(来自于 Fedora 的 /lib 目录)展示了一个叫做 “libc.so.6” 的符号链接,这个符号链接指向一个 叫做 “libc-2.6.so” 的共享库文件。这意味着,寻找文件 “libc.so.6” 的程序,实际上得到是文件 “libc-2.6.so”。 在下一章节,我们将学习如何建立符号链接。

硬链接
讨论到链接问题,我们需要提一下,还有一种链接类型,叫做硬链接。硬链接同样允许文件有多个名字, 但是硬链接以不同的方法来创建多个文件名。在下一章中,我们会谈到更多符号链接与硬链接之间的差异问题。
操作文件和目录
此时此刻,我们已经准备好了做些真正的工作!这一章节将会介绍以下命令:
cp — 复制文件和目录
mv — 移动/重命名文件和目录
mkdir — 创建目录
rm — 删除文件和目录
ln — 创建硬链接和符号链接
这五个命令属于最常使用的 Linux 命令之列。它们用来操作文件和目录。
现在,坦诚地说,用图形文件管理器来完成一些由这些命令执行的任务会更容易些。使用文件管理器, 我们可以把文件从一个目录拖放到另一个目录,剪贴和粘贴文件,删除文件等等。那么, 为什么还使用早期的命令行程序呢?
答案是命令行程序,功能强大灵活。虽然图形文件管理器能轻松地实现简单的文件操作,但是对于 复杂的文件操作任务,则使用命令行程序比较容易完成。例如,怎样复制一个目录下的 HTML 文件 到另一个目录,但这些 HTML 文件不存在于目标目录,或者是文件版本新于目标目录里的文件? 要完成这个任务,使用文件管理器相当难,使用命令行相当容易:

cp -u *.html destination

在开始使用命令之前,我们需要介绍一个使命令行如此强大的 shell 特性。因为 shell 频繁地使用 文件名,shell 提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。 使用通配符(也以文件名代换著称)允许你依据字符类型来
选择文件名。下表列出这些通配符 以及它们所选择的对象:
表5-1:通配符
通配符 意义
* 匹配任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不是字符集中的字符
[[:class:]] 匹配任意一个属于指定字符类中的字符

表5-2:普遍使用的字符类
字符类 意义
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper] 匹配任意一个大写字母
借助通配符,为文件名构建非常复杂的选择标准成为能。下面是一些类型匹配的范例:
表5-3:通配符范例
g 文件名以“g”开头的文件
b.txt 以”b”开头,中间有零个或任意多个字符,并以”.txt”结尾的文件
Data??? 以“Data”开头,其后紧接着3个字符的文件
[abc] 文件名以”a”,”b”,或”c”开头的文件
BACKUP.[0-9][0-9][0-9] 以”BACKUP.”开头,并紧接着3个数字的文件
[[:upper:]] 以大写字母开头的文件
[![:digit:]] 不以数字开头的文件
*[[:lower:]123] 文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件接受文件名作为参数的任何命令,都可以使用通配符,我们会在第八章更深入的谈到这个知识点。
字符范围
如果你用过别的类似 Unix 系统的操作环境,或者是读过这方面的书籍,你可能遇到过[A-Z]或 [a-z]形式的字符范围表示法。这些都是传统的 Unix 表示法,并且在早期的 Linux 版本中仍有效。 虽然它们仍然起作用,但是你必须小心地使用它们,因为它们不会产生你期望的输出结果,除非 你合理地配置它们。从现在开始,你应该避免使用它们,并且用字符类来代替它们。
通配符在 GUI 中也有效
通配符非常重要,不仅因为它们经常用在命令行中,而且一些图形文件管理器也支持它们。
在 Nautilus (GNOME 文件管理器)中,可以通过 Edit/Select 模式菜单项来选择文件。 输入一个用通配符表示的文件选择模式后,那么当前所浏览的目录中,所匹配的文件名 就会高亮显示。
在 Dolphin 和 Konqueror(KDE 文件管理器)中,可以在地址栏中直接输入通配符。例如,如果你 想查看目录
/usr/bin 中,所有以小写字母 “u” 开头的文件,在地址栏中敲入 “/usr/bin/u*”,则 文件管理器会显示匹配的结果。
最初源于命令行界面中的想法,在图形界面中也适用。这就是使 Linux 桌面系统 如此强大的众多原因中的一个。
mkdir 命令是用来创建目录的。它这样工作:

mkdir directory…

注意表示法: 在描述一个命令时(如上所示),当有三个圆点跟在一个命令的参数后面, 这意味着那个参数可以重复,就像
这样:

mkdir dir1

会创建一个名为”dir1”的目录,而

mkdir dir1 dir2 dir3
会创建三个目录,名为 dir1, dir2, dir3。

cp — 复制文件和目录
cp 命令,复制文件或者目录。它有两种使用方法:

cp item1 item2

复制多个项目(文件或目录)到一个目录下。
有用的选项和实例
-a, –archive
复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。
-i, –interactive
在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。
-r, –recursive
递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。
-u, –update
当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文
件内容新于目标目录中已经存在的文件。
-v, –verbose 显示翔实的命令操作信息
cp 实例
命令 运行结果
cp file1 file2
复制文件 file1 内容到文件 file2。如果 file2 已经存在,file2 的内容会被 file1 的 内容重写。如果 file2 不存在,则会创建 file2。
cp -i file1 file2
这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前,会提示用户确认信息。
cp file1 file2 dir1
复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。
cp dir1/* dir2
使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。 dir2 必须已经存在。
cp -r dir1 dir2
复制目录 dir1中的内容到目录 dir2。如果目录 dir2 不存在, 创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。 如果目录 dir2 存在,则目录 dir1(和目录中的内容)将会被复制到 dir2 中。
mv — 移动和重命名文件
mv 命令可以执行文件移动和文件命名任务,这依赖于你怎样使用它。任何一种 情况下,完成操作之后,原来的文件名不再存在。mv 使用方法与 cp 很相像:

mv item1 item2

把文件或目录 “item1” 移动或重命名为 “item2”, 或者:

mv item… directory

把一个或多个条目从一个目录移动到另一个目录中。
有用的选项和实例
-i –interactive
在重写一个已经存在的文件之前,提示用户确认信息。 如果不指定这个选项,mv 命令会默认重写文件内容。
-u –update
当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新于目标目录相对应文件的内容。
-v –verbose
当操作 mv 命令时,显示翔实的操作信息。
mv 实例
mv file1 file2
移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 不存在,则创建 file2。 每种情况下,file1 不再存在。
mv -i file1 file2
除了如果 file2 存在的话,在 file2 被重写之前,用户会得到 提示信息外,这个和上面的选项一样。
mv file1 file2 dir1 移动 file1 和 file2 到目录 dir1中。dir1 必须已经存在。
mv dir1 dir2
如果目录 dir2 不存在,创建目录 dir2, 并且移动目录 dir1 的内容到目录 dir2 中,同时删除目录 dir1。 如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。

rm 命令用来移除(删除)文件和目录:

rm item…

“item”代表一个或多个文件或目录。
有用的选项和实例
-i, –interactive
在删除已存在的文件前,提示用户确认信息。如果不指定这个选项,rm 会默默地删除文件
-r, –recursive
递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项。
-f, –force
忽视不存在的文件,不显示提示信息。这选项颠覆了”–interactive”选项。
-v, –verbose
在执行 rm 命令时,显示翔实的操作信息。
rm 实例

rm file1 默默地删除文件
rm -i file1 除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。
rm -r file1 dir1 删除文件 file1, 目录 dir1,及 dir1中的内容。
rm -rf file1 dir1 同上,除了如果文件 file1,或目录 dir1不存在的话,rm 仍会继续执行。
小心 rm!
类似于 Unix 的操作系统,比如说 Linux,没有复原命令。一旦你用 rm 删除了一些东西, 它就消失了。Linux 假定你很聪明,你知道你在做什么。
尤其要小心通配符。思考一下这个经典的例子。假如说,你只想删除一个目录中的 HTML 文件。输入: rm *.html
这是正确的,如果你不小心在 “*” 和 “.html” 之间多输入了一个空格,就像这样:这个 rm 命令会删除目录中的所有文件,还会抱怨没有文件叫做 “.html”。
小贴士。 无论什么时候,rm 命令用到通配符(除了仔细检查输入的内容外!), 用 ls 命令来测试通配符。这会让你看到要删除的文件列表。然后按下上箭头按键,重新调用 刚刚执行的命令,用 rm 替换 ls。
ln — 创建链接
ln 命令即可创建硬链接,也可以创建符号链接。可以用其中一种方法来使用它

In file link

创建硬链接,和:

ln -s item link

硬链接
创建符号链接,”item”可以是一个文件或是一个目录
硬链接和符号链接比起来,硬链接是最初 Unix 创建链接的方式,而符号链接更加现代。 在默认情况下,每个文件有一个硬链接,这个硬链接给文件起名字。当我们创建一个 硬链接以后,就为文件创建了一个额外的目录条目。硬链接有两个重要局限性:
1. 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联 与链接本身不在同一个磁盘分区上的文件。
2. 一个硬链接不能关联一个目录。
一个硬链接和文件本身没有什么区别。不像符号链接,当你列出一个包含硬链接的目录 内容时,你会看到没有特殊的链接指示说明。当一个硬链接被删除时,这个链接 被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配), 直到所有关联这个文件的链接都删除掉。知道硬链接很重要,因为你可能有时 会遇到它们,但现在实际中更喜欢使用符号链接,下一步我们会讨论符号链接。
符号链接
创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个 特殊类型的文件,这个文件包含一个关联文件或目录的文本指针。在这一方面, 它们和 Windows 的快捷方式差不多,当然,符号链接早于 Windows 的快捷方式 很多年;-)
一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。 例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而, 当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果删除这个文件 早于文件的符号链接,这个链接仍然存在,但是不指向任何东西。在这种情况下, 这个链接被称为坏链接。在许多实现中,ls 命令会以不同的颜色展示坏链接,比如说 红色,来显示它们的存在。
关于链接的概念,看起来很迷惑,但不要胆怯。我们将要试着练习 这些命令,希望,它变得清晰起来。
创建目录
mkdir 命令被用来创建目录。首先确定我们在我们的主目录下,来创建 playground 目录, 然后创建这个新目录:

[ root@system1 ~]# mkdir playground

为了让我们的游戏场更加有趣,在 playground 目录下创建一对目录 ,分别叫做”dir1”和”dir2”。更改我们的当前工作目录到playground,然后 执行 mkdir 命令:

[root@system1 ~]# cd playground
[root@system1 playground]# mkdir dir1 dir2
注意到 mkdir 命令可以接受多个参数,它允许我们用一个命令来创建这两个 目录。

复制文件
下一步,让我们得到一些数据到我们的游戏场中。通过复制一个文件来实现目的。 使用 cp 命令,我们从/etc 目录复制
passwd 文件到当前工作目录下:

[root@system1 playground]$ cp /etc/passwd

.注意:我们怎样使用当前工作目录的快捷方式,命令末尾的单个圆点。如果我们执行 ls 命令, 可以看到我们的文件:

[root@system1 playground]$ ls -l

total 12

drwxrwxr-x 2 me me 40962018-08-10 16:40 dir1
drwxrwxr-x 2 me me 4096 2018-08-10 16:40 dir2

-rw-r–r– 1 me me 1650 2018-08-10 16:07 passwd

现在,仅仅是为了高兴,重复操作复制命令,使用”-v”选项(唠叨),看一个它的作用:

[root@system1 playground]$ cp -v /etc/passwd .

/etc/passwd' ->./passwd’

cp 命令再一次执行了复制操作,但是这次显示了一条简洁的信息,指明它 进行了什么操作。注意,cp 没有警告,就重写了第一次复制的文件。这是一个案例, cp 假定你知道你的所作所为。为了得到警示信息,在命令中包含”-i”选项:

[root@system1 playground]$ cp -i /etc/passwd .

cp: overwrite `./passwd’?

响应命令提示信息,输入”y”,文件就会被重写,其它的字符(例如,”n”) 会导致 cp 命令不理会文件

移动和重命名文件
现在,”passwd”这个名字,看起来不怎么有趣,这是个游戏场,所以我们给它改个名字

[root@system1 playground]$ mv passwd fun

让我们来传送 fun 文件,通过移动重命名的文件到各个子目录, 然后再把它移回到当前目录:

[root@system1 playground]$ mv fun dir1

首先,把 fun 文件移动目录 dir1 中,然后:

[root@system1 playground]$ mv dir1/fun dir2:

[root@system1playground]$ mv dir2/fun .

最后,再把 fun 文件带回到当前工作目录。下一步,来看看移动目录的效果。 首先,我们先移动我们的数据文件到 dir1 目录:

[root@system1playground]$ mv fun dir1

然后移动 dir1 到 dir2 目录,用 ls 来确认执行结果[root@system1 playground]$ mv dir1 dir2

[root@system1 playground]$ ls -l dir2
total 4
drwxrwxr-x 2 me me 4096 2018-08-10 14:06 dir1

[root@system1 playground]$ ls -l dir2/dir1
total 4
-rw-r–r– 1 me me 1650 2008-01-10 16:33 fun

注意:因为目录 dir2 已经存在,mv 命令移动 dir1 到 dir2 目录。如果 dir2 不存在, mv 会重新命名 dir1 为 dir2。最后,把所有的东西放回原处。

[root@system1 playground]$ mv dir2/dir1

[root@system1playground]$ mv dir1/fun .

移动文件和目录
正如我们之前讨论的,rm 命令被用来删除文件和目录。我们将要使用它 来清理一下我们的游戏场。首先,删除一个硬链接:

[root@system1 playground]$ rm fun-hard

[root@system1 playground]$ ls
-l total 12

…省略
结果不出所料。文件 fun-hard 消失了,文件 fun 的链接数从4减到3,正如 目录列表第二字段所示。下一步,我们会删除文件 fun,仅为了娱乐,我们会包含”-i” 选项,看一个它的作用:

[root@system1playground]$ rm -i fun
rm: remove regular file `fun’?

在提示符下输入”y”,删除文件。让我们看一下 ls 的输出结果。注意,fun-sym 发生了 什么事? 因为它是一个符号链接,指向已经不存在的文件,链接已经坏了:

[root@system1 playground]$ ls -l
total 8
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir1
lrwxrwxrwx 1 me me 4 2008-01-16 14:45 dir1-sym
dir1 drwxrwxr-x 2 me me 4096 2008-01-15 15:17
dir2 lrwxrwxrwx 1 me me 3 2008-01-15 15:15 fun-sym -> fun

大多数 Linux 的发行版本配置 ls 显示损坏的链接。在 Fedora 系统中,坏的链接以闪烁的 红色文本显示!损坏链接的出现,并不危险,但是相当混乱。如果我们试着使用 损坏的链接,会看到以下情况:

[root@system1 playground]$ less fun-sym

fun-sym: No such file or directory

稍微清理一下现场。删除符号链接:

[root@system1 playground]$ rm fun-sym dir1-sym

[root@system1 playground]$ ls -l

total 8

drwxrwxr-x 2 me me 4096 2018-08-10 15:17 dir1

drwxrwxr-x 2 me me 4096 2018-08-10 15:17 dir2

对于符号链接,有一点值得记住,执行的大多数文件操作是针对链接的对象,而不是链接本身。 而 rm 命令是个特例。当你删除链接的时候,删除链接本身,而不是链接的对象。
最后,我们将删除我们的游戏场。为了完成这个工作,我们将返回到 我们的主目录,然后用 rm 命令加上选项(-r),来删除目录 playground, 和目录下的所有内容,包括子目录:

[root@system1playground]$ cd

[root@system1~]$ rm -r playground

用 GUI 来创建符号链接
文件管理器 GNOME 和 KDE 都提供了一个简单而且自动化的方法来创建符号链接。 在 GNOME 里面,当拖动文件时,同时按下 Ctrl+Shift 按键会创建一个链接,而不是 复制(或移动)文件。在 KDE 中,无论什么时候放下一个文件,会弹出一个小菜单, 这个菜单会提供复制,移动,或创建链接文件选项。
总结
在这一章中,我们已经研究了许多基础知识。我们得花费一些时间来全面的理解。 反复练习 playground 例题,直到你觉得它有意义。能够良好的理解基本文件操作 命令和通配符,非常重要。空闲时,通过添加文件和目录来拓展 playground 练习, 使用通配符来为各种各样的操作命令指定文件。关于链接的概念,在刚开始接触 时会觉得有点迷惑,花些时间来学习它们是怎样工作的。它们能成为真正的救星。

下一章继续

快乐的linux命令行相关推荐

  1. Linux学习记录-----《快乐的Linux命令行》.

    之前自学python的时候一直用的Win7,没想过,也有点怕使用Linux,可能人对未知的东西都有点恐惧,但是,但是,学了4个多月,退无可退了,不管是网站的部署,还是基于后端工作的需求,Linux的学 ...

  2. [笔记]快乐的Linux命令行《二》文件系统中跳转

    系列文章目录 [笔记]快乐的Linux命令行<一>LInux系统简介以及什么是shell [笔记]快乐的Linux命令行<二>文件系统中跳转 文章目录 系列文章目录 前言 一. ...

  3. Linux个人笔记(一)之快乐的linux命令行

    文章目录 <the linux command line>-- William Shotts (<快乐的linux命令行> 翻译由`好奇猫工作室`发起 ) Introducti ...

  4. linux tee 重定向_快乐的linux命令行-重定向

    整理自<快乐的linux命令行一书>. linux系统版本: Ubuntu 17.04 本章,我们将介绍命令行最酷的特性,叫做I/O重定向,通过这个工具,可以重定向命令的输入输出,命令的输 ...

  5. 快乐的linux命令行-使用命令

    整理自<快乐的linux命令行一书>. linux系统版本: Ubuntu 17.04 5.使用命令 这一章我们将介绍以下命令: type : 说明怎样解释一个命令名which : 显示会 ...

  6. 快乐的Linux命令行--读书笔记1

    相信很多没有系统了解过Linux的小伙伴会和我一样,在按照教程进行某些环境配置类工作时,遇到一些看上去令人一脸懵逼看不出意思的英文缩写组成的linux命令,并且经常对于linux系统的组织结构和操作方 ...

  7. 在Linux命令行中输入框

    这是假期,每个Linux终端用户都应该得到一点礼物. 庆祝圣诞节,另一个假期还是什么都不重要. 因此,在接下来的几周里,我将收集24个Linux命令行玩具的集合,以供您与朋友一起分享. 让我们玩得开心 ...

  8. 快乐的shell命令行

    快乐的shell命令行 PART1--基础 1.权限 #超级用户权限 $普通用户 2.复制粘贴 复制:鼠标左键沿着文本拖动高亮的文本被复制到X管理的缓冲区(或者双击一个单词) 粘贴:鼠标中键 3.简单 ...

  9. Linux命令行与命令

    Linux命令行与命令 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux的命令是很重要的工具,也往往是初学者最大的瓶颈. ...

最新文章

  1. layuiadmin上手好难_新手自学板绘先学SAI还是PS好?零基础绘画入门需知!
  2. 【LeetCode】【数组归并】Merge k Sorted Lists
  3. 【转】WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务
  4. C#LeetCode刷题之#167-两数之和 II - 输入有序数组(Two Sum II - Input array is sorted)
  5. 安装windows服务提示输入用户名和密码
  6. 打开outlook2010里面的链接显示 “由于本机的限制,该操作已被取消。请与系统管理员联系。”解决方法...
  7. 学习日记——W25Q64 FLASH—QSPI
  8. 不小心删除电脑系统所有字体的解决方法
  9. JavaScript SheetJS将 Html 表转换为 Excel 文件
  10. MySQL基本数据类型
  11. 微信小程序获取地理位置信息
  12. 德鲁克:这4种创新方式,使变化成为机会
  13. 深入分析以太坊合并后的监管和应用层问题
  14. ts没有与此调用匹配的重载
  15. mcafee怎么添加信任区_如何免费将McAfee SECURE Seal添加到您的WordPress网站
  16. Mixly 二次开发 自定义库 创客教程
  17. python 工作流workflow_基于BPMN2.0的工作流(Workflow)
  18. 各种 RAID 详解
  19. 实训可视化项目小结 --- 开启Python初始之旅
  20. 天下霸图修改_天下霸图2 简单修改心得

热门文章

  1. 【数据集介绍】ImageNet介绍
  2. 自定义Preference
  3. 简单的PHP访问MySQL数据库实现数据的增删改查,搜索,添加
  4. “双碳同行者大会”成功举办,绿色家居企业参与其中
  5. C++:PAT 1002 写出这个数 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
  6. 什么是内存泄漏?有什么危害?
  7. matlab 字符串 去掉引号,关于vb.net:删除字符串中的双引号
  8. java深入探究07-jsp
  9. C语言 函数中返回数组
  10. 支付起源-第二期:2006年支付宝卡通横空出世,奠定了网上支付的基础