@TOC
Linux(from 菜鸟教程)
Linux 系统启动过程
内核的引导
当计算机打开电源后,首先是BIOS[^1]开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入/boot
目录下的内核文件。运行init [^2]
init 进程是系统所有进程的起点,没有这个进程,系统中任何进程都不会启动。 init 程序首先是需要读取配置文件/etc/inittab
。
// 运行级别 [^3]系统初始化
在init的配置文件中有这么一行:si::sysinit:/etc/rc.d/rc.sysinit
它调用执行了/etc/rc.d/rc.sysinit
,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。 它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。建立终端
用户登录系统
一般来说,用户的登录方式有三种:
(1)命令行登录
(2)ssh登录
(3)图形界面登录
Linux 文件基础属性
通过这两个命令修改文件或目录的所属用户与权限
- chown (change owner) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
- 使用
ll
或者ls –l
命令来显示一个文件的属性以及文件所属的用户和组
更改文件属性:
- chgrp:更改文件属组
语法:chgrp [-R] 属组名 文件
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上 -R 的参数,那么该目录下的所有文件的属组都会更改。 - chown:更改文件所有者(owner),也可以同时更改文件所属组
语法:chown [–R] 所有者 文件名
chown [-R] 所有者:属组名 文件名
- chmod: 更改文件9个属性
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限
各权限的数字代表为:
r:4 w:2 e:1
每种身份的权限是数字相加,比如:当权限为:-rwxrwx---
分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= — = 0+0+0 = 0
所以权限数字就是770
语法:chmod [-R] xyz 文件或目录
还可以用符号来修改权限,比如:chmod u=rwx,g=rx,o=r test1 // 修改 test1 权限
linux的目录与文件管理基本上是在命令行实现的,把这一部分放到shell-learning里。
Linux用户与用户组管理
一 Linux用户账号管理
- 添加新的用户账号使用useradd命令,其语法如下:
useradd 选项 用户名
选项:
- -c comment 指定一段注释性描述。
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -s Shell文件 指定用户的登录Shell[^4]。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名: 指定新账号的登录名。
2. 删除账号
语法:
userdel 选项 用户名
一般常用的选项是-r
,它的作用是把用户的主目录一起删除
3. 修改账号
语法:
usermod 选项 用户名
选项跟useradd选项属性一样
4. 用户口令的管理
指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
命令的格式为:
passwd 选项 用户名
可使用的选项:
- -l 锁定口令,即禁用账号。
- -u 口令解锁。
- -d 使账号无口令。
- -f 强迫用户下次登录时修改口令。
二 Linux用户组管理 增加新的用户组,命令如下:
groupadd 选项 用户组
选项:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
删除用户组:
groupdel 用户组
修改用户组:
groupmod 选项 用户组
选项:
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字
如果一个用户属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限
newgrp root
// 将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组
/etc/passwd文件是用户管理工作涉及的最重要的一个文件
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
用命令cat /etc/passwd
得到类似于
root:x:0:0:root:/root:/bin/bash
这样的多行结果,其格式和具体含义是:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
- 用户名就是用户账号,不能有冒号(
:
),为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。 - 口令就是用户口令的加密串,不是明文,但是现在许多Linux系统使用shadow技术,把加密后的口令放到
/etc/shadow
里,而一般在/etc/passwd
里存放一个特殊字符比如x
或者*
- 用户标识号是一个整数,系统内部用它来标识用户一般情况下它与用户名是一一对应的。
如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
通常用户标识号的取值范围是0~65 535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。 - 组标识号代表用户所属的用户组,对应着
/etc/group
文件中的一条记录 - 注释性描述(也称为 GECOS 字段 或 用户信息字段),对应于
usradd -c
,用于存储用户附加信息,或者兼容历史系统:字段名 “GECOS” 源自早期 Unix 系统与 GE 大型机操作系统(General Electric Comprehensive Operating System)的兼容需求。 - 主目录就是用户的起始目录
- 登录shell :用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell
- 伪用户: 伪用户(系统用户) 是 Linux/Unix 系统中一类特殊的用户账户,不供人类登录使用,而是专为运行系统服务、守护进程或管理资源而创建
Linux磁盘管理
- df(英文全称:disk free):列出文件系统的整体磁盘使用量
语法:
df 选项 目录或文件名
选项:
- -h:以人类可读的方式显示输出结果(例如,使用 KB、MB、GB 等单位)。
- -T:显示文件系统的类型。
- -t <文件系统类型>:只显示指定类型的文件系统。
- -i:显示 inode 使用情况。
- -H:该参数是 -h 的变体,但是使用 1000 字节作为基本单位而不是 1024 字节。这意味着它会以 SI(国际单位制)单位(例如 MB、GB)而不是二进制单位(例如 MiB、GiB)来显示磁盘使用情况。
- -k:这个选项会以 KB 作为单位显示磁盘空间使用情况。
- -a:该参数将显示所有的文件系统,包括虚拟文件系统,例如
proc
、sysfs
等。如果没有使用该选项,默认情况下,df
命令不会显示虚拟文件系统。
- du(英文全称:disk used):检查磁盘空间使用量
语法:
du 选项 目录或文件名
选项:
- -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
- -h :以人们较易读的容量格式 (G/M) 显示;
- -s :仅显示指定目录或文件的总大小,而不显示其子目录的大小。
- -S :包括子目录下的总计,与 -s 有点差别。
- -k :以 KBytes 列出容量显示;
- -m :以 MBytes 列出容量显示;
与df
不一样的是,du
这个命令其实会直接到文件系统内去搜寻所有的文件数据
Linux yum
yum 是 Yellowdog Updater Modified 的缩写,是 Linux 系统中基于 RPM 包管理 的软件包管理器,主要用于 Red Hat 系发行版(如 CentOS、Fedora 等)。它的核心功能是帮助用户自动处理软件包的 依赖关系,并完成安装、更新、卸载等操作。 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。 常用命令:
- 列出所有可更新的软件清单命令:
yum check-update
- 更新所有软件命令:
yum update
- 仅安装指定的软件命令:
yum install <package_name>
- 仅更新指定的软件命令:
yum update <package_name>
- 列出所有可安裝的软件清单命令:
yum list
- 删除软件包命令:
yum remove <package_name>
- 查找软件包命令:
yum search <keyword>
- 清除缓存命令:
yum clean packages
: 清除缓存目录下的软件包yum clean headers
: 清除缓存目录下的 headersyum clean oldheaders
: 清除缓存目录下旧的 headersyum clean, yum clean all (= yum clean packages; yum clean oldheaders)
:清除缓存目录下的软件包及旧的 headers
配置yum源:
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)
CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo
运行以下命令生成缓存
yum clean all
yum makecache
Linux apt
在 Linux(特别是 Debian/Ubuntu 系统)中,apt(Advanced Package Tool)是用于管理软件包的核心工具,常用于安装、更新、卸载软件及系统升级。 apt 命令执行需要root权限。 常用命令:
列出所有可更新的软件清单命令:
sudo apt update
升级软件包:
sudo apt upgrade
列出可更新的软件包及版本信息:
apt list --upgradable
升级软件包,升级前先删除需要更新软件包:
sudo apt full-upgrade
安装指定的软件命令:
sudo apt install <package_name>
安装多个软件包:
sudo apt install <package_1> <package_2> <package_3>
更新指定的软件命令:
sudo apt update <package_name>
显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:
sudo apt show <package_name>
删除软件包命令:
sudo apt remove <package_name>
清理不再使用的依赖和库文件:
sudo apt autoremove
移除软件包及配置文件:
sudo apt purge <package_name>
查找软件包命令:
sudo apt search <keyword>
列出所有已安装的包:
apt list --installed
列出所有已安装的包的版本信息:
apt list --all-versions
[^1]: BIOS(Basic Input/Output System,基本输入输出系统)是计算机启动时运行的第一个固件程序,直接存储在主板的一块芯片中。它负责计算机最基础的硬件初始化、自检和操作系统引导,是硬件与软件之间的桥梁。 BIOS 与 UEFI 的关系 • 传统 BIOS:使用 16 位汇编语言,界面简单(纯文本),仅支持小容量硬盘(MBR 分区),启动速度较慢。 • UEFI(统一可扩展固件接口):现代替代方案,支持图形化界面、鼠标操作、快速启动,兼容大容量硬盘(GPT 分区),安全性更高(如 Secure Boot 防病毒篡改)。 • 现状:目前大多数新设备(包括联想电脑)已采用 UEFI,但仍习惯称为“BIOS设置”。
[^2]:init 是类 Unix 系统(如 Linux)中第一个由内核启动的用户级进程(PID=1),负责初始化系统环境、启动其他服务和守护进程(如网络、登录界面等)。 • 常见实现包括传统的 SysV init、改进版的 Upstart,以及现代广泛使用的 systemd。 • 作用:管理启动流程、守护进程、系统运行级别(如重启、关机模式)等。
[^3]:运行级别(Runlevel)是类Unix系统(如Linux)中用于定义系统不同工作模式的概念。每个运行级别对应一组特定的系统服务或功能,决定了系统启动时加载哪些程序或服务。通过切换运行级别,用户可以控制系统的状态(如单用户维护模式、多用户模式、图形界面模式等)。
1.运行级别 0:关机(系统默认不会设置为此级别,需手动触发)。
2.运行级别 1:单用户模式(仅root用户可登录,用于系统维护,无网络服务)。
3.运行级别 2:多用户模式(无网络)(部分系统可能不启用网络服务)。
4.运行级别 3:多用户模式(命令行界面 + 完整网络服务)(服务器常用)。
5.运行级别 4:保留未定义(用户可自定义用途)。
6.运行级别 5:图形界面模式(桌面环境,如GNOME或KDE)。
7.运行级别 6:重启(需手动触发
[^4]:用户的登录Shell是用户成功登录操作系统时自动启动的命令行解释器(如 Bash、Zsh 等),负责执行用户的命令、配置环境变量,并初始化用户的工作环境。
关键点:
1.作用 读取并执行初始化脚本(如~/.bash_profile、~/.bashrc 等),配置环境变量、别名等。 提供用户与操作系统的交互界面,执行命令或脚本。
2.与非登录Shell的区别 登录Shell:用户登录时启动(如通过SSH、终端或图形界面登录),会加载 /etc/profile 和用户目录下的配置文件(如 ~/.profile)。 非登录Shell:在已登录后手动启动的Shell(如终端中直接运行 bash),仅加载 ~/.bashrc 等部分配置。
3.查看用户的登录Shell 查看 /etc/passwd 文件中的最后字段: cat /etc/passwd | grep 用户名
例如: user :x:1000:1000:User
Name:/home/user:/bin/bash
→ 登录Shell为 /bin/bash。
4.修改登录Shell 使用 chsh 命令: chsh -s /path/to/shell # 例如 chsh -s /bin/zsh