(CN) Linux Notes

Lesson 1

一 课程大纲

image-20220327130003183

二 使用场景

image-20220327130017621

服务器用Linux:免费、稳定、高效

三 Linux和Unix

  1. 贝尔实验室,多用户分时操作系统

  2. B语言改写为C语言

    image-20220327130022405

四 虚拟机中分区管理

  1. / 根分区 /boot swap
  2. swap分区是用来弥补内存不够的

五 网络连接的三种方式

  1. 桥接模式:
  • 在同一网段 e.g. 192.168.0.xx
  • 虚拟系统可以和外部系统联系,但是会造成IP地址冲突
  1. NAT模式:(网络地址转换)
  • 虚拟系统可以和外部通信,但是不是一个网段的IP
  1. 主机模式:(独立系统)

六 Linux目录结构

Linux中,一切皆文件

  1. /bin 这个目录存放着常用的指令
  2. /sbin 存放着系统管理员使用的系统管理程序
  3. /home 存放着普通用户的主目录
  4. /root 系统管理员的主目录
  5. /lib 系统需要的动态链接库
  6. /lost+found 非法关机后存放的文件地
  7. /etc 配置文件和子目录 e.g. 数据库my.conf
  8. /usr 应用程序存放的地方,相当于Win中的Program Files目录
  9. /boot Linux中启动所需的核心文件
  10. /tmp 临时文件存放处
  11. /dev 类似于windows的设备管理器,所有硬件用文件的形式储存
  12. /media 识别设备,进行管理
  13. /mnt 外部存储挂载在系统中
  14. /opt 主机额外安装软件所存放的目录,类似于安装包的地方
  15. /usr/local 软件安装好了的地方
  16. /var 存放不断扩充的东西,例如:log日志

七 远程登录

  1. xshell 连接服务器

  2. xftp 传输文件

Lesson 2

一 vi与vim

  1. vi是Linux下的文本编辑器;vim是vi的增强版
  2. 进入vim编辑器后,按i来进入编辑模式
  3. 输入esc退出编辑模式,再输入进入命令行模式
  4. wq保存并退出;q 退出;q! 强制退出

image-20220327130031937

  1. 快捷键

    一般模式:

    • yy 拷贝当前行 5yy 向下五行,并黏贴(键入p)
    • dd 删除当前行 5dd 删除向下五行
    • G 去到行末 gg去到行首
    • u 撤销
    • 20 shift g 光标移动到20行

    命令行:

    • /关键词 查找 输入n 查找下一个
    • :set nu:set nonu设置(取消)文件行号

二 关机和重启

image-20220327130101501

三 用户登录和注销

  1. su - root 进入管理员模式
  2. logout 注销用户

四 用户管理

pwd 显示当前所在的目录

  1. 添加用户 :

    useradd 用户名 创建一个/home/用户名的目录

    useradd -d 指定目录 自定义目录下创建新用户

  2. 指定/修改密码:

    passwd 用户名

  3. 删除用户:

    userdel 用户名 不删除家目录

    userdel -r 用户名 删除用户和家目录

  4. 查询用户信息:

    id 用户名

  5. 切换用户:su - 用户名

    image-20220327130121623

  6. 查看当前用户:who am i显示第一次登录时用户的信息

  7. 用户组:方便权限管理

​ 新增组:groupadd xxxx

​ 删除组:groupdel xxxx

加入用户时,若没有指定组,则会默认把用户加入以其名字命名的组

​ 增加用户时直接加上组:1. group xxxx

​ 2. useradd -g 用户组 用户名

​ 修改用户的组:usermod -g 用户组 用户名

image-20220327130127679

Lesson 3

一 运行级别

image-20220327130132786

image-20220327130137612

systemctl xxx 是设置开机时的

init 4 只是设置一次

二 找回root密码

  1. 首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面。如图:

    image-20220327130144077

  2. 进入编辑界面,使用键盘上的上下键把光标往下移动,找到以“Linux16”开头内容所在的行数”,在行的最后面输入:init=/bin/sh。如图:

  3. 接着,输入完成后,直接按快捷键:Ctrl+x 进入单用户模式

  4. 接着,在光标闪烁的位置中输入:mount -o remount,rw /(注意:各个单词间有空格),完成后按键盘的回车键(Enter)。如图:

  1. 在新的一行最后面输入:passwd, 完成后按键盘的回车键(Enter)。输入密码,然后再次确认密码即可,密码修改成功后,会显示passwd…..的样式,说明密码修改成功

    image-20220327130226416

  2. 接着,在鼠标闪烁的位置中(最后一行中)输入:touch /.autorelabel(注意:touch与 /后面有一个空格),完成后按键盘的回车键(Enter)

  3. 继续在光标闪烁的位置中,输入:exec /sbin/init(注意:exec与 /后面有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(提示:这个过程时间可能有点长,耐心等待),完成后,系统会自动重启, 新的密码生效

image-20220327130233659

三 帮助指令

  1. Linux下隐藏文件是以 . 开头的
  2. man ls
  3. ls -l 以列表的形式显示
  4. 选项可以组合使用: ls -l -a or ls -la /root
  5. help cd

四 文件管理

  1. pwd 显示当前目录的绝对路径

  2. image-20220327130238411

  3. 相对路径

    cd /home/tom 想回到/root目录下: cd ../../root

    ../ 先回到home目录下,再../回到/ 根目录,然后再去root目录下

  4. mkdir /home/dog

    mkdir -p /home/animal/tiger 创建多级目录

    image-20220327130242859

    1. 移除文件夹目录

      rmdir -rf 强制删除

      image-20220327130246858

    2. touch hello.txt 创建一个空文件

    3. cp [选项] source(拷贝对象) dest(拷贝到的地址) -r 递归复制整个文件夹

      \cp 强制覆盖不提示的复制 e.g. \cp -r xxxx

    4. rm -r 递归删除整个文件夹 rm -rf xxx 强制删除整个文件夹不提示

      rm -f 强制删除不提示

    5. mv oldNameFile newNameFile (两个文件在一个目录下,即为重命名)

      mv /temp/xxx /targetFolder (移动文件)

      也可以移动并且重命名

      移动整个目录:mv /folder /folder

    6. cat查看文件只能查看不能修改

    cat -n file 显示行号

    1. 管道指令 |

      cat -n /etc/profile | more 执行查看文件后按回车多一行,按空格多一页

    2. more 指令:

      image-20220327130253966

    3. less指令:

      image-20220327130259446

      e.g. less /opt/xxx

    4. echo指令:输出内容到控制台

      输出环境变量:echo $PATH echo $HOSTNAME

      输出内容:echo hello,world!

    5. head -n 5(查看文件头五行内容)

      head filename(查看文件头10行内容)

    6. image-20220327130302948

      tail -f /home/xxx 实时监控文档所有更新 ctrl+C退出

    7. 输出重定向:

      image-20220327130306087

      其中> 覆盖写;>> 追加写;

      e.g. ls -l /home > /home/info.txt

      cal >> /home/mycal (cal 显示当前日历信息)

    8. ln指令:类似于快捷方式

      image-20220327130309387

      e.g. ln -s /root /home/myroot

      rm /home/myroot

    9. history(看所有的) history 10(最近的十条)

      !5 执行曾经执行过的第五条指令

Lesson 4

一 时间日期指令

  1. date 指令:来设置日期

    date -s “2020-11-03 20:02:18”

  2. cal指令

    cal 2020(显示一整年的日历)

二 搜索查找

  1. find指令:

image-20220327130318017

  1. ls -lh 可以把存储容量变成直观的

  2. locate指令:快速定位文件的路径

    image-20220327130322807

  3. which指令,可以查看某个指令在哪个目录下

    which reboot

  4. grep 过滤查找:

    方法一:cat /home/hello.txt | grep -i -n "yes"

    方法二:grep -n "yes" /home/hello.txt

    image-20220327130327059

三 压缩和解压

  1. gzip压缩、gunzip解压指令:

    gzip /home/hello.txt

    gunzip /home/hello.txt.gz

  2. zip压缩文件或者目录、unzip解压:

    zip -r 压缩目录

    unzip -d /xxx指定解压后文件的存放目录

    e.g. zip -r myhome.zip /home/ 将home目录及其包含的文件和子文件夹都压缩

    unzip -d /opt/tmp /home/myhome.zip

  3. tar指令:打包指令,打包后是xxx.tar.gz的文件

    image-20220327130330845

    image-20220327130341008

    -z 是通过gzip进行压缩和解压

    • tar -zcvf pc.tar.gz pig.txt cat.txt

    • tar -zcvf myhome.tar.gz /home/

    • tar -zxvf pc.tar.gz

    • tar -zxvf /home/myhome.tar.gz -C /opt/tmp其中-C表示解压到指定目录

Lesson 5

一 组管理和权限管理

  1. 在Linux中的每个用户必须属于一个组

    在Linux中每个文件有所有者、所在组、其它组的概念

  2. 查看文件的所有者:ls -ahl

  3. 改变文件的所有者:chown 用户名 文件名 e.g. chown tom apple.txt

  4. 修改文件所在的组:chgrp 组名 文件名

  5. 其他组:

    改变用户所在的组:usermod -g 新组名 用户名

    改变该用户登录的初始目录:usermod -d 目录名 用户名用户需要有权限进入新目录

    e.g. usermod -g wudang zwj or usermod -d /home/haha zwj

二 权限基本介绍

  1. image-20220327130345438

    第0位的-代表普通文件

    [r] read 可读 4

    [w] write 可修改 但不一定可以删除该文件,除非对该文件所在的目录有写的权限 2

    [x] execute 可被执行 1

  2. image-20220327130349625

  3. 修改权限

    image-20220327130353301

    r=4,w=2,x=1 rwx=7

    chmod u=rwx,g=rx.0=x 文件 等价于 chmod 751 文件

  4. 修改文件所有者 chown

    chown newowner 文件/目录 改变所有者

    e.g.

    chown tom /home/abc.txt

    chown tom:groupname /home/abc.txt

    chown -R tom /home/kkk 一定要带上所有者tom

    image-20220327130358213

  5. 修改所在组

    chgrp newgroup 文件/目录

三 文件夹的rwx的讨论

  1. 对文件夹有执行权限可以进入该文件夹,有了读权限可以读取,写的权限是删除,创建的权限
  2. x:表示可以进到该目录 r: 表示可以ls,来读取目录 w: 表示可以删除创建
  3. linux下一切皆文件

Lession 6

一 crond 任务调度

  1. crontab 进行定时任务的设置

    image-20220327130402966

  2. crontab -e 编辑定时任务

    crontab -l 查询任务

    crontab -r 删除当前用户所有任务

  3. image-20220327130407556

    e.g. */1 * * * * ls -l /etc/ >/tmp/to.txt

  4. image-20220327130411455

  5. image-20220327130414429

  6. service crond restart 重启

二 at 任务调度机制

  1. image-20220327130417869

  2. ps -ef | grep atd 可以检测atd 是否在运行

  3. image-20220327130422468

  4. at 的时间定义

    image-20220327130426288

  5. 案例1:at 5pm + 2 days 回车

    /bin/ls /home

    输入两次Ctrl+D

  6. 案例2: at 5pm tomorrow

  7. 案例3: at now + 2 minutes

  8. atq查看系统中没有执行的工作任务

  9. atrm删除已经设置的任务

  10. 相关指令选项

    image-20220327130430138

三 磁盘分区机制

  1. 分区与文件系统

    image-20220327130434267

  2. 挂载mount

  3. SCSI硬盘标识为”sdx~“

    image-20220327130437881

  4. lsblk -f 更加详细的信息list block

    image-20220327130440949

    FSTYPE: 文件类型

    UUID:每个分区的唯一标识符40位

    MOUNTPOINT:挂载点

  5. 新增硬盘的分区操作:

    fdisk /dev/sdb
    n
    p
    1
    w
    
  6. 格式化磁盘:拥有了UUID

    mkfs -t ext4 /dev/sdb1
    
  7. 将分区与文件系统挂载:添加了挂载点 但重启后会失效

    mkdir newdisk
    mount /dev/sdb1 /newdisk
    
  8. 卸载文件系统和分区:

    umount /dew/sdb1
    
  9. 永久挂载:修改/etc/fstab

    添加完成后执行mount -a 即刻生效

    image-20220327130446242

  10. 磁盘情况查询:

    df -h查询系统整体占用情况

image-20220327130449477

查询指定目录的磁盘占用情况:

du -ha --max-depth=1 /opt a 含文件 h 带计量单位

du -hac --max-depth=1 /opt c 汇总

  1. 统计文件夹下文件的个数

    ls -l /opt | grep "^-"| wc -l

    wc=wordcount 统计

  2. 统计/opt 文件夹下文件的个数,包括子文件夹里的

    ls -l**R** /opt | grep "^-"| wc -l 其中 -R递归的显示所以文件

  3. 以树状显示目录结构

    tree /目录

四 网络部分

  1. NAT网络原理

    image-20220327130453455

  2. 网络配置指令

    ifconfig ping

  3. 网络环境配置

    image-20220327130457478

  4. 设置主机名和hosts映射

    image-20220327130501275

五 进程管理

  1. 基本介绍

    程序在内存中运行的情况可以变为进程

    每一个执行的程序都是一个进程

  2. 显示系统执行的进程:process status

    ps -a 显示所有

    ps -u 以用户的格式显示

    ps -x 显示后台进程运行的参数

    ps -e 显示所有进程

    ps -f 全格式

  3. image-20220327130506775

    USER:进程执行用户

    PID:进程号

    MEN:物理内存占用百分百

    VSZ: 占用虚拟内存

    RSS:占用物理内存

    TTY:终端信息

    STAT:当前进程运行状态 R:休眠 R:正在运行

    START:开始时间

    TIME:占用的CPU时间

    COMMAND:进程名,启用指令

  4. image-20220327130510970

父进程,子进程

  1. 终止进程

killall abc

kill -9 进程号 强制关闭进程

kill 对应的进程号

  1. 查看进程树pstree

    pstree -p 显示PID

    pstree -u 显示进程的所属用户

  2. 服务管理:本质就是进程,但是运行在后台,监听某个端口,来等待其他程序的请求,守护进程

  3. sshd通常为22端口;mysqld是3306端口

    image-20220327130515150

  4. service 服务名 [start | stop | restart | reload | status]

  5. CentOS7.0 以后很多服务不再用service,而用systemctl

  6. service指令管理的服务在/etc/init.d查看

    image-20220327130518668

  7. setup可以查看所以服务

  8. 服务的运行级别:

    image-20220327130521729

  9. systemctl set-default multi-user.target设置开机的运行级别为3

  10. chkconfig指令:

    • 可以给服务的各个运行级别设置自启动

    • 其管理的服务在/etc/init.d查看

    • CentOS7.0以后,很多使用systemctl 管理

    chkconfig --list

    chkconfig --level 3 network off关闭运行级别3 network 自启动

  11. systemctl 管理指令

    systemctl list-unit-files 查看服务开机启动状态

    systemctl enable/disable 服务名默认设置3和5级别,设置后永久生效

    image-20220327130527092

    设置完成后,重启就失效

    image-20220327130529699

  12. firewall 指令

    image-20220327130533628

    firewall-cmd --permanent --add-port=111/tcp

    firewall-cmd --reload 每次设置好后需要reload才能生效

  13. 动态监控 (ps是静态的)

    top -d 秒数 每隔x秒更新

    top -i top不显示闲置和僵死的进程

    top -p 指定监控某个进程ID

    image-20220327130546789

  14. image-20220327130551503

    top以后输入P 按CPU使用率排序

    top以后输入u 再输入用户名 进行监控

    top以后输入k 输入进程号 ,再输入signal 9 强制关闭进程

  15. 监控网络状态

    netstat -an 按一定顺序排列输出

    netstat -p 显示哪个进程在调用

六 rpm和yum包管理

  1. rpm -qa | grep xx

    image-20220327130554911

  2. rpm -e 包名 erase 卸载

    rpm -e --nodeps foo 强制删除

  3. 安装

    rpm -ivh 路径

    i=install v=verbose 提示 h=hash 进度条

  4. image-20220327130558280

    yum list|grep xxx 查询yum服务器有什么可以安装的软件

    yum install xxx来安装

补充

一 tmux ——Terminal MultipleXer 终端复用器

  1. 启动tmux

    [root@Outis ~]# tmux new -s NewName
    

    -s 表示session,启动一个全新的会话,名字可以自定义

  2. 在窗口中切换

    • 第一步:按 Ctrl-B 组合键,然后松开
    • 第二步:按相应的数字键
  3. 退出会话

    登到某一个会话后,依次按键ctrl-b + d,这样就会退出该会话,但不会关闭会话。 如果直接ctrl + d,就会在退出会话的通话也关闭了该会话!

    [root@Outis ~]# tmux new -s NewName
    [detached]
    
  4. 回到原有会话

    [root@Outis ~]# tmux ls
    

    以上操作完成了查看现在正在运行中的程序

    [root@Outis ~]# tmux a -t NewName
    

    回到原有的NewName会话中

  5. 销毁会话

    [root@Outis ~]# tmux kill-session -t name
    
  6. 重命名会话

    [root@Outis ~]# tmux rename -t name newname
    
Outis Yang
Outis Yang
2024 Undergraduate in Cyberspace Security

My research interests include Internet of Vehicles(IoV), Penetration Testing and Security research.