使用bash shell提供的基本命令操作Linux文件和目录

哪怕我们配不上自己的野心,也不要辜负了现在所受的苦难。

Linux shell 是个交互式工具,使用户可以启动程序、管理文件以及管理Linux系统上的进程。shell的核心是命令行提示符,是shell的交互部分,它允许你输入文本命令,之后解释命令并在内核中执行。

shell包含了一组内置命令,可以用来完成一系列的操作,比如复制文件、移动文件、重命名文件以及显示和终止系统上正在运行的程序。

shell命令也可以写入文件中作为程序来执行,这些文件被称作shell脚本。

1.启动shell
大多数Linux发行版的默认shell都是GNU bash shell,它是作为常规程序运行的,通常是在用户登录终端时启动,登录时系统启动的shell取决于用户账户的配置。

/etc/passwd 文件中包含了所有用户列表以及每个用户的基本配置信息。

2.shell提示符
默认的shell提示符是美元符号$,这个符号表明shell在等待用户输入。

3.Linux文件系统
首先我们先了解一下Linux的文件系统的构建方式,这和Windows有很大区别。
Windows为每个物理磁盘驱动器分配一个盘符,每个驱动器都会有自己的目录结构,以便访问存储在其上的文件。区别于Windows,Linux在路径名中不使用驱动器盘符,Linux将文件存储在单个目录结构中,这个目录我们称之为 虚拟目录

虚拟目录结构包含一个称为根(root)目录的基础目录,根目录下的目录和文件会按照访问它们的目录路径一一列出,这点和Windows类似。

举个例子,Linux文件路径/home/valie/Document/read.txt,表明read.txt位于Document目录,Document又位于valie目录,valie则在home目录中,但并没有说明home目录存在于哪个物理磁盘中。

Linux的根驱动器一般用来存储系统文件,而用户文件通常存储在另一个驱动器里,上面所举例的home目录就是位于这个驱动启器中,那么在没有给出驱动器盘符的情况下,系统又是如何访问到home目录的呢?

这里就要提到 ‘挂载点 ’的概念,那么什么是挂载点?
Linux会在根驱动器中创建一些特别的目录,这些目录称之为‘挂载点’,但事实上这些目录并不是存储在根驱动器上,而是存储在另一个驱动器上。

Linux的虚拟目录
  • / : 虚拟目录的根目录,通常不会在这里存储文件
  • /usr :用户安装软件的目录
  • /var :可变目录,用以存放经常变化的文件,比如日志文件
  • /bin :二进制目录,存放许多GNU用户级的工具
  • /dev :设备目录,Linux在这里创建设备节点
  • /home :主目录,Linux在这里创建用户目录
  • /etc :系统配置文件目录
  • /boot :启动目录,存放启动文件
  • /opt :可选目录,通常用于存放可选的软件包
  • /lib :库目录,存放系统和应用程序的库文件
  • /tmp :临时目录,可以在该目录创建和删除临时工作文件

在启动一个新的shell提示符后,会话通常是从用户的主目录开始。

4.切换目录

cd + 绝对路径

cd ..  //切换到当前目录的父目录

5.文件和目录列表

  • ls 显示当前目录下的文件和目录
  • ls -F 添加-F参数用于区分目录和文件,它会在目录名后添加正斜线/,另外会在可执行文件后加星号*
  • ls -a 显示当前目录下的全部文件,包括隐藏文件(以点.开头,通常用来保存配置信息)
  • ls -R 列出当前目录下的所有文件和目录,包括子目录下的文件和目录
  • ls -l 参数-l会以长列表的格式输出,每一行都列出了单个文件或目录的更多信息。

6.ls命令的两种命令行参数

  • 单字母参数:以英文破折号开始
  • 全字母参数:以双英文破折号开始
    大部分参数都有单字母和双字母两种版本,而有的则只有一种,部分列举如下:
单字母 全字母 含义
-a --all 输出包括以.开头的隐藏文件
-F --classify 给条目追加文件类型标识符
-R --recursive 递归地列出子目录内容
-i --inode 显示每个文件的索引节点
-h --human-readable 输出文件或目录的大小,以字节为单位
-s --size 输出每个文件的块大小
-l 按长列表格式输出
--author 输出每个文件的作者

另外,也可以一次使用多个参数。多个双破折线参数必须分开输入,而多个单破折线可以组合成一个字符串,如用-s参数列出文件的块大小,用-a参数列出所有文件,用-i参数列出每个文件的索引点,用-l参数产生一个长列表,组合起来就是:
ls -sail

终端输出结果

7.过滤输出列表
ls + 文件名:当使用文件名作为过滤器时,ls命令只显示这个文件的信息;

有时候我们并不确定文件的确切名称,或者文件的类型,这时候可以使用标准通配符来输出满足要求的文件:

  • 问号?代表一个字符
  • 星号*代表零个或多个字符

比如我想查找Applet文件,但是并不确定它的文件类型,这时候可以这样使用过滤方法:
ls Applet*

终端输出结果
并不确定文件名时的查找方法

8.创建文件
有时,在写入数据之前我们希望这个文件就已经存在,这时可以用touch命令来创建空文件。
touch + 文件名,例如:

创建并打印 time.txt文件

9.复制文件

  • cp命令用于将文件或目录复制到另一个位置,最基本的用法就是cp+源文件名+目标文件名,例如:
复制 time.txt文件到当前目录下,新文件名为 time1.txt

从上图可以看出,time.txt是一个全新的文件,有自己的索引节点。

另外,也可以采用绝对路径来复制文件:

使用绝对路径将源文件time.txt复制到当前目录中,新文件与源文件同名
  • 在cp命令中使用命令行参数,以下是部分参数
参数 含义
-a 归档文件,并保留原有的属性
-b 创建已存在的目标文件的备份,而非覆盖它
-f 强制覆盖已存在的目标文件,不提示
-p 保留文件属性,如访问时间、修改时间等
-r 递归地复制文件
-R 递归地复制目录
使用 -p 参数复制源文件

从上图可以看出对于已经存在的time1.txt文件,强行复制之后拥有和源文件time.txt一样的修改时间。

使用 -R 参数递归地复制整个目录的内容
使用通配符将所有以time开头的文件复制到simple目录中
使用 -a 参数将以time开头的文件归档到 simple目录中,文件属性保留

10.使用ln命令创建链接文件
有时,我们需要在系统上维护同一份文件的一到多个副本,用上面个的cp命令复制多个副本并同时维护的方式虽然可行,但很费时费力。这时我们可以用创建虚拟副本的方法来完使维护工作变得轻松起来,这个虚拟副本就称为链接。链接是目录中指向文件真实位置的占位符。

Linux下的两种不同类型的文件链接:

  • 硬链接,创建方式:ln + 源文件名 + 目标文件名
  • 软连接,即符号链接,创建方式:ln -s + 源文件名 + 目标文件名

硬链接与软链接的区别在于,硬链接只能在同种存储媒体上的文件之间创建,不能在不同挂载点下的文件间创建,也就是说不在同一个磁盘分区中文件之间不能创建硬链接,而是使用软链接。

创建一个指向 time.txt文件的硬链接 time1.txt

从上图可以看出,time1.txt和time.txt文件的索引节点号是相同的,表明实际上它们是同一个文件,并且在我修改了time.txt文件后(time.txt中添加了一行‘This is the first modification.’),time1.txt文件中的内容也同步改变了。

创建一个指向time.txt文件的软连接time2.txt

从上图看到,文件time2.txt的索引节点号与time.txt不同,说明time2.txt是一个单独的文件,并且文件变小了,是因为它只需要存储源文件的信息,并不需要存储文件中的数据。

10.重命名/移动文件或目录
在Linux中,文件和目录的重命名和移动使用的是mv命令(moving),例如:

将time.txt文件重命名为time1.txt

需要注意的是,移动一个有软链接指向的文件会使得它的软链接失效,如下图time1.txt是一个指向time.txt的硬链接,time2.txt是一个指向time.txt的软链接,当time.txt重命名为time3.txt后,time2.txt软链接已不再是一个有效链接,已经无法访问到它所指向的源文件中的内容:

time.txt重命名后,它的软链接 time2.txt失效,硬链接保持有效

另外mv命令也用于将文件移动到别的目录中,如下:

将 time.txt文件移动到当前目录中的 dir目录中

11.删除文件
删除文件的操作命令是rm,常用参数如下:

参数 含义
-i interactive,即删除前询问是否确认删除
-f force ,即无视提示符,强制删除
-r recursive,删除目录,在删除这一目录前会事先删除目录中的内容

同样需要注意的是,当删除一个带有软链接的文件时,它的软链接会失效,硬链接保持有效。这是因为硬链接文件具有和源文件相同的索引节点号,硬链接会维持这个索引节点号来保留数据,直到你删除了最后一个指向这个索引节点的硬链接。这一点类似于OC中的引用计数。软链接存放的是源文件的路径,当源文件已经不存在时,软链接中所指向的源文件路径也就不可用了,所以软链接失效。

删除 time.txt源文件后,软链接 time2.txt无法访问到源文件的内容

12.创建目录
创建目录不能使用touch命令,而是使用mkdir命令,如:
mkdir dir

13.删除目录
· 删除目录的基本命令是rmdir, 但是rmdir只能删除空目录,当目录下有文件时,这个目录就不能被删除:

dir目录下有 time.txt文件

要想删除一个非空目录,我们得用到rm命令,rm -r + 目录名称 会递归地删除目录中的文件,最后再删除目录本身:

使用 rm -r 命令删除非空目录 dir

14.查看文件信息
stat + 文件名 可以查看文件的所有状态信息
file + 文件名 查看文件类型
file命令将文件分为3类:

  • 文本文件:包含可打印字符的文件
  • 可执行文件:可在系统上运行的文件
  • 数据文件:包含不可打印的二进制字符,又不能在系统上运行的文件

15.查看文件内容

  • 使用cat命令查看文件所有数据内容,cat命令常用的参数如下:
参数 含义
-n 给所有行添加行号
-b 只给有文本的行添加行号
-s 将多个空白行压缩成单个空白行
-e 在每行结束处添加美元符$
-t 用^+竖线去替代文中的制表符(ps:简书写作格式bug)
使用 cat命令打印文件内容
使用 -n 参数给所有行添加行号
使用 -b参数给只有文本的行添加行号
使用 -s参数将多个空白行压缩到单个空白行
使用 -e 参数在每行结束处显示 $
使用 -t参数将制表符用 ^| 代替

使用cat命令会打印出文件的全部内容,但是如果文件内容非常多,那么查看文件内容非常不便,这时可以使用more命令。

  • 使用more命令查看文件内容 -- 实现分页查看
    more命令常用的参数列举:
参数 含义
+n 从第n行开始显示
-n 设置每屏大小为n行
-s 将多个空白行压缩成单个空白行

使用的常用操作符有:

操作命令 含义
Enter 向下n行,默认为1行,需要设置
cmd + F 向下滚动一屏
空格键 向下滚动一屏
cmd + B 返回上一屏
= 输出当前行的行号
V 调出vi编辑器
Q 退出more命令
  • 使用head命令查看文件的开头内容,默认显示10行
  • 使用tail命令查看文件的尾部内容,默认显示10行
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容