探究操作系统
已经知道了如何在文件系统中跳转,就开始 Linux 操作系统。然而在开始之前,先熟悉一些对研究 Linux 系统有帮助的命令 。
- ls —列出目录内容
- file —确定文件类型
- less —浏览文件内容
展示当前目录 ls。
ls
可能是用户最常使用的命令了,这自有它的道理。通过它,我们可以知道目录的内容,以及各种各样 重要文件
和 目录的属性
。只要简单地输入 ls
就能看到在当前目录下 所有文件
和 子目录的列表
。
[root@VM-0-13-centos /]$ ls
bin boot data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var www
除了 当前工作目录
以外,也可以指定 别的目录
,就像这样:
[root@VM-0-13-centos /]$ ls /usr
bin etc games include lib lib64 libexec local sbin share src tmp
甚至可以列出 多个指定目录
的内容。在这个例子中,将会列出用户家目录(用字符 ∼
代表)和 /usr
目录的内容:
[root@VM-0-13-centos /]$ ls ~ /usr
/root:
/usr:
bin etc games include lib lib64 libexec local sbin share src tmp
[root@VM-0-13-centos /]#
我们也可以改变输出格式,来得到更多的细节:
[root@VM-0-13-centos /]$ ls -l
total 68
lrwxrwxrwx. 1 root root 7 Aug 8 2018 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jun 7 23:25 boot
drwxr-xr-x 2 root root 4096 Jan 21 2019 data
drwxr-xr-x 19 root root 3000 Jun 11 18:43 dev
drwxr-xr-x. 85 root root 4096 Jun 7 23:27 etc
drwxr-xr-x. 2 root root 4096 Apr 11 2018 home
...
*使用 ls
命令的 -l
选项,则结果以长列表模式输出。
选项和参数。
选项后面会带有 一个
或 多个参数
,这些参数 是 命令作用
的对象。所以大多数命令看起来像这样:
command -options arguments
大多数命令使用的选项,是由一个中划线加上一个字符组成,例如,-l
,但是许多命令,包括来自于 GNU
项目的命令,也支持长选项,长选项 由 两个中划线
加上 一个词语
组成。
当然,许多命令也允许把 多个短选项
串在一起使用。下面这个例子,ls
命令有两个选项,l
选项产生长格式输出,t
选项按文件修改时间的先后来排序。
[root@VM-0-13-centos /]$ ls -lt
1 sys 1306 run 1 proc 3145729 www 18 boot 393220 var 262152 usr 24 lib 23 bin 14 home 25 mnt
8193 tmp 1026 dev 393219 root 262147 etc 917505 data 26 opt 27 sbin 16 lib64 11 lost+found 17 media 15 srv
加上长选项 –reverse
,则结果会以相反的顺序输出
[root@VM-0-13-centos /]$ ls -lt --reverse
15 srv 17 media 11 lost+found 16 lib64 27 sbin 26 opt 917505 data 262147 etc 393219 root 1026 dev 8193 tmp
25 mnt 14 home 23 bin 24 lib 262152 usr 393220 var 18 boot 3145729 www 1 proc 1306 run 1 sys
ls
命令有大量的选项。
多多反复练习这些 ls
命令吧,早晚有一天你会感激自己这样做!
选项 | 长选项 | 描述 |
---|---|---|
-a | --all | 列出所有文件,甚至包括文件名以 圆点 开头的默认会被 隐藏 的 隐藏文件 。 |
-d | --directory | 通常,如果指定了 目录名 ,ls 命令会列出这个 目录中的内容 ,而不是 目录本身 。把这个选项与 -l 选项 结合使用 ,可以看到所指定目录的 详细信息 ,而不是目录中的 内容 。 |
-F | --classify 这个选项会在每个所列出的名字后面加上一个指示 | 这个选项会在每个所列出的名字后面加上一个 指示符 。例如,如果名字是 目录名 ,则会加上一个 / 字符。 |
-h | --human-readable | 当以长格式列出时,以人们可读的格式,而不是以字节数来显示文件的大小。 |
-l | 以长格式显示结果。 | |
-r | --reverse 以相反的顺序来显示结果。通常,ls 命令的输出结果 | 以相反的顺序来显示结果。通常,ls 命令的输出结果按照字母 升序 排列。 |
-S | 命令输出结果按照 文件大小 来排序。 | |
-t | 按照 修改时间来排序 。 |
深入研究长格式输出。
正如我们先前知道的,-l
选项导致 ls
的输出结果以长格式输出。这种格式包含大量的有用的信息。
[root@VM-0-13-centos /]$ ls -l
total 4
-rw-r--r-- 1 root root 0 Jun 12 12:17 1.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 2.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 3.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 4.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 5.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 6.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 7.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 8.js
drwxr-xr-x 2 root root 4096 Jun 12 12:51 lesson
选一个文件,来看一下各个输出字段的含义:
字段 | 含义 |
---|---|
-rw-r--r-- | 对于文件的访问权限。第一个字符指明文件类型。在不同类型之间,开头的 - 说明是一个普通文件,d 表明是一个目录。其后三个字符是文件所有者的访问权限,再其后的三个字符是文件所属组中成员的访问权限,最后三个字符是其他所有人的访问权限。 |
1 | 文件的硬链接数目。参考随后讨论的关于链接的内容。 |
root | 文件所有者的用户名。 |
root | 文件所属用户组的名字。 |
0 | 以字节数表示的文件大小。 |
Jun 12 12:17 | 上次修改文件的时间和日期。 |
1.js | 文件名。 |
确定文件类型 file
当调用 file
命令后,file
命令会打印出文件内容的简单描述。例如
[root@VM-0-13-centos demo]# file 1.js
1.js: ASCII text
有许多种类型的文件。事实上,在类 Unix
操作系统中比如说 Linux
中,有个普遍的观念就是 一切皆文件
!(有点像 Javascript
的概念 一切皆对象
)。
用 less
浏览文件内容
less 命令是一个用来浏览文本文件的程序。纵观 Linux 系统,有许多人类可读的文本文件。less 程序为我们检查文本文件提供了方便。
[root@VM-0-13-centos demo]# less 1.js
console.log('hello word');
1.js (END)
一旦 less 程序运行起来,我们就能浏览文件内容了。如果文件内容多于一页,那么我们可以上下滚动文件。按下 q
键,退出 less 程序。
下表列出了 less
程序最常使用的键盘命令。
命令 | 行为 |
---|---|
Page UP or b | 向上翻滚一页 |
Page Down or space | 向下翻滚一页 |
UP Arrow | 向上翻滚一行 |
Down Arrow | 向下翻滚一行 |
G | 移动到最后一行 |
1G or g | 移动到开头一行 |
/charaters | 向前查找指定的字符串 |
n | 向前查找下一个出现的字符串,这个字符串是之前所指定查找的 |
h | 显示帮助屏幕 |
q | 退出 less 程序 q 是 quit(退出)的缩写 |
less
练习指南
Linux
系统中,文件系统布局与类 Unix
系统的文件布局很相似。实际上,一个已经发布的标准,叫做 Linux
文件系统层次标准,详细说明了这种设计模式。不是所有 Linux
发行版都根据这个标准,但大多数都是。下一步,我们将在文件系统中漫游,来了解 Linux
系统的工作原理。这会给你一个温习跳转命令的机会。我们会发现很多有趣的文件都是纯人类可读文本。下面旅行开始,做做以下练习:
cd
到给定目录- 列出目录内容
ls -l
- 如果看到一个有趣的文件,用
file
命令确定文件内容 - 如果文件看起来像文本,试着用
less
命令浏览它
例如
[root@VM-0-13-centos /]# cd ~ root/demo
[root@VM-0-13-centos demo]# ls -l
total 44
-rw-r--r-- 1 root root 39318 Jun 12 16:18 1.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 2.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 3.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 4.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 5.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 6.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 7.js
-rw-r--r-- 1 root root 0 Jun 12 12:17 8.js
drwxr-xr-x 2 root root 4096 Jun 12 12:51 lesson
[root@VM-0-13-centos demo]# file 1.js
1.js: UTF-8 Unicode text, with very long lines
[root@VM-0-13-centos demo]# less 1.js
*记得复制和粘贴技巧!
- 如果你正在使用鼠标,双击文件名,来复制它,然后按下鼠标中键,粘贴文件名到命令行中。
- 如果你正在使用键盘
ctrl + insert
(c 大法)shift + insert
(v 大法)
Linux 系统中的目录
目录 | 评论 |
---|---|
/ | 根目录,万物起源。 |
/bin | 包含系统启动和运行所必须的二进制程 序。 |
/boot | 包含 Linux 内核、初始 RAM 磁盘映像(用于启动时所需的驱动)和启动加载程序。有趣的文件: /boot/grub/grub.conf or menu.lst,被用来配置启动加载程序。 /boot/vmlinuz ,Linux 内核。 |
/dev | 这是一个包含设备结点的特殊目录。一切都是文件 ,也适用于设备。在这个目录里,内核维护着所有设备的列表。 |
/etc | 这个目录包含所有系统层面的配置文件。它也包含一系列的 shell 脚本,在系统启动时,这些脚本会开启每个系统服务。这个目录中的任何文件应该是可读的文本文件。有趣的文件:虽然 /etc 目录中的任何文件都有趣,但这里只列出了一些我一直喜欢的文件: /etc/crontab ,定义自动运行的任务。 /etc/fstab ,包含存储设备的列表,以及与他们相关的挂载点。 /etc/passwd ,包含用户帐号列表。 |
/home | 在通常的配置环境下,系统会在 /home 下,给每个用户分配一个目录。普通用户只能在自己的目录下写文件。这个限制保护系统免受错误的用户活动破坏。 |
/lib | 包含核心系统程序所使用的共享库文件。这些文件与 Windows 中的动态链接库相似。 |
/lost+found | 每个使用 Linux 文件系统的格式化分区或设备,例如 ext3 文件系统,都会有这个目录。当部分恢复一个损坏的文件系统时,会用到这个目录。这个目录应该是空的,除非文件系统真正的损坏了。 |
/media | 在现在的 Linux 系统中,/media 目录会包含可移动介质的挂载点,例如 USB 驱动器,CD-ROMs 等等。这些介质连接到计算机之后,会自动地挂载到这个目录结点下。 |
/mnt | 在早些的 Linux 系统中,/mnt 目录包含可移动介质的挂载点。 |
/opt | 这个 /opt 目录被用来安装 可选的 软件。这个主要用来存储可能安装在系统中的商业软件产品。 |
/proc | 这个 /proc 目录很特殊。从存储在硬盘上的文件的意义上说,它不是真正的文件系统。相反,它是一个由 Linux 内核维护的虚拟文件系统。它所包含的文件是内核的窥视孔。这些文件是可读的,它们会告诉你内核是怎样监管计算机的。 |
/root | root 帐户的家目录。 |
/sbin | 这个目录包含 系统 二进制文件。它们是完成重大系统任务的程序,通常为超级用户保留。 |
/tmp | 这个 /tmp 目录,是用来存储由各种程序创建的临时文件的地方。一些配置导致系统每次重新启动时,都会清空这个目录。 |
/usr | 在 Linux 系统中,/usr 目录可能是最大的一个。它包含普通用户所需要的所有程序和文件。 |
/usr/bin | /usr/bin 目录包含系统安装的可执行程序。通常,这个目录会包含许多程序。 |
/usr/lib | 包含由 /usr/bin 目录中的程序所用的共享库。 |
/usr/local | 这个 /usr/local 目录,是非系统发行版自带程序的安装目录。通常,由源码编译的程序会安装在 /usr/local/bin 目录下。新安装的 Linux 系统中会存在这个目录,并且在管理员安装程序之前,这个目录是空的。 |
/usr/sbin | 包含许多系统管理程序。 |
/usr/share | /usr/share 目录包含许多由 /usr/bin 目录中的程序使用的共享数据。其中包括像默认的配置文件、图标、桌面背景、音频文件等等。 |
/usr/share/doc | 大多数安装在系统中的软件包会包含一些文档。在 /usr/share/doc 目录下,我们可以找到按照软件包分类的文档。 |
/var | 除了 /tmp 和 /home 目录之外,相对来说,目前我们看到的目录是静态的,这是说,它们的内容不会改变。 /var 目录存放的是动态文件。各种数据库,假脱机文件,用户邮件等等,都位于在这里。 |
/var/log | 这个 /var/log 目录包含日志文件、各种系统活动的记录。这些文件非常重要,并且应该时时监测它们。其中最重要的一个文件是 /var/log/messages 。注意,为了系统安全,在一些系统中,你必须是超级用户才能查看这些日志文件。 |