Linux基础入门(一)

Linux内核

Linux系统分为内核空间和用户空间。内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要件。

Linux的内核主要由5个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。

进程调度 SCHED

  • SCHED_OTHER:分时调度策略(默认),是用于针对普通进程的时间片轮转调度策略。
  • SCHED_FIFO:实时调度策略,是针对运行的实时性要求比较高,运行时间短的进程调度策略。
  • SCHED_RR:实时调度策略,是针对实时性要求比较高,运行时间比较长的进程调度策略。

内存管理 MMU

  • 内存管理是多个进程间的内存共享策略。在Linux中,内存管理主要说的是虚拟内存。
  • 虚拟内存可以让进程拥有比实际物理内存更大的内存,可以是实际内存的很多倍。
  • 每个进程的虚拟内存有不同的地址空间,多个进程的虚拟内存不会冲突。

虚拟文件系统 VFS

  • 在Linux下支持多种文件系统,如ext,ext2,minix,umsdos,msdos,vfat,ntfs等。
  • 目前Linux下最常用的文件格式是ext2和ext3。

网络接口

  • Linux支持多种网络接口和协议。网络接口分为网络协议和驱动程序,网络协议是一种网络传输的通信标准,而网络驱动则是对硬件设备的驱动程序。Linux支持的网络设备多种多样,几乎目前所有网络设备都有驱动程序。

进程间通信

  • Linux操作系统支持多进程,进程之间需要进行数据的交流才能完成控制,协同工作等功能,Linux的进程间通信是从UNIX系统继承过来的。Linux下的进程间的通信方式主要有管道、信号量、消息队列、共享内存和套接字等方法。

Linux目录

Linux目录结构

image-20240229161709694

在Linux中根目录的子目录结构相对是固定的(名字固定),不同的目录功能也是固定的

  • bin: binary, 二进制文件目录, 存储了可执行程序, 今天要将的命令对应的可执行程序都在这个目录中

  • sbin: super binary, root用户使用的一些二进制可执行程序

  • etc: 配置文件目录, 系统的或者用户自己安装的应用程序的配置文件都存储在这个目录中

  • lib: library, 存储了一些动态库和静态库,给系统或者安装的软件使用

  • media: 挂载目录, 挂载外部设备,比如: 光驱, 扫描仪

  • mnt: 临时挂载目录, 比如我们可以将U盘临时挂载到这个目录下

  • proc: 内存使用的一个映射目录, 给操作系统使用的

  • tmp: 临时目录, 存放临时数据, 重启电脑数据就被自动删除了

  • boot: 存储了开机相关的设置

  • home: 存储了普通用户的家目录,家目录名和用户名相同

  • root: root用户的家目录

  • dev: device , 设备目录, Linux中一切皆文件, 所有的硬件会抽象成文件存储起来,比如:键盘, 鼠标

  • lost+found: 一般时候是空的, 电脑异常关闭/崩溃时用来存储这些无家可归的文件, 用于用户系统恢复

  • opt: 第三方软件的安装目录

  • var: 存储了系统使用的一些经常会发生变化的文件, 比如:日志文件

  • usr: unix system resource, 系统的资源目录

    • /usr/bin: 可执行的二进制应用程序

    • /usr/games: 游戏目录

    • /usr/include: 包含的标准头文件目录

    • /usr/local: 和opt目录作用相同, 安装第三方软件

相对路径

相对路径:相对路径就是相对于当前文件的路径。在Linux中有两个表示路径的特殊符号:

  • ./:代表目前所在的目录,也可以使用 .表示。

  • …/:代表当前目录的上一层目录,也可以使用 …表示。

绝对路径

绝对路径:从系统磁盘起始节点开始描述的路径。

  • Linux:起始节点为根目录,比如: /root/os。

  • Windows: 起始节点为某个磁盘的盘符。

命令解析器

工作原理

Linux终端是如何识别并且运行那些用户输入的命令的呢?这些命令都是通过命令解析器解析完成并执行的。

命令解析器是在Linux操作系统中就是一个进程,叫做bash。其工作的具体步骤如下:

在Linux中有一个叫叫做PATH的环境变量,里面存储了一些系统目录。我们可以通过echo $PATH命令查看。

image-20240229162538698

命令解析器需要依次搜索PATH中的各个目录,检查这些目录是否有用户输入的指令。

  • 如果找到了,执行该目录下的可执行程序,用户输入的命令就被执行完毕了。
  • 如果没有找到,继续搜索其他目录,最后还是没有找到,会提示命令找不到。

命令提示行

image-20240229162904645

  • krito:当前登录的用户的用户名
  • @:在
  • localhost:主机名,在安装Linux操作系统时手动指定,可以修改、
  • ~:当前用户的家目录
  • #:代表当前用户是root用户
  • $:代表当前用户是普通用户。

命令行快捷键

快捷键 功能 备注
Tab 命令自动补齐 在终端中输入某个命令的前一个或若干个字符,再按Tab键
Ctrl+p 显示输入的上一个历史命令 从输入的最后一个命令往前倒,也可以使用↑键
Ctrl+n 显示输入的下一个历史命令 也可以使用↓键
Ctrl+a 光标移动命命令行首 也可以使用Home键
Ctrl+e 光标移动命命令行尾 也可以使用End键
Ctrl+u 删除光标前的部分字符串
Ctrl+k 删除光标后的部分字符串
光标向右移动一个字符
光标向左移动一个字符
Backspace/Delete 删除光标前/后的一个字符

文件管理命令

cd命令

进入指定目录

1
cd 目录名
  • 目录名:使用相对路径/绝对路径都可以
  • 特色目录:…表示当前目录的上一级目录,使用cd … 或者cd …/都可以;.表示当前目录,cd . 不会切换目录。

进入家目录

1
2
3
$ cd                    # 方式1
$ cd ~ # 方式2
$ cd /home/用户名 # 方式3

在临近的两个目录之间切换

1
$ cd -

ls命令

文件类型

用户类型

在Linux中有三大类用户:文件所有者,文件所属组用户,其他人,我们可以对同一个文件给这三种人设置不同的操作权限。

  • 文件所有者:Linux中的所有的文件都有一个所有者,就是文件的主人。
  • 文件所属组:

文件权限

权限一共有四种:读权限,写权限,执行权限,无权限。

  • 读权限:使用r表示,即:read。
  • 写权限:使用w表示,即:write。
  • 执行权限:使用x表示,即:excute。
  • 没有任何权限:使用-表示。

image-20240301185538543

第一个字符为文件类型,接下来每三个字符分别代表的是文件所有者,文件所属组用户,其他人对文件的操作权限。这个例子里,所有用户都对文件有读、写、执行权限。

硬链接计数

每当我们给磁盘文件创建一个硬链接(使用ln),磁盘上就会出现一个新的文件名,硬链接技术加1,但是这新文件并不占用任何的磁盘空间,文件名还是映射到原来的磁盘地址上。

  • 和直接进行文件拷贝的区别是,创建硬链接只是多了一个新的文件名,拷贝文件不仅多了新的文件名,在磁盘上数据也进行了拷贝。
1
ln 文件A 文件B

创建删除目录

创建目录

1
2
3
4
5
#单层目录
mkdir 新目录名字

#多层目录,需要加参数 -p
mkdir root/a/b/c -p

删除目录

如果要删除已经存在的路径,可以使用rmdir或者rm

  • rmdir:只能删除空目录
  • rm:可以删除文件也可以删除目录,如果要删除目录,需要加参数-r。(recursion)

rm命令常用参数:

  • -i:删除的时候给提示
  • -f:强制删除文件,没有提示直接删除并且不能恢复。

cp命令

拷贝文件

1
cp 要拷贝的文件 得到的文件

拷贝目录

1
cp 文件A 文件B -r

mv命令

文件的移动

1
2
3
#mv 要移动的文件 目录
#把文件A移动到目录B中
mv A B

文件改名

1
2
3
#mv 要改名的文件 新名字(必须是原来不存在的)
# 其中A可以是文件也可以是目录,并且是存在的,B原来是不存在的
mv A B

文件覆盖

1
2
3
#mv 存在的文件A 存在的文件B
# A文件中的内容覆盖B文件中的内容,A文件被删除,只剩下B文件。
mv A B

查看文件内容

cat,将文件内容显示到终端,如果文件太大则无法完全显示。

1
cat 文件名

more,可以翻屏查看文件中的内容。

1
2
3
4
5
6
more 文件名
快捷键
- 回车:显示下一行
- 空格:向下滚动一屏
- b:返回上一屏
- q:退出

less,和more相似。

head,查看文件头部的若干行信息

1
2
#默认显示文件的前10行
head -行数 文件名

tail,查看文件尾部的若干行信息

1
tail -行数 文件名

连接的创建

连接分两种类型:软链接和硬链接。软链接相当于windows中的快捷方式,硬链接文件并不会进行拷贝,只是多出一个新的文件名并且硬链接计数会加1。

软连接

1
ln -s 源文件路径(建议使用绝对路径) 软连接文件名

a.lnk为相对路径

image-20240301210140554

我们将其移动后,a.lnk变成红色,变为不可用。

image-20240301210227851

a.lnk指向当前目录下的a.txt,所有推荐使用绝对路径。

image-20240301210344584

硬链接

1
ln 源文件 硬链接文件名

硬链接与软链接不同,它是通过文件名直接找对应的硬盘地址,而不是基于路径,所以源文件直接使用相对路径即可,无需指定绝对路径。目录不允许创建硬链接。

文件权限

修改文件权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#chmod
#语法格式: chmod who[+|-|=]mod 文件名
- who:
- u: user -> 文件所有者
- g: group -> 文件所属组用户
- o: other -> 其他
- a: all, 以上是三类人 u+g+o
- 对权限的操作:
+: 添加权限
-: 去除权限
=: 权限的覆盖
- mod: 权限
r: read, 读
w: write, 写
x: execute, 执行
-: 没有权限

给所有人读、写、执行权限

image-20240301211913336

去除文件所有者的执行权限

image-20240301212023920

修改文件所有者

1
2
3
4
#只修改所有者
sudo chown 新的所有者 文件名
#同时修改所有者和所属组
sudo chown 新的所有者:新的组名 文件名

修改文件所有者为root。

image-20240301213427378

修改文件所属组

1
sudo chgrp 新的组名 文件名

其他命令

pwd命令

显示当前用户所在的工作目录

image-20240301213934756

touch命令

创建一个新的空文件,如果指定文件已存在,只会更新该文件的修改日期,对内容没有任何影响。

1
touch 文件名

which命令

查看要执行的命令所在的实际路径。

image-20240301214624620

重定向命令

输出重定向:修改输出的数据的位置。将原来显示在终端的数据输入到文件中。

1
2
>:将输出的内容写入到指定文件中,如果文件中已有数据,则会使用新数据覆盖。
>>:将输出的内容追加到指定文件尾部。

image-20240301221224690

用户管理命令

切换用户

1
2
3
4
5
6
# 只切换用户,工作目录不变
su 用户名
# 切换用户和工作目录,会自动跳转到当前用户的家目录中
su - 用户名
# 回到原来的用户
exit

添加删除用户

添加新用户

1
2
3
4
5
6
# 添加用户
sudo adduser 用户名
# centos
sudo useradd 用户名
# ubuntu
sudo useradd -m -s /bin/bash 用户名

image-20240302135738891

centos创建用户后,需要更改用户密码。

image-20240302135811122

修改完密码后,使用新密码登入新用户。

image-20240302135844711

删除用户

1
2
# 删除用户,添加参数 -r 就可以一并删除用户的家目录
sudo userdel 用户名 -r

image-20240302140407309

添加和删除用户组

默认情况下,只要创建新用户就会得到一个同名的用户组,并且这个用户属于这个组。

1
2
sudo groupadd 组名
sudo groupdel 组名

在/etc/group文件中,查看所有的用户组。

image-20240302141003188

image-20240302140948482

修改密码

1
2
3
4
# 修改当前用户密码
passwd
# 修改非当前用户密码
sudo passwd 用户名