Linux目录操作

本篇文章中使用的目录结构:

/home/tom
├── bin
├── gamelist.txt
└── homework
    ├── chinese
    ├── math
    │   └── ca.txt
    └── science

路径名、文件名、工作目录

一个路径名(路径),从/字符开始,该字符表示根目录;然后是到达该文件途径的所有的目录名,目录名之间使用/分隔,例如:

/home/tom/homework/math/ca.txt

路径名描述了从根目录到某文件所经过的目录树的路径,其中ca.txt叫做文件名

目前所在的目录称为工作目录(当前目录)

每当使用工作目录中的目录或者文件时,不需要指定整个路径,只需要键入文件名即可:

假设您目前处于/home/tom目录中,也就是说您的工作目录是/home/tom,目录下有一个文本文件/home/tom/gamelist.txt,和一个目录/home/tom/homework,那么下面的两条路径是等效的:

/home/tom/gamelist.txt
gamelist.txt

下面两条路径也是等效的:

/home/tom/homework
homework

对于路径,当使用/开头的名称时,Linux假定这个名称是一个完整的路径名,从根目录开始;当只是用文件名时,Linux假定使用工作目录中的文件。

绝对路径、相对路径、四个路径缩写

如果目录序列从根目录开始,则称之为绝对路径名(absolute pathname)

如果目录序列从工作目录开始,则称之为相对路径名(relative pathname)

假设您目前在/home/tom中,那么下面两条命令是等效的:

/home/tom/gamelist.txt  # 绝对路径名
gamelist.txt            # 相对路径名

Linux中有四个路径缩写:...~-

  • ..:父目录。
  • .:当前目录。
  • ~:家目录。
  • -:上一个工作目录。

假设您在系统中用tom用户名登录,并且家目录是/home/tom,您当前的工作目录是/home/tom/homework(其中cd是切换工作目录到指定目录的命令):

$ cd .      # 仍然在当前目录 /home/tom/homework
$ cd ..     # 到父目录中,即 /home/tom
$ cd ../..  # 到父目录的父目录中,即 /
$ cd ~      # 到家目录中,即 /home/tom
$ cd -      # 到上一个工作目录,即 /

...都是缩写,当路径使用..或者.开头时,实际上指的是一个完整的路径名。

...是实际的目录,由文件系统提供;~是shell提供的便利写法;-是命令cd提供的便利写法。

Linux认为根目录的父目录就是根目录本身。

目录中移动 cd pwd、移动目录 mv、重命名目录 mv

显示工作目录的名称,可以使用pwd命令:

$ pwd

切换工作目录,使用cd命令。

只需要在cd命令后面输入指定的目录名即可。

$ cd /home/tom  # 切换工作目录到家目录
$ cd ~          # 切换工作目录到家目录
$ cd ..         # 切换工作目录到父目录
$ cd tom        # 切换到当前工作目录下的tom目录
$ cd ../tom     # 切换到父目录下的tom目录

cd是bash的内建命令,使用$ help cd查看该命令的更多内容。

如果想要对目录进行移动,比如要将/home/homework/math目录移动到家目录下,即移动之前:

/home/tom
├── bin
├── gamelist.txt
└── homework
    ├── chinese
    ├── math        # 将要移动的目录
    │   └── ca.txt
    └── science

移动之后:

/home/tom
├── bin
├── gamelist.txt
├── homework
│   ├── chinese
│   └── science
└── math            # 移动之后的目录
    └── ca.txt

那么使用下面这条命令:

$ mv /home/tom/homework/math/ /home/tom

mv的语法为:

mv SOURCE DEST

SOURCE是希望移动或重命名的目录,DEST是目标或者新名称。

如果您目前的工作目录是/home/wm,那么完全可以使用相对路径:

$ pwd
/home/tom
$ mv homework/math/ ./

mv命令不仅可以用来目录,还可以对目录进行重命名。

如果要将工作目录中的homework重命名为hw,可以使用下面的命令:

$ mv homework hw

创建目录 mkdir、删除目录 rmdir rm

使用mkdir [OPTION]... DIRECTORY...创建目录,常用的命令选项有-p

$ mkdir extra               # 创建extra目录
$ mkdir history literature  # 创建history、literature两个目录
$ mkdir ~/bin               # 在家目录下创建bin目录

使用mkdir有两点需要注意:

  1. 在一个目录中,不能有两个相同名字的子目录。
  2. 默认情况下,如果父目录不存在,则不能创建子目录。

可以使用-p选项忽略第二条限制:

$ mkdir abc/def
mkdir: cannot create directory ‘abc/def’: No such file or directory
$ mkdir -p abc/def 

一些特殊字符不能出现在目录名中,比如/,大多数时候,目录名使用小写字母。

删除目录使用rmdir命令,常用的命令选项是-p

rmdir命令有几点需要注意:

  • 不能删除空的目录。这是一项安全检查,防止失误删除文件。
  • 默认只会删除目录序列中的最末的目录。可以使用-p来删除一串空目录。
  • 不能删除工作目录和根目录之间的任何目录。
$ rmdir foo # 删除foo目录
$ rmdir -p foo/bar  # 删除foo和foo下的bar目录
                    # bar必须是空目录
                    # foo下必须只用bar一个文件(目录也是文件)

rm命令可以用来删除目录,对目录是否为空没有限制,使用-r选项删除目录,-i选项对用户进行提示。

rm -r foo/bar # 删除foo下的bar目录,而不检查是否为空

ls 基本操作

ls用来显示目录内容。

将目录名作为参数,可以打印出目录中的内容。

$ ls homework/
chinese  math  science

homework目录中有三个文件(目录),分别是chinesemathscience

也可以同时显示多个目录的内容,比如下面的例子显示了homeworkbin目录下的内容,其中bin目录下没有文件,homework中有三个文件:

$ ls bin homework/
bin:

homework/:
chinese  math  science

使用-R参数可以显示目录的全部“子孙”:

$ ls -R homework/
homework/:
chinese  math  science

homework/chinese:

homework/math:
ca.txt

homework/science:

-F选项可以查看目录中文件的类型:

$ ls -F ./
bin/  gamelist.txt  homework/

当前目录下有三个文件,其中binhomework是目录,gamelist.txt是普通文件。下表显示了ls -F命令显示的标志:

标志 含义
普通文件:非可执行文件
* 普通文件:可执行文件
/ 目录
@ 符号链接
` ` 命名管道/FIFO

默认情况下,ls命令不会显示以.开头的文件,这类文件称为隐藏文件。为了显示隐藏文件,可以使用-a选项显示出所有文件:

$ ls -a
.   .bash_history  .bashrc  .cache        .hello    .lesshst
..  .bash_logout   bin      gamelist.txt  homework  .profile

-l选项可以显示目录中文件的更多信息,-h选项使用“人性化”的单位显示文件大小。

$ ls -l
total 8
drwxrwxr-x 2 tom tom 4096 May 29  2017 bin
-rw-rw-r-- 1 tom tom    0 May  6 20:23 gamelist.txt
drwxrwxr-x 5 tom tom 4096 May 29  2017 homework

第一行total 8表示此目录一共占用8字节空间。

之后的三行为目录中的文件,每个文件一行,以其中一行为例,说明每列的意义:

drwxrwxr-x 2 tom tom 4096 May 29  2017 bin

其中(从左至右):

  • d:指示符,表示这是一个目录。其余的指示符有:-普通文件、l符号连接、b特殊文件(块设备)、c特殊文件(字符设备)、p命名管道/FIFO。
  • rwxrwxr-x:一共三组,表示所有者、组用户和其他用户的权限。r代表可读、w代表可写、x代表可执行。
  • 2:如果是目录,则表示目录中第一级子目录的个数;如果是普通文件,则表示其连接数。
  • tom:所有者。
  • tom:所属组。
  • 4096:占用空间,以字节为单位。
  • May 29 2017:最后修改时间。
  • bin:文件名。

使用-h选项可以用适当的单位显示文件的大小:

$ ls -lh
total 8.0K
drwxrwxr-x 2 tom tom 4.0K May 29  2017 bin
-rw-rw-r-- 1 tom tom    0 May  6 20:23 gamelist.txt
drwxrwxr-x 5 tom tom 4.0K May 29  2017 homework

如果想列出某个目录自身(而不是其包含的文件)的信息,需使用-d选项:

$ ls -dl homework/
drwxrwxr-x 5 tom tom 4096 May 29  2017 homework/

查看文件大小 du

du(disk usage)可以用来显示文件的大小。

下面主要展示它的四个命令选项:

  • -a:显示全部文件。
  • -c:在最后一行显示左右指定文件总大小。
  • -h:使用合适的单位显示文件大小。
  • -s:只显示指定文件总大小。

使用du可以方便的查看文件的大小:

$ du
4       ./homework/math
4       ./homework/science
4       ./homework/chinese
16      ./homework
4       ./.cache
4       ./bin
48      .

du默认使用KB为单位,上面的例子中,第一列是文件大小,第二列是文件名。

使用-a选项可以查看全部文件:

$ du -a
0       ./gamelist.txt
0       ./homework/math/ca.txt
4       ./homework/math
4       ./homework/science
4       ./homework/chinese
16      ./homework
4       ./.lesshst
0       ./.cache/motd.legal-displayed
4       ./.cache
0       ./.hello
4       ./.bashrc
4       ./.bash_history
4       ./.profile
4       ./bin
4       ./.bash_logout
48      .

也可以指定一个或者多个文件作为命令参数:

$ du -h homework/ bin/
4.0K    homework/math
4.0K    homework/science
4.0K    homework/chinese
16K     homework/
4.0K    bin/

例子中使用-h选项让du以合适的单位显示文件大小。

使用-s显示指定文件的总大小:

$ du -sh homework/ bin/
16K     homework/
4.0K    bin/

使用-c选项显示所有文件的总大小:

$ du -csh homework/ bin/
16K     homework/
4.0K    bin/
20K     total

通配符

通配符是表示特殊意义的字符。

常用的通配符如下:

符号 含义`
* 匹配任何0个或多个字符
? 匹配任何单个字符
[list] 匹配list中的任何字符
[^list] 匹配不在list中的任何字符
{string1,string2...} 依次匹配其中指定的字符串

下面是几个例子:

$ ls /bin/b*
/bin/bash     /bin/bzcat   /bin/bzegrep  /bin/bzgrep        /bin/bzless
/bin/bunzip2  /bin/bzcmp   /bin/bzexe    /bin/bzip2         /bin/bzmore
/bin/busybox  /bin/bzdiff  /bin/bzfgrep  /bin/bzip2recover

上面的命令显示出了/bin目录下所有以b开头的文件,其中*匹配了任意0个或多个字符。

$ ls /bin/bz*grep
/bin/bzegrep  /bin/bzfgrep  /bin/bzgrep

这个例子匹配到了以bz开头,以grep结尾的所有文件。

$ ls /bin/bz?grep
/bin/bzegrep  /bin/bzfgrep

这个例子匹配到了两个文件,其中?代表着单个字符。

$ ls /bin/bz[fgh]grep
/bin/bzfgrep

[fgh]代表着匹配f、g、h中的任意字符。

{string1,string2……}表示依次匹配其中的字符串。

$ ls /bin/bz{grep,fgrep,ggrep}
ls: cannot access '/bin/bzggrep': No such file or directory
/bin/bzfgrep  /bin/bzgrep
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,149评论 2 34
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,215评论 9 467
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,374评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,070评论 1 19