文件结构
各种Linux的目录结构是不同的,分为统一布局和传统布局。
主流发行版基本使用统一布局,如ArchLinux、Ubuntu、RedHat等
目录结构(统一布局)
- /bin —> /usr/bin 命令文件夹
- /sbin —> /usr/bin 管理员命令文件夹
- /lib —> /usr/lib 存放32位动态链接库
- /lib64 —> /usr/lib 存放64位动态链接库
- /boot 引导文件夹
- /etc 配置文件夹
- /home 用户文件夹
- /root root用户的home文件夹
- /usr 应用程序存放处
- /dev 设备文件夹
- /mnt 经常用来挂载的文件夹
- /var 存放不断扩张的文件, 比如日志文件
- /opt 存放额外软件的文件夹
- /proc 进程文件夹
- /run 临时文件夹
- /srv 存放服务启动之后要提取的数据
- /sys 内核对象存放的文件夹
- /tmp 临时文件夹
文件权限
比如
$ ls -l
-rw-r--r-- 1 user user 0 3月 28 13:19 a.test
drwxr-x--- 11 user user 4096 3月 22 20:53 Documents
文件类型 | 文件所有者权限 | 文件所有者所属组权限 | 其他用户权限 |
---|---|---|---|
0 | 1 2 4 | 1 2 4 | 1 2 4 |
d | r w x | r w x | r w x |
是否为目录文件 | 读 写 执行 | 读 写 执行 | 读 写 执行 |
/boot
文件名 | 类型 | 是否必要 | 内容 |
---|---|---|---|
vmlinuz-linux | 内核 | 是 | 启动Linux的核心程序 |
initramfs-linux.img | 初始化根文件系统 | 是 | 启动所需模块和脚本 |
initramfs-linux-fallback.img | 初始化根文件系统后备文件 | 否 | 上一次成功生成的initramfs |
intel(有可能是amd)-ucode.img | CPU微码 | 否 | CPU安全补丁 |
EFI/ | EFI启动文件夹 | 是 | 包含grub的.efi文件 |
grub/ | grub配置和模块 | 是 | 引导配置,如grub.cfg |
网络
ip命令
ip link #最基本的命令
ip link set <dev> up|down #开关网口
ip addr #查看每个网口上的ip地址
ip addr add|del x.x.x.x/n dev <dev> #在某个网口上添加或删除ip地址
ip route add devfault via x.x.x.x #设置默认网关
wpa_supplicant连接wifi
扫描wifi网络
iw <无线网口> scan | grep SSID
创建配置文件
wpa_passphrase "SSID" "密码" | <位置>/xxx.conf
连接
wpa_supplicant -B -i <无线网口> -c <刚才保存的位置>/xxx.conf
NetworkManager
配置文件位置
位置 | 说明 |
---|---|
/etc/NetworkManager/NetworkManager.conf | 主配置文件 |
/etc/NetworkMananger/system-connections | 保存的连接文件(keyfile格式) |
nmcli
常用命令
nmcli d wifi #扫描wifi
nmcli d wifi connect "SSID名称" password "wifi密码" #连接wifi
nmcli connection delete "SSID名称" #删除连接
若要修改连接的话只需要一下命令即可
nmcli connection modify "SSID" ipv4.addresses x.x.x.x/n
nmcli connection modify "SSID" ipv4.gateway x.x.x.x
nmcli connection modify "SSID" ipv4.method manual
nmcli connection down "SSID" && nmcli connection up "SSID"
修改连接完全不用记,没用,一点用没有(宋浩音),日常生活中只须使用nmtui即可。
nmtui
该命令可以打开伪GUI式的页面对网络进行配置,包括无线连接
首先要用nmcli扫描wifi,才会显示出SSID列表
Systemd
基本命令
#查看系统启动状态
systemctl status
#列出所有服务
systemctl list-units --type=service
#启动 / 停止 / 重启某个服务
systemctl start|stop|restart xxx
#设置服务开机启动
systemctl enable xxx
#通过journald查看服务日志
journalctl -u xxx
#修改默认启动目标
systemctl set-default multi-user.target
#启动用户级别的服务
systemctl --user start|stop|restart xxx
journalctl
命令
基本用法
journalctl #查看所有日志
journalctl -r #反向显示,最新的在最上面
journalctl -f #实时跟踪日志
按时间查看
journalctl --since=today
journalctl --since "yyyy-mm-dd HH:MM" --until "yyyy-mm-dd HH:MM"
查看某个服务的日志
journalctl -u sshd.service #指定服务
journalctl -u NetworkManager.service -b #本次启动期间的日志
查看某次启动的日志
journalctl -b (-x) #x∈N+, 不加-x则显示本次启动的日志
清理日志
journalctl --vacuum-time=7d #删除7天前的日志
journalctl --vacuum-size=100M #日志超过100MB就清理
日志存储位置
类型 | 位置 |
---|---|
持久化日志(如果存在) | /var/log/journal/ |
仅内存日志 | /run/log/journal/ |
文件结构
路径 | 用途 |
---|---|
/etc/systemd/system/ | 系统管理员本地配置(优先级高) |
/usr/lib/systemd/system/ | 软件包安装的unit文件 |
/run/systemd/system/ | 运行时生成的unit |
/etc/systemd/system/default.target | 指向当前默认启动的target |
关键概念
概念 | 说明 |
---|---|
Unit | .service、.target、.socket、.mount等文件 |
Target | 运行级别、一组unit的集合 |
Service | 服务文件 |
Timer | 定时任务 |
Socket | 定义socket激活服务 |
journal | 提供统一的日志管理 |
Service文件语法
[Unit]
Description=MyService
After=network.target #在网络服务后
[Service]
ExecStart=/usr/local/bin/myscript.sh
Restart=on-failure #脚本崩溃时自动重启
User=root #root用户运行
Type=simple #默认类型,直接运行ExecStart
[Install]
WantedBy=multi-user.target #随系统启动(非图形模式)
文件保存后,运行一下命令让它生效
systemctl daemon=reexec #或者daemon-reload,更新配置
systemctl enable myscript #开启启动
systemctl start myscript #手动启动
mkinitcpio
Make Initial CPio是一个Arch Linux 及其衍生版用于生成initramfs的官方工具
适用系统主要为Arch Linux、Manjaro等。
工作流程
HOOKS
处理逻辑,如udev、filesystems、encrypt、lvm2等。
MODULES
内核模块,如ext4、i915、nvme等。
Linux启动过程
初始化固件
开机后,主板运行UEFI固件,从UEFI分区加载/boot/EFI/Boot/bootx64.efi。
加载引导程序
grub加载/boot/vmlinuz-linux.img内核和/boot/initramfs-linux.img文件。
Linux内核初始化
初始化内核态设备驱动、内存管理、CPU核心。
挂载根文件系统,运行init程序,init程序在initramfs里。
initramfs执行
挂载真正的/目录。
因为linux内核初始化的时候,挂载的是initramfs的临时/目录,执行的也是initramfs的init程序。
initramfs 由 mkinitcpio创建
systemd启动
运行/usr/bin/init,也就是/usr/lib/systemd/systemd程序。
挂载文件系统,激活swap,设置主机名、时间、日志;
启动网络服务(不是NetworkManager),启动所有配置为enable的service文件;
进入默认的target,默认是graphical.target或multi-user.target;
最后启动getty或display manager或桌面环境。
用户登入使用
用户登入后开始正常使用系统。
连接
建立连接
ln -s <源文件> <连接文件> #软链接
ln <源文件> <连接文件> #硬链接
软硬连接区别
特性 | 软链接 | 硬链接 |
---|---|---|
指向对象 | 指向路径 | 指向文件的inode |
inode是否相同 | 否 | 是 |
是否可以跨分区 | 可以 | 不可以 |
是否可以连接目录 | 可以 | 不可以 |
源文件被删除后 | 链接失效 | 仍然可以访问 |
ls -l 结果 | l类型,显示箭头 -> | -类型, 没有箭头 |
什么是inode
保存的信息
- 文件类型
- 权限
- 所有者
- 文件大小
- 最后访问/修改/更改时间
- 数据块的指针(告诉系统,文件内容在那些磁盘块上)
- 硬链接数量
不保存的信息
- 文件名
- 文件路径