0%

快乐Linux学习(一)

本文是快乐学习Linux的第一篇,是基于Windows的Linux子系统(WSL)进行操作的。

适用于学习Linux系统基础命令和文件系统的读者。

Windows下Linux子系统是一个Linux玩家可能看不起的东西,但是作为我们这些新手接触Linux系统的第一步还是一个不错的选择,至于安装等内容在此不再赘述,Google上也有很多教程,之后有机会的话再补上。

文件系统简介

首先,让我们来理解一下Linux系统的文件系统。Linux系统是以分层目录来组织所有文件的,组织形式类似于一棵树,目录树的分支是文件或文件目录,其中树根/也被称为根目录,所有的目录和文件都连接在该目录下。Windows的存储设备是相互独立的,具有各自的文件系统,而Linux则全部挂载在目录树上。

很容易发现在WSL上,Windows下的各个磁盘都被挂载在目录/mnt下。

但是我们在Windows系统中又可以找到WSL的存储目录,C:\Users\username\AppData\Local\Packages\一个关于Ubuntu的文件夹\LocalState\rootfs\mnt\c就是WSL在mnt目录下挂载的C盘,打开发现其中是空的;而且从WSL中按以上路径寻找,发现没有权限进入rootfs文件夹,说明这并不是一个无限套娃的故事,这一点还是比较有趣的。

  • pwd:显示当前所在目录。
  • cd:更改当前目录,可以通过绝对路径(从/开始)或相对路径(当前目录开始)进行跳转。
    • cdcd ~快速到达home目录;cd -快速到达之前所在的目录。

每个目录中都包含父目录和当前目录内容(包括根目录,根目录的父目录还是是根目录,因缺思厅),使用..表示父目录,使用.或省略表示当前目录。

  • ls:罗列处出一个目录包含的文件及其子目录。是一个十分😃的命令,也是初学者最喜欢使用的命令。
选项 作用
-l 以长模式的形式,显示出目录信息
-a 列出所有的文件和目录,包括文件名以.开头的隐藏文件
-h 按照human的习惯显示文件大小,可以与l搭配使用
-r 反序排列显示
-t 修改事件排序
-i 显示文件索引节点信息
-d 仅显示目录,而不显示其下文件

命令行的命令一般是由命令+选项+参数组成,形如:command -options arguments

表格中的选项一般是上面最近命令的常用搭配,之后不再说明。

长模式的显示的内容是:

1
文件访问权限 硬链接数目 文件所属用户 文件所属用户组 文件大小 上次修改日期 文件名
  • file filename:显示文件描述

Linux中对于文件的内容,并不是按照文件的后缀名决定的,Linux崇尚一切皆文件。其中,文本文件是只包含简单字符到数字的映射。

  • less filename:快速查看文本文件内容。

    此处初学者less之后先不要乱动!不然Windows会一直出现duang!duang!duang!的声音。进去之后先按下h可以查看less操作的帮助文档,可以很有趣的发现很多方法,例如向下滚动,可以使用 e ^E j ^N CR等按键,默认向下一行,但是可以先输入数字N,来指定向下N行,也可以使用其他按键翻页等不赘述;输入/+正则表达式可以进行搜索匹配内容字符。其他感兴趣的内容可以自行使用help文档查看。

    由于j k紧邻,本人暂时将其作为滚动页面的按键。

    所谓的less,其实比more命令功能更多,more只能向下翻页,而less能前后翻页。所谓色即是空,果然是有趣的Linux。

根目录文件夹

下面罗列出一些根目录下的目录作用,可以自行查看,主要工作和编辑的地方就是home和usr目录下。

目录 备注
/ 根目录
bin 系统启动和运行必须的二进制程序
boot Linux内核、初始RAM磁盘映像、启动加载程序
dev 包含设备节点,维护所有设备的列表
etc 所有系统层面的配置文件,以及一系列shell脚本(此处的任何文件都应可读)
home 在其中有每个用户的目录,普通用户仅在自己目录下写文件
lib 核心系统程序使用的共享库文件
media 现在Linux系统中,可移动介质的挂载点,包括USB驱动器等
mnt 早些Linux系统中,可移动介质的挂载点
opt 安装“可选的”软件
proc Linux内核维护的虚拟文件系统,用来监管计算机
root root账户的home目录
sbin 系统的二进制文件,完成重大系统任务程序,为超级用户保留
tmp 存储各种程序创建的临时文件,系统重启会清空该目录
usr 包含普通用户所需的所有程序和文件,很多内容和Windows下的用户目录类似
var 存放动态文件,例如数据库等。除了tmp和home目录以外,其他目录都是静态的

文件和目录操作

通配符

首先介绍一下能够快速指定一组类似文件名的方法——通配符。所有接受文件名作为参数的命令都可以使用通配符进行匹配。

通配符 含义
* 匹配任意多个字符
匹配任意一个字符
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不属于字符集中的字符
[[:class:]] 匹配任意一个属于指定字符类[:class:]中的字符

其中常用的字符类有:[:alnum:]——任意一个字母或数字;[:alpha:]——任意一个字母;[:digit:]——任意一个数字;[:lower:]——匹配任意一个小写字母;[:upper:]——匹配任意一个大写字母。

基本文件操作

  • mkdir directory...:创建目录

  • cp item1 item2:复制文件或目录“item1”到文件或目录"item2"

  • cp item... directory:复制多个文件或目录到一个目录下

    可以很有趣的发现,该命令可以自动识别文件或目录,一定程度上页也说明了Linux中一切皆文件的概念。

    选项 作用
    -i 复制文件的时候,若文件已经存在,则在被重写之前提示用户确认信息,输入y覆盖,其他字符都保留原文件
    -r 递归复制目录及目录内容,复制目录的时候需要添加。
  • mv item1 item2:移动文件,完成操作后原文件不存在,方法和cp类似。当其在相同目录下操作的时候,文件被自身覆盖,且换了一个名字,相当于重命名一个相同的文件。

    选项 作用
    -i 移动文件到新的目录中,若文件存在则提示是否覆盖的信息
    -u 仅移动新目录下不存在的文件
  • rm item...:删除文件和目录

    选项 作用
    -i 删除之前提示用户确认信息
    -r 递归删除文件,需要删除目录的时候必须指定
    -f 即使文件不存在也继续执行,不提示错误信息

    需要注意的是,使用通配符进行删除的时候,需要再三小心,因为Linux删除之后不会进入回收站,所以,最好在删除之前使用ls来查看一下匹配到的项目是否是自己想要删除的。

创建链接

硬链接

  • ln file link

在Linux中,每个文件都默认会有一个硬链接,而每创建一个硬链接,就相当于创建了一个额外的目录项。硬链接存在两个局限性:一个是不能与链接本身不在同一个磁盘分区的文件;二是不能关联目录。

我们可以假设文件是由两部分组成的:包含文件内容的数据部分和持有文件名的名字部分,那么我们的硬链接就是为实际的文件本身创建额外的名字,并且这些名字都能关联到相同的数据部分。

硬链接就相当于是文件本身,和文件本身没有很大的区别,当硬链接被删除的时候,对文件本身没有影响。

符号链接

  • ln -s item link

符号链接是为了克服硬链接的局限性,创建一个特殊类型的文件,该文件包含一个指向文件或目录的文本指针,类似于Windows的快捷方式。

当向符号链接写入内容,那么其指向的文件也会被写入;而当删除符号链接时,仅链接被删除,若文件本身先被删除,那么链接依旧存在,但是指向内容为空,被称为坏链接。

练习场

创建一个文件夹来进行以上部分内容的练习。

1
2
3
4
5
# 切换到home目录下进行实验
cd
mkdir playground
cd playground
mkdir dir1 dir2

简单的复制和移动文件操作,当复制到当前文件夹下,则可以使用“点”来表示当前文件夹;mv文件到同目录下就相当于重命名。

1
2
3
4
5
cp /etc/passwd .
cp -i /etc/passwd .
mv passwd fun # 重命名
mv fun dir1
mv dir1/fun .

创建硬链接

1
2
3
ln fun fun-hard
ln fun dir1/fun-hard
ln fun dir2/fun-hard

使用ls -li进行查看的时候,可以发现其中fun和fun-hard的第3个字段是“4”,表示硬链接的数目,可以发现每个文件或目录至少一个硬链接,因为文件名本身就是由硬链接创建的。

第1个字段是文件内容的索引节点,可以发现硬链接和文件本身都是同一个索引节点,证明是同一个文件。

创建符号链接,需要按照创建符号链接所在文件或目录的位置来计算链接对象的相对位置。

1
2
3
4
ln -s fun fun-sym
ln -s ../fun dir1/fun-sym
ln -s ../fun dir2/fun-sym
ln -s dir1 dir1-sym

使用ls进行观察的时候,很容易发现符号链接文件会有一个指针指向目标文件。在文件大小字段可以发现,符号链接并不显示指向文件的大小,而是指向链接相对路径名称的路径字符数

此时可以利用tree来看一下目录的全部结构,使用sudo apt install tree进行安装,复制过来没有颜色显示。

1
2
3
4
5
6
7
8
9
10
11
.
├── dir1
│   ├── fun-hard
│   └── fun-sym -> ../fun
├── dir1-sym -> dir1
├── dir2
│   ├── fun-hard
│   └── fun-sym -> ../fun
├── fun
├── fun-hard
└── fun-sym -> fun

之后尝试删除实验。

1
rm fun-hard

可以发现文件fun的链接数从4变为3,其他硬链接文件不受影响,再删除原文件fun。

1
rm fun

可以发现,硬链接的文件只是链接数从3变成2,其他不受影响,但是可以发现符号链接变成了红色,其指向的文件不存在,无法打开。

大多数文件操作是针对链接的对象,而不是链接本身;而rm是特例,删除链接的时候是删除链接本身,而不是链接的对象。

个人收获

初步认识了Linux中的基础内容,最主要的是能够熟练查看Linux的一些文件和目录内容,并且会基础的文件操作。

------ 本文结束------