1. 前言

本文主要讲述遍历目录用到的一些shell命令和Linux文件系统,以及其他小的知识点。主要命令(大多数都是见名知意的)列举如下:

Command Meaning
pwd Print name of current working directory
cd Change directory
ls List directory contents
file Determine file type
less View file contents(内容)

2. 遍历目录(Navigation)

像Windows一样,Linux也将其文件组织在所谓的分层目录结构中。这意味着它们以树状目录格式进行组织,其中包含文件和其他目录(Windows中则称文件夹)。文件系统中第一个目录称为根目录,其包含文件和子目录,文件和子目录又包含更多的文件和子目录。就像下面这样(顺便一提,tree命令可以生成文件树):

├─bin
├─boot
├─cdrom
├─dev
├─etc
└─home
    ├─bshotts
    ├─lost+found
    └─me
        ├─.cache
        ├─.compiz
        ├─.config
        └─.gconf

如上述举例的文件树一样,/home/me父级目录(parent directory)。我们所处的目录称为当前目录(current working directory),pwd命令可以输出打印当前目录。

更改当前目录(cd)

我们可以有两种方式来指定路径名,它们分别是绝对路径(absolute pathnames)和相对路径(relative pathnames)。

 $\bullet$ 绝对路径

  Linux中绝对路径是从根目录(/)开始的,这与Windows有所不同。Windows中有不同的盘符,每个存储设备都有一个单独的文件系统树,因此绝对路径的起始位置也不一样;在Linux中,无论有多少个驱动器和存储设备都只有一个单个文件系统树。因此,加入想更改路径到/usr/bin目录下,则可以

[me@linuxbox ~]$ cd /usr/bin

 $\bullet$ 相对路径

  绝对路径的起始位置是根目录,相对路径的起始位置则是当前目录(working directory)。它使用的是几个特殊的符号来表示文件系统树中的相对位置,分别是.(dot)和..(dot dot)。前者(.)是指当前目录,后者是指当前目录的父级目录。(注:我们也可以忽略./部分,因为它是隐含的。)

文件夹命名

在Linux系统中,文件的命名方式类似于Windows等其他系统,但也有一些区别。

  • 以句点字符开头的文件名被隐藏,这意味ls命令不会列出它,除非我们特别声明(Windows中也有这一说法)
  • Linux中的文件名和命令是区分大小写的(Windows中无法创建两个同名的文件或文件夹)
  • 最好不要在文件名中插入空格,句点、破折号和下划线是个不错的选择

  • Linux中没有『文件扩展名』的概念,文件的内容或目的是按照其他方式确定的

有用的快捷方式

  • cd 改变工作目录到主目录( home directory
  • cd - 将工作目录改为上一个工作目录
  • cd ~user_name 将工作目录改为用户user_name 的主目录

3. Linux文件系统

详解ls命令

前面说过,ls命令是列举工作目录的文件和目录的。我们可以直接输入ls即可获取当前工作目录中包含的文件和子目录的列表。

[me@linuxbox ~]$ ls 
Desktop  Documents  Music  Pictures  Public  Templates  Videos

除了当前工作目录,还可以指定其他目录,也可以同时指定多个目录(用户的主目录以字符~表示)。

[me@linuxbox ~]$ ls ~ /usr 
/home/me:
Desktop  Documents  Music  Pictures  Public  Templates  Videos
/usr:
bin  games  include  lib  local  sbin  share  src

$\bullet$ 选项与参数

在Linux中,命令参数和文件名一样,都是大小写敏感(case sensitive)。

Option(选项) Long option (长选项) Description(描述)
-a –all 所有文件,包括隐藏文件(文件名句点开头)
-A –almost-all 所有文件,除了隐藏文件
-d –directory 通常,如果指定了目录,ls将列出目录的内容,而不是目录本身。将此选项与-l选项一起使用,以查看有关目录而不是目录内容的详细信息。
-F –classify 区分文件与目录,若为目录则其前加/
-h –human-readable 文件大小以易读形式(例如:M)而非字节(byte)显示
-l Display results in long format
-r –reverse 结果顺序反序,默认是字母升序
-s 以文件字节大小(size)为序
-t 以修改时间(modifica time)为序

$\bullet$ Long format

如上表中所列一样,-l参数会将结果以长格式(long format)输出显示,以下为例作长格式的字段(field)说明。

-rw-r--r-- 1 root root 3576296 2017-04-03 11:05 Experience ubuntu.ogg 
-rw-r--r-- 1 root root 1186219 2017-04-03 11:05 kubuntu-leaflet.png 
-rw-r--r-- 1 root root   47584 2017-04-03 11:05 logo-Edubuntu.png 
-rw-r--r-- 1 root root   44355 2017-04-03 11:05 logo-Kubuntu.png 
-rw-r--r-- 1 root root   34391 2017-04-03 11:05 logo-Ubuntu.png 
-rw-r--r-- 1 root root   32059 2017-04-03 11:05 oo-cd-cover.odf 
-rw-r--r-- 1 root root  159744 2017-04-03 11:05 oo-derivatives.doc

下表是对上列的长格式不同字段做以说明:

Field Meaning
-rw-r–r– 表明文件的访问权限,前导破折号(-)表示常规文件,接下里三个是文件所有者的访问权限,接着三个是文件组成员的访问权限,最后三个是其他所有人的访问权限
1 文件的硬链接(hard links)数目 (详细介绍见我
root 文件所有者的用户名
root 拥有文件的组(group)的名称
159744 文件字节(byte)大小
2017-04-03 11:05 文件最后修改的日期和时间
oo-derivatives.doc 文件名称

一切都是文件

所述,Linux中不需要文件名来反映文件的内容。file命令可以确定文件的类型。文件的种类有很多,在像Linux中这样的Unix操作系统中,常见的想法就是“一切都是文件”(Everthing is a file)。

查看文本文件(less)

Linux大多都是人直接可读(human-readable)的文本。less命令可以用来查看文本文件(text files)。配置文件(configuration files)多为文本存储,脚本(scripts)也是。

less filename

less 程序被设计为对称为more 的早期Unix程序的改进替代。 “less” 这个词是 “less is more” 一词的玩法(现代主义建筑师和设计师的座右铭)。 less 还被称为pagers ,即允许以逐页方式轻松查看长文本文档的程序。越多的程序只能向前翻页,而越少的程序则允许向前和向后翻页,并且还具有许多其他功能

Linux没有秘密

初次接触Linux,我们完全可以“逛一逛”。下表列出的目录中,不同的Linux发行版会有所差异,但问题不大。

Directory Comments
/ 根目录,一切开始的地方
/bin 系统启动和运行所必须的二进制(binary)文件(程序)
/boot 包含Linux内核,初始化RAM磁盘映像和引导加载程序
/dev 包含设备结点的目录,“一切都是文件”也适用于设备
/etc 系统范围配置文件
/home 主目录,Linux在这里创建用户目录
/media 共享库文件,类似于Windows的DLLs(动态链接库,dynamic link libraries)
/lib 媒体目录,可移动媒体设备(USB等)的常用挂载(mount)点
/root root用户的主目录
/tmp 临时目录,可在该目录中创建和删除临时工作文件
/var 可变(variable)目录