重生之我是操作系统(一)----Linux快速入门

linux启动流程

  1. 首先自检,检查硬件有没有故障
  2. 从bios中选择启动磁盘
  3. 启动MBR中的bootloader引导程序
  4. 加载kernel
  5. 执行老祖宗进程systemd,所有进程都是它的衍生
  6. 进入系统

系统目录结构

linux世界里,一切皆文件。

image

在 Linux 系统中,根目录(/)下的文件夹遵循 FHS(Filesystem Hierarchy Standard) 标准,每个文件夹有明确的用途。

系统核心目录

  1. bin
    binary的缩写,存放二进制可执行文件,比如常用的命令等,供所有用户使用
  2. sbin
    S就是super的意思,存放系统管理员(root)所使用的工具
  3. etc
    存放各种配置,包括system与application。比如ssh/sshd_config,mysql.config
  4. boot
    存放系统启动文件。比如内核,引导程序

开机流程

开机=>BIOS=>/boot=>systemd进程=>运行级别=>运行级别对应的服务

用户相关目录

  1. home
    普通用户的主目录,每个用户一个目录
  2. root
    管理员用户的主目录,代表着最高权限
  3. tmp
    临时文件,重启后自动清空
  4. var
    经常变化的数据,比如日志,缓存等
  5. run
    运行时数据目录,存放当前系统运行的临时数据(如进程 PID 文件、套接字)

程序与库目录

  1. usr
    存放用户级程序和文件,类似windows中的Program Files。比如/usr/bin:普通程序, /usr/sbin:系统管理程序, /usr/share:共享资源(如文档、图标)
  2. lib/lib64
    存放系统运行所需的库文件,类似Windows中的DLL,几乎所有程序都需要用到这些共享库
  3. opt
    用于安装软件的额外目录

设备与挂载

  1. dev
    类似windows中的设备管理器,把所有硬件用文件的形式存储。比如硬盘dev/sda,串口dev/ttyS0
  2. mnt
    用于临时挂载外部存储,比如U盘,共享目录等
  3. media
    系统自动挂载外部设备的目录(如插入 U 盘会生成 /media/usb)。

特殊虚拟目录

  1. proc
    虚拟文件系统,主要存储系统信息,比如proc/couinfo,proc/meminfo
  2. sys
    虚拟文件系统,提供内核和硬件信息
  3. lost_found
    文件系统恢复目录,当文件系统检测到错误时,会将丢失的文件碎片存放在这里(每个分区独立存在,如根目录的 /lost+found)。
  4. srv
    服务数据目录,用于存放服务器提供的服务数据(如网站 /srv/www、FTP 文件 /srv/ftp),由管理员手动维护

远程连接

使用XShell,Xftp

VI VIM

  1. 正常模式
    以vim命令进入后,默认今日此模式
  2. 插入模式
    按下i,o,a,r这四个健,进入编辑模式
    退出插入模式,输入esc再输入: 即可

几个常用命令

  1. wq保存并退出
  2. q,q!退出不保存
  3. yy 拷贝当前行 5yy=拷贝5行
  4. dd 删除当前行 5dd=删除5行
  5. p粘贴,配合yy使用
  6. /搜索关键词, n是高亮显示下一个
  7. set nu/set nonu 显示/取消行号
  8. G快速切换到最末行,gg快速切换到最首行
  9. u 撤销,类似windows下Ctrl+z
  10. 先输入20,再按shift+g 快速定位到第20行。
    实际上20G ,20gg也是同样的

image

关机/重启,登录/注销

  1. shudown
    shudown -h now:立刻关机
    shudown -h 1 :1分钟后关机
  2. halt
    同上,-h的参数就是代表dalt
  3. reboot
    重启
  4. sync
    不管是重启系统还是关闭系统,首先要先运行sync命令,把内存中的数据写入磁盘

登录时尽量少用root账号登录,因为权限很大。
可以利用普通用户登录,登录后再用su -用户名来切换成系统管理员身份,操作完后再使用exit来退出root,避免误操作。

用户管理

  1. 添加用户
    useradd 用户名
    user -d /home/test king 指令目录
  2. 修改密码
    passwd 用户名
  3. 删除目录
    userdel 用户
    userdel -r 用户 ,删除用户及删除文件夹
  4. 查看用户
    id 用户名
  5. 切换用户
    su 用户名
    注意:高权限切换到低权限用户,不需要密码。需要切换回原来用户时,使用exit/logout指令
  6. 查看当前登录用户
    who am i/who

用户组

类似角色(Role),在linux中的每个用户都必须属于一个组,不能独立于组外。

  1. 添加组
    groupadd 组名
  2. 删除组
    groupdel 组名
  3. 添加用户时,直接加上组
    useradd -g 组名 用户名
  4. 修改用户组

用户组相关文件

  1. etc/passwd
    用户名:密码:用户标识:组标识:注释:主目录:登录Shell
    image

  2. etc/shadow
    密码的配置文件
    登录名:加密密码:最后一次修改事件:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
    image

  3. etc/group
    组名:密码:组标识
    image

实用指令

运行状态

linux存在7个运行级别,也可以理解为运行状态
0. 关机

  1. 单用户
    可以利用此模式找回密码
  2. 多用户无网络
    ?毫无意义
  3. 多用户有网络
  4. 保留
    无意义
  5. 图形界面
  6. 重启

最常用的是init 3,init 5

帮助指令

  1. man 指令名
    比如man ls
  2. help
    比如 help cd

文件目录指令

  1. 切换目录
    cd 路径
    2.列出所有文件
    ls,结合 -a -l 可以列出隐藏文件与单列显示. -h 更加友好的显示方式
    在linux系统中,隐藏文件以.XXX 开头

  2. 创建目录
    mkdir,默认只能创建一级目录。
    image
    需要加入-p 才能一次性创建多个目录

  3. 删除目录
    rmdir ,删除空目录,如果有文件则删不了
    image

  4. 创建空文件
    touch

  5. 拷贝
    cp source desc

  6. 删除
    rm ,既可以删除文件,又可以删除目录
    -r 递归删除
    -f 强制删除不提示

  7. 移动文件或者重命名
    mv oldname newName (两个文件在同一个目录,就是重命名,也就是覆盖)
    mv 不同路径,则是移动文件

  8. 只读查看
    cat -n 显示行号,- more 翻页
    image
    还有 less指令,与more类似,它是懒加载模式,more是整个文件加载后才显示,less是根据要加载的内容。
    image
    -head 显示文件开头部分内容,比如head -n 5 /etc/profile
    -tial 显示文件末尾部分内容,比如tail -n 5

  9. 控制台输出
    echo echo %HOSTNAME,echo "nnnnn"

  10. 输出重定向与追加
    》,》》
    image

  11. 快捷方式
    ln ,类似windows的快捷方式

  12. 历史指令
    history ,查看命令历史记录, !XXX ,执行执行过的第多少号命令
    image

时间日期

  1. 当前时间
    date
    date -s "2025-11-03 20:02:10" 设置当前系统时间
  2. 当前日期
    cal
    cal 2020 ,显示2020年整年的日历
    image

搜索/查找

  1. 搜索
    find,从指定目录下递归遍历子目录

  2. 快速定位文件路径
    locate,locate利用事先建立的索引,无需遍历整个文件系统。但为了准确度,管理员需要定期更新locate

  3. 查看指令在那个目录下
    which XXX
    image

  4. 过滤查找
    grep
    grep -n "hh" /root/bbb/a.txt
    image
    image

压缩/解压

  1. 压缩
    gzip/zip
    格式为xxx.gz,源文件会消失

  2. 解压
    gunzip/unzip
    -d 指定到目标文件夹

  3. 打包
    tar 与上述不同的是,tar是讲多个文件合并为一个,而zip是压缩,节省存储空间
    -c 产生tar压缩文件
    -x 解压文件
    -v 显示详细
    -f 指定压缩文件名

文件/目录所有者

  1. 查看文件的所有者
    ls -ahl
    image

  2. 修改文件所有者
    chown (changeowner) 用户名 文件名

  3. 修改文件所在的组
    chgrp(changegroup) 组名 文件名

  4. 修改用户所在的组
    usermod -g 新组名 用户名

权限

权限一共有10位

  1. 0位
    确定文件类型
    l是连接,类似windows快捷方式
    d是目录
    c是字符串设备文件,比如鼠标,键盘
    b是块设备,比如硬盘
  2. 1-3位
    r=read
    w=write
    x=execution
    也可以用数字表示
    r=4
    w=2
    x=1
    确定所有者拥有该文件的权限----User
  3. 4-6位
    确定所有组拥有该文件的权限----Group

image

修改权限

chmod 指令,可以修改文件或者目录的权限
u:所有者,g:所有组,o:其他人 a:所有人(u,g,o的总和)
chmod u=rwx,g=rx,o=x

chmod u=rwx,g=rx,o=rx

定时任务

crond 任务调度

比如定时备份mysql ,定时与服务器同步更新时间等

crontab [选线]
-e 新增/编辑
-l 查询list
-r 删除所有的

示例:*/1 * * * * ls -l /etc/ > /tmp/to.txt 每分钟执行etc目录所有文件覆盖到to.txt
image
image

at 一次性任务

at的守护进程atd以后台模式运行,默认情况下每隔60秒检查作业队列。如果时间与当前时间匹配,则运行此作业。
实用atd命令时,一定要保证atd进程的启动。
ps -ef |grep atd 检测atd进程是否还在运行

image

linux分区

linux无论几个分区,分给哪个目录使用。本质上就是一个根目录。
linux采用了"载入"的处理方法,将一个分区和一个目录联系起来。

  1. 查看挂载的分区
    lsblk
    image
  2. 分区命令
    fdisk /dev/xxxx
    image
  3. 格式化分区
    mkfs -t ext4 /dev/xxxx
  4. 挂载分区
    mount
    mount /dev/sdb1 /newdisk
  5. 卸载分区
    umount
    umount /dev/sdb1
  6. 永久挂载分区
    使用命令行,在重启后,挂载关系会失效。
    通过修改 vim /etc/fstab 实现永远绑定

磁盘情况查询

  1. 基本情况
    df -h
    image

du -h 可以查看某个目录的磁盘使用情况

实用指令

  1. 统计文件个数
    ls -l /opt|grep "^-"|wc -l
  2. 统计目录个数
    ls -l /opt|grep "^d"|wc -l
  3. 统计文件个数,包括子文件
    ls -lR /opt|grep "^-"|wc -l
    1. 统计目录个数,包括子目录
      ls -lR /opt|grep "^d"|wc -l
  4. 以树状显示目录结构

网络配置

原理:
image

可以直接修改配置文件来指定IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改完成后,service network restart 或者reboot 使配置生效

主机与hosts映射

  1. 修改主机名
    cat /etc/hostname
    修改完成后,重启生效
  2. 映射主机名
    cat /etc/hosts

进程

每个进程分为前台进程与后台进程。

  1. ps -a
    显示所有进程信息
  2. ps -u
    以用户的格式显示进程信息
  3. ps -x
    显示后台进程运行的参数

经常组合在一起 ps -aux
image

image

父子进程

ps -ef 查看父子关系,除了0号进程,否则一个进程必须由另一个进程所创建。在windows上也是同理的

终止进程

kill [选项] 进程号
killall 进程名,注意实用此命令,子进程也会被杀掉

进程树

pstree 可以更加直观
image

服务(service)管理

service本质就是进程,就是后台进程。一般情况下会监听某个端口,来提供服务。

service 服务名 [start|stop|restart|reload|status]
centOS7.0后,很多服务不再使用service,而是使用systemctl来管理。
可以使用ls -l /etc/init.d/ 命令来看哪些服务可以用service来使用
也可以用steup

chkconfig

linux的7个运行级别,可以通过chkconfig来配置,在什么级别要不要设置自动启动
image

例子:chkconfig --level 3 network off
需要重启机器才生效

systemctl

可以在 usr/lib/systemd/system 中查看受systemctl管理的列表
systemctl [start|stop|restart|status] 服务名,注意此时是临时生效,重启后会恢复默认设置。

使用enable / disable 才是永久生效
image

使用ls -l /usr/lib/systemd/system 查看可以操作的service

firewall 防火墙

在真正的生成环境中,是需要指定开放端口的。
image

监控

系统监控

top [选项]
-d 3 每隔3秒更新
-i 不显示任何闲置/僵死的进程
-p 通过特定process id 来监控
image

可以按下E 来切换mb,gb显示格式
P 按照CPU使用率排序
M 内存使用率排序
N 按照PID排序
q 退出

网络监控

比如哪些进程正在监听端口
netstat [选项]

-an 按照一定顺序排列输出
-p 显示哪个进程在调用

io监控

iotop

RPM&YUM&APT包管理

RPM

rpm用于互联网下载包的打包和安装工具,是ReadHat Package Manager的缩写,类似windows的setup.exe

  1. 简单查询
    rpm -qa|grep xxx
    image

  2. 卸载
    rpm -e xxxx
    image

  3. 安装
    rpm -ivh xxxxx
    i=install
    v=verbose 提示
    h=hash 进度条

YUM

yum是一个shell前端软件包管理器,能够从指定服务器自动下载RPM包安装,自动处理依赖性关系。类似应用商店。

APT

APT是ubuntu的包管理软件,与YUM类似
image

Shell编程

Shell是一个命令行解释器,可以用Shell来启动,挂起,停止,编写程序
image
image

注释

单行#
多行:<<! xxxx !
image

变量

$HOME,$PACH都是系统变量,可以通过set来查看
image

命名与C#差不多,别用数字开头就行。
切记一点 A=100,等号两边不能有空格
也可以持有引用 A=$(B)

全局变量

export 变量名=变量值(将shell变量输出为全局变量)
source 配置文件(使配置生效)

传参数

类似C#中 Method(param1,param2)

image
image

预定义变量

$$ 获取当前进程号
$! 后台运行的最后一个进程的进程号
$? 最后一次执行命令的返回状态

image

运算符

expr 1 + 1
+,-,*,/,%
加,剑,乘,除,取余

注意中间有空格

条件判断

[ condition ]
返回有值为true,空值为false
image

#!/bin/bash

if [ $1 -ge 60 ]
then
        echo “及格了”
elif [ $1 -lt 60 ]
then
        echo "不及格"
fi

case

image

循环

image
image

读取输入

类似Console.Read
image

自定义方法


#!/bin/bash
function getSum(){
        SUM=$[$n1+$n2]
        echo "和为$SUM"
}

read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2

getSum $n1 $n2

日志

日志核心进程 rsyslogd
image

可以通过/etc/rsyslog.conf 文件来配置日志记录到哪里。
image

自定义日志

image
image

日志轮替

说人话就是定期迁移/删除日志,其原理是依赖cron定时任务。
仔细观察/etc/cron.daily 目录,就会发现logrotate的影子
image

配置文件在cat /etc/logrotate.conf

image
image

cd /etc/logrotate.d/ 自定义的轮替配置可以放在这个文件下,方便维护。如果放在logrotate.conf主配置中就会越来越多。

内存日志

在linux中,有一部分日志先写内容,再写磁盘。系统重启后会清空。
所以当某些日志找不到的时候,可以去内存日志里查看。

journalctl
image

备份与恢复

主要依赖dump与restore两个命令
很少操作,主要是结合crontab实现自动化备份命令

posted @ 2025-04-01 11:25  叫我安不理  阅读(534)  评论(0)    收藏  举报