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将列出目录的内容,而不是目录本身。将此选项 |
-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)目录 |