一、前言
对于我们大多数人来说,Windows系统是最常用的桌面操作系统。
但事实上,Linux系统才是世界上使用最广泛的操作系统,目前市面上大部分的手机、车机、服务器、手环之类的东西,基本都是在linux系统之上进行构建的。
或者更准确来说,它们是在linux系统内核之上进行构建的。
操作系统的作用是管理硬件资源,而linux系统内核便是世界上兼容性最广泛的操作系统,可以管理各种硬件资源。
linux系统只是一个基石,通过在linux系统上进行各种改动、增强,便出现了各种我们更为熟悉的、具体的操作系统,比如ubuntu、centos等等。
目前来说,ubuntu是linux系统中使用范围最广泛的桌面操作系统,它和Windows系统比较像,拥有桌面环境,可以让我们简单的点击就能完成很多操作。
但为了深入学习linux系统,我并不推荐你去安装桌面版本的ubuntu,因为linux系统大多数时候,都是通过命令行进行交互的。
只有学会linux中的各种命令,能够用命令行熟练的操作linux系统中的各种资源,才能算是入门linux。
如果你是mac系统,那么可能并没有必要安装linux,因为mac就是类linux系统环境,只是命令可能有点不同。
但如果你和我一样是windows系统,那么推荐你使用wsl,也就是windows子系统,安装ubuntu子系统,可以让你非常方便的在windows系统上使用ubuntu系统。
如何安装与使用可以参考文章:Linux系统入门
二、文件系统
与windows系统的C盘、D盘不同,linux系统中没有盘的概念,只有一个全局的文件目录,也就是根目录,常用/
表示。
并且在linux系统中有个概念,叫做:一切皆文件。
举个例子来说,在windows系统中,我们常能在任务管理器中看到各种进程信息。
而如果在linux系统中我们想要查看这些进程信息,则是直接进入/proc
目录下,就能看到有哪些文件,这些文件里面存储的就是各种进程、系统内核等等数据。
又比如网络编程中有个socket概念,在windows系统中它怎么也和文件搭不上边,但在linux系统中,你可以用打开文件的函数去打开一个socket连接。
这便是一切皆文件,所以linux文件系统是非常重要的学习内容。
一般我们进入linux系统命令行中,默认是在“家目录”,也就是下图中的~
符号:
然后我们可以通过cd
命令切换目录,进入根目录:/
。
最后使用ls
命令查看根目录下有哪些文件,下面是各种常见目录的作用:
- /bin:存放系统启动和基本操作所需的二进制可执行文件(命令)。如
ls
、cp
、mv
。 - /boot:包含启动引导所需的文件,如内核文件和引导加载程序。示例:
vmlinuz
(内核文件)。 - /dev:包含设备文件,用于与硬件进行交互。示例:
/dev/sda
(硬盘)、/dev/tty
(终端设备)。 - /etc:包含系统配置文件。示例:
/etc/passwd
(用户信息)、/etc/fstab
(文件系统表)。 - /home:存放用户的个人文件和目录。示例:
/home/username
(用户名的主目录)。 - /lib:包含系统库文件(共享库)。例如,
libc.so
(C标准库)。 - /lib64:类似于
/lib
,但用于64位系统上的库。示例:libm.so
(数学库)。 - /lost+found:系统在文件系统检查时,存放丢失或损坏的文件。
- /media:用于挂载临时外部存储设备(如USB)。示例:
/media/usb
(USB设备挂载点)。 - /mnt:通常用于临时挂载文件系统。示例:
/mnt/data
(手动挂载的文件系统)。 - /opt:存放附加软件包和应用程序。示例:
/opt/google
(Google的程序)。 - /proc:虚拟文件系统,包含系统内核和进程的信息。示例:
/proc/cpuinfo
(CPU信息)。 - /root:超级用户(root用户)的主目录。
- /run:包含系统当前运行时的状态文件。示例:
/run/lock
(锁文件)。 - /sbin:包含系统管理命令,仅供管理员使用。示例:
/sbin/reboot
(重启系统)。 - /srv:存放服务相关数据,如Web服务器的数据。示例:
/srv/www
(Web数据目录)。 - /sys:提供内核和设备的信息。示例:
/sys/class/net
(网络设备信息)。 - /tmp:存放临时文件,通常在系统重启时清空。示例:
/tmp/tempfile
。 - /usr:包含系统级别的软件、库和文档。示例:
/usr/bin
(常用命令)、/usr/share/doc
(文档)。 - /usr-is-merged:指示
usr
和/usr/lib
已合并的状态,优化文件系统结构。 - /var:存放可变数据,如日志、缓存和数据库。示例:
/var/log
(日志文件)。 - /snap:存放通过Snap包管理器安装的软件。示例:
/snap/chromium
。 - /bin.usr-is-merged:类似于
/usr-is-merged
,指示/bin
和/usr/bin
已合并的状态。 - /sbin.usr-is-merged:类似于
/usr-is-merged
,指示/sbin
和/usr/sbin
已合并的状态。
而我们进入linux系统中,默认就在/home
目录下的当前用户名下:
前面说了~
符号代表当前用户的家目录,所以这里直接使用cd命令进入。
然后再使用pwd
命令查看当前目录的位置。
pwd
是print working directory
的首字母简称,也就是打印工作目录,实际上也就是打印当前目录。
如果你有多个用户,那么在/home
目录下就会存在多个文件夹,每个文件夹都代表一个用户的家目录。
而如果你使用管理员账号,也就是root用户,那么会比较特殊,它的家目录是在根目录下的:/root
。
通过输入su
命令、输入密码即可进入管理员账号:
如果你是第一次进入,那么你需要先给root用户设置密码后才能登录,设置密码的方式是输入下面这条命令:
sudo passwd root
此时虽然依旧会让你输入密码,但输入的是你当前用户的密码,然后设置root用户的密码后,就能登录root用户了。
注意,root用户作为超级管理员,对整个系统拥有至高无上的权利,它可以删除几乎所有的东西,并且删除之后基本没法恢复,所以大多数情况下,并不推荐使用root用户直接操作系统,一旦删错东西、操作失误,系统可能就直接崩了。
su
是super user
的首字母简称,翻译过来就是超级用户,而sudo
实际上可以就是su do
的简称,也就是用超级用户的权限去执行一条命令。
在很多情况下我们不希望直接使用超级用户,但又系统能够临时用超级用户的权限做一些操作,那么就会使用sudo
命令。
对于wsl系统来说,另一个非常重要的目录就是/mnt
,也就是挂载文件系统目录。
因为很多时候我们都希望能够在wsl与Windows系统之间互相传输文件,一种比较通用的方式是使用网络进行传输。
但如果你使用wsl,那么并不需要,因为我们Windows系统的C、D等盘符,会默认挂载到/mnt
目录下:
此时这里的C、D、E盘就是我们在Windows系统中看到的那个盘,你可以将linux中的文件复制到这里来,那么我们在Windows系统中的相应文件夹内也能看到复制过来的文件,反之亦然,非常方便。
linux系统中所有根下面的目录都非常重要,在不同地方发挥着重要的作用,这里并不打算对每个目录都进行详细介绍,而只会介绍一些目前我们最需要用到的目录。
至于剩下的其它目录,如果后续用到了,我会再对其进行介绍。
三、文件属性
在windows系统中,文件类型是根据文件后缀名、甚至可以直接根据其显示的图标进行划分的。
但在linux系统中,全然不是如此,一般来说,在linux系统中我们需要区分的主要有以下几个类型:
- 文件夹
- 普通文件
- 可执行文件
- 快捷方式
而最真实的区分方式便是,使用ls -l
命令,查看文件的属性:
比如这里拿最后一个文件夹的属性来说:
drwxrwxr-x
这里的第一个字符d
代表的就是目录(Directory),如果是普通文件,则会是 -
。
而后面的rwx
rwx
r-x
,代表的三类用户对该文件的权限。
文件权限由 9 个字符组成,分为 3 个部分,每部分 3 个字符。每部分分别表示 所有者(Owner)、所属组(Group) 和 其他用户(Others) 的权限。