web analytics
SCAU 华南农业大学Linux 期末复习大纲

第一章

Linux的起源、历史、特点、定义

  1. 起源

    ​ Linus Torvalds 芬兰赫尔辛基大学的一位计算机系的学生在大学期间,他接触到了学校的Unix系统,但是当时的Unix系统仅为一台主机,且对应了多个终端(多人共享) ,使用时存在操作等待时间很长等一些不爽的问题因此他就萌生了自己开发一个Unix的想法。他就把Minix安装到了他的I386个人计算机上作为学习和研究的对象Linus阅读了Minix系统的源代码,从Minix系统中学到了很多重要的系统核心程序设计理念和设计思想,从而逐步开始了Linux系统雏形的设计和开发

  2. 特点

    • 开放性(遵循标准)

    • 多用户

    • 多任务

    • 良好的用户界面

    • 设备独立性(把外部设备当作文件处理)

    • 丰富的网络功能

    • 可靠的系统安全

    • 良好的可移植性

  3. 定义

    1. 是一个类UNIX内核的可以自由发布的实现版本,是一个操作系统的底层核心(内核)
    2. Linux => 内核Linux系统 => 内核 + 工具 + 配套软件 特点开放性(遵循标准)多用户多任务良好的用户界面设备独立性(把外部设备当作文件处理)丰富的网络功能可靠的系统安全良好的可移植性

GUN GPL

  1. GNU General Public License(自由文件许可)
  2. 术语 copyleft(是copyright[版权]的反话,防止有人给自由软件的使用加上限制)
  3. GPL核心思想:
    1. 保证任何人有共享、修改、发布自由软件的
    2. 自由自由软件的衍生作品必须以GPL为重新发布的许可证
    3. 允许公司销售自由软件(硬件/服务),提供源代码

常见的发行版本

  1. 桌面版Ubuntu 、Fedora、SuSE、深度Linux…
  2. 服务器版CentOS、Debian、Ubuntu Server…
  3. 折腾版Arch Linux 、Gentoo…
  4. 网络攻防版Kali Linux …

商业、共享、自由和免费软件的区别和联系

  1. 自由软件
    • 源代码必须公开
    • 任何人都可以自由传播、下载、使用、改写、重新发布
    • 自由软件不一定免费
  2. 免费软件
    • 不需付钱,但免费软件不一定提供源代码。
    • 只有当自由软件免费的或者免费软件提供源代码的时候才是一样的。
  3. 商业软件
    • 由开发者出售拷贝并提供技术服务
    • 用户只有使用权
    • 不提供源代码
  4. 共享软件
    • 开发者提供软件试用程序拷贝授权,升级和技术服务
    • 用户在试用该程序拷贝一段时间之后,必须向开发者交纳使用费用
    • 不提供源代码

第二章

Linux 内核版本号

  1. 由Linus等人制定和维护,全球统一

  2. 内核版本号格式:x.y.zz

    1. x为主版本号

    2. y为次版本号

    3. zz为次次版本号

  3. 稳定版

​ 内核的特性已经固定,代码运行稳定可靠,不再增加新的特性,要改进也只是修改代码中的错误。

  1. 2.6及以下版本(x.y.zz)

    • 次版本号=偶数 => 稳定版本
    • 次版本号=奇数 =>测试版
  2. 3.0开始

    次版本号不再表示一个内核是稳定版本还是测试版本,所有发布出来的正式版本都是稳定版本

Linux 目录结构

  • /bin:常用系統程序目录
  • /boot:开机设定目录,也是摆放核心 vmlinuz 的地方
  • /dev:摆放系统设备装置文件的目录
  • /etc:系统配置文件,尤其 passwd, shadow
  • /etc/rc.d/init.d:摆放系统开机的時候载入服务的脚本
  • /home:系统使用者的目录
  • /lib:Linux 执行或编译程序函数库目录
  • /mnt:软驱与光驱接入挂载的地方
  • /proc:系统核心与执行程序的一些信息
  • /root:系统管理员的目录
  • /usr/bin, /bin:一般执行文件摆放的地方
  • /usr/sbin, /sbin:系统管理员常用指令集
  • /var:摆放系统日志文件的地方
  • /lost+fount:摆放系统不正常产生错误时遗失的片段

Linux系统结构图

image-20230525203109217

Linux系统结构 主要组件

image-20230525203207586

关机、重启命令

不允许普通用户关机与重启

关机

  1. shutdown -h now
  2. init 0
  3. halt -p
  4. poweroff -p

重启

  1. shutdown -r now
  2. init 6
  3. reboot

指令详细

  • shutdown 关机

    选项 英文 作用 例子
    -t time 设置关机前的等待时间,单位为秒 shutdown -t 3600
    -k kill 发送关闭信号,但不实际关机,用于测试 shutdown -k
    -r reboot 关机后重新启动系统 shutdown -r
    -h halt 关机后关闭系统电源 shutdown -h
    -n no-wait 立即关机,不等待用户程序关闭 shutdown -n
    -c cancel 取消已经设置的关机任务 shutdown -c
    -t message 设置关机提示信息 shutdown -t 3600 -m "系统将在1小时后关机,请保存好您的工作"
  • init

    选项 英文 作用 例子
    0 halt 关闭系统 init 0
    1 single 进入单用户模式 init 1
    2 multi-user 进入多用户模式 init 2
    3 multi-user 进入多用户模式 init 3
    4 multi-user 进入多用户模式 init 4
    5 graphical 进入图形界面模式 init 5
    6 reboot 重启系统 init 6
  • halt 关机

    选项 英文 作用 例子
    -p poweroff 关闭系统并关闭电源 halt -p
    -f force 强制关闭系统,不等待进程结束 halt -f
    -i init 关闭系统并执行指定的 init 级别 halt -i 0
    -w wtmp-only 只记录 wtmp 日志文件,不关闭系统 halt -w
    -d no-wtmp 不记录 wtmp 日志文件,直接关闭系统 halt -d
  • reboot

    • 作用:重新启动计算机。若系统的runlevel 为 0或6 则重新开机,否则以shutdown 指令(加上一参数)来取代

    • 选项

    选项 英文 作用 例子
    -d debug 输出调试信息 reboot -d
    -f force 强制重启,不等待进程结束 不呼叫shutdown -r reboot -f
    -i init 重启并执行指定的 init 级别 reboot -i 0
    -n no-sync 不将文件系统同步到磁盘 reboot -n
    -w wtmp-only 只记录 wtmp 日志文件,不重启系统 reboot -w

说明文档查看

man *** 例子:man ls

第三章

Linux交互方式

image-20230525210613311

Shell的作用、种类、默认Shell

作用

  1. Shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令,返回执行结果
  2. 在Linux中可存在多种Shell,一个用户同一时刻只能使用一个shell
  3. 实现自动化运维是学习Shell的重要原因
  4. 查看当前系统支持的Shell列表 cat /etc/shells
  5. 查看当前用户使用的Shell版本 echo $SHELL

种类

名字 介绍
ash 是贝尔实验室开发的Shell,bsh是对ash的符号链接
bash 是GNU的Bourne Again Shell,是GNU操作系统上默认的Shell。sh以及bash2都是对它的符号链接
tcsh 是Berkeley UNIX C Shell。csh是对它的符号链接
ksh Korn Shell的语法与Bourne Shell相同,同时具备了C Shell的易用特点
zsh Korn Shell 的一个增强版本,具备bash Shell的许多特点

默认的Shell

  • GNU工具中的使用的是:bash
  • 作为/bin/sh被默认安装

Shell的功能

  1. Shell提示符

    • # root用户(超级管理员)的命令提示符
    • $ 非root用户的命令提示符
  2. 命令自动补齐(tab键)

  3. 历史记录查看(键盘上下键)

    • ctrl + p 前一条指令
    • ctrl + n 后一条指令
    • ctrl + r 反向搜索命令历史记录
  4. 输入输出重定向(>, >>, <)

    • < 文件输入重定向 wc -l < list.txt
    • > 文件输出重定向 覆盖原有内容. ls > list.txt
    • >> 文件追加重定向 文件末尾添加 echo abc >> list.txt
  5. 常用的快捷键

    • ctrl + a ahead 移动光标到行首
    • ctrl + e end 移动光标到行尾
    • ctrl + d 删除光标所在字符
    • ctrl + u剪切到行首
    • ctrl + k 剪切到行尾
    • ctrl + y 粘贴剪切
  6. 管道(|)

各种指令

  1. clear 清空屏幕

  2. echo 打印内容 格式: echo [-n] 字符串

  3. ls

    • 格式:ls [选项] <路径>

    • 选项

      选项 英文 作用 例子
      -a all 显示所有文件,包括隐藏文件 ls -a
      -l long 以长格式显示文件信息,包括文件类型、权限、所有者、大小、时间等 ls -l
      -i inode 显示文件的 inode 号 ls -i
      -t time 按照修改时间排序,最新修改的文件在最前面 ls -lt
      -S size 按照文件大小排序,文件大小从大到小排列 ls -lS
      -d directory 显示目录本身的信息,而不是目录下的文件信息 ls -ld
      -R recursive 递归地显示目录下的所有文件和子目录 ls -R
  4. cd 切换目录 PS: cd ~ 回到目录

  5. pwd 显示当前路径

  6. mkdir 创建目录

    • 格式: mkdir [选项] <目录>
    • 选项:-p 自动创建不存在的中间目录 mkdir -p dir3/dir4
  7. rmdir 删除目录。只能删除非空目录

    • 格式:rmdir [选项] <目录>
    • 选项:-p 删除路径中的空目录 rmdir -p dir4/dir5
  8. rm 删除文件或目录

    • 格式: rm [选项] <路径>

    • 选项

      选项 英文 作用 例子
      -r recursive 递归地删除目录和子目录 rm -r dir1
      -f force 强制删除,即使文件或目录是只读的或不存在也不提示用户 rm -f file1
  9. touch 用于改变文件的时间记录或创建一个空文件

    • 格式:touch [选项] <文件>

    • 选项

      选项 英文 作用 例子
      -a access time 只修改文件的访问时间 touch -a file1
      -m modification time 只修改文件的修改时间 touch -m file1
      -r reference time 使用指定文件的时间戳来更新目标文件的时间戳 touch -r file1 file2
      -d date time 使用指定时间来更新目标文件的时间戳 touch -d "2022-01-01 12:00:00" file1
  10. cp文件或目录的复制

    • 格式:cp [选项] 原路径 目标路径

    • 选项

      选项 英文 作用 例子
      -a archive 递归地复制目录,并保留文件属性和链接 cp -a dir1 dir2
      -f force 强制复制,即使目标文件已经存在也不提示用户 cp -f file1 file2
      -p preserve 保留文件属性,包括文件的权限、所有者、时间戳等 cp -p file1 file2
      -r recursive 递归地复制目录和子目录 cp -r dir1 dir2
  11. mv 移动文件或目录

    • 使用格式:mv [选项] 原路径 目标路径

    • 选项

      选项 英文 作用 例子
      -i interactive 交互式操作,提示用户确认 mv -i file1 file2
      -f force 强制覆盖目标文件,不提示用户确认 mv -f file1 file2
      -n no-clobber 不覆盖已存在的目标文件,保留原文件 mv -n file1 file2
  12. cat 连接文件并打印到标准输出设备上

    • 使用格式:cat [选项] [文件]

    • 选项

      选项 英文 作用 例子
      -n number 显示每行的行号 cat -n file.txt
      -b number-nonbl 仅显示非空白行的行号 cat -b file.txt
  13. more分页显示文件内容

    • 使用格式:more [选项] [文件]

    • 注意⚠️

      • 使用 more 命令可以分屏显示文件的内容,可以根据需要使用不同的选项来控制输出的格式和内容。需要注意的是,more 命令只能向下滚动,不能向上滚动
      • 基本操作: q:退出 空格:下一页 回车: 下一行
    • 选项

      选项 英文 作用 例子
      -d directory 显示每个文件的名称 more -d file1 file2
      -c clear-screen 在每个文件之前清屏 more -c file.txt
      -p no-discard 禁止滚动时丢弃超过一屏的内容 more -p file.txt
      -s squeeze 连续空白行只显示一行 more -s file.txt
      -u underline 将每行的第一个字符下划线标记 more -u file.txt
  14. less 分页显示文件内容

    • 使用格式:less [选项] [文件]

    • 注意:

      • 使用 less 命令可以分屏显示文件的内容,可以根据需要使用不同的选项来控制输出的格式和内容。需要注意的是,less 命令可以向上和向下滚动,支持搜索和跳转等功能。
      • 基本操作:q:退出,空格:下一页,回车:下一行。
    • 选项

      选项 英文 作用 例子
      -N line-numbers 显示每行的行号 less -N file.txt
      -S chop-long-lines 不折行显示长行 less -S file.txt
      -i ignore-case 忽略大小写 less -i file.txt
      -s squeeze-blank-lines 连续空白行只显示一行 less -s file.txt
      -F quit-if-one-screen 只有一页时自动退出 less -F file.txt
  15. head 显示文件的开头的内容。在默认情况下显示文件的前10行内容

    • 使用格式:head [选项] 文件

    • 选项

      选项 英文 作用 例子
      -q quiet 不显示文件名 head -q file.txt
      -v verbose 显示文件名 head -v file.txt
      -c bytes 显示指定字节数 head -c 100 file.txt
      -n lines 显示指定行数 head -n 10 file.txt
  16. tail 显示文件的结尾的内容。在默认情况下显示文件的最后10行内容

    • 使用格式:tail [选项] 文件

    • 选项

      选项 英文 作用 例子
      -f follow 实时显示文件末尾 tail -f file.txt
      -c bytes 显示指定字节数 tail -c 100 file.txt
      -n lines 显示指定行数 tail -n 10 file.txt
      -v verbose 显示文件名 tail -v file.txt
      -q quiet 不显示文件名 tail -q file.txt

Linux文件类型

在 Linux 中,文件类型可以通过 ls 命令的输出来判断。ls 命令的输出中,第一个字符表示文件类型,常见的文件类型包括:

文件类型 英文名称 中文名称
- regular file 普通文件
d directory file 目录文件
l symbolic link file 符号链接文件
c character device file 字符设备文件
b block device file 块设备文件
p named pipe file 命名管道文件
s socket file 套接字文件

相对路径与绝对路径

在 Linux 中,路径可以分为相对路径和绝对路径两种类型。

  1. 相对路径是相对于当前工作目录的路径,以当前工作目录为起点,通过一定的路径描述方式来表示目标文件或目录的路径。相对路径的表示方式有两种:

    • 相对于当前目录的路径,以 . 开头,例如 ./file.txt 表示当前目录下的 file.txt 文件。

    • 相对于上级目录的路径,以 .. 开头,例如 ../dir/file.txt 表示上级目录下的 dir 目录中的 file.txt 文件。

  2. 绝对路径是从根目录开始的完整路径,以 / 开头,例如 /home/user/file.txt 表示根目录下的 home 目录中的 user 目录中的 file.txt 文件。

用户主目录和特殊目录

  1. 用户目录

    在 Linux 中,每个用户都有一个主目录,用于存储该用户的文件和配置信息。用户主目录的路径通常是 /home/用户名,其中 用户名 是当前用户的用户名。

  2. 特殊目录

    除了用户主目录之外,Linux 还有一些特殊目录,用于存储系统和用户的文件和配置信息。常见的特殊目录包括:

    • /:根目录,整个文件系统的起点。
    • /bin:存放系统命令和二进制可执行文件。
    • /boot:存放启动加载程序和内核文件。
    • /dev:存放设备文件。
    • /etc:存放系统配置文件。
    • /lib:存放系统库文件。
    • /media:存放可移动设备挂载点。
    • /mnt:存放临时挂载点。
    • /opt:存放第三方软件安装目录。
    • /proc:存放内存中的进程信息和系统信息。
    • /root:超级用户 root 的主目录。
    • /run:存放系统运行时的临时文件。
    • /sbin:存放系统管理员命令和二进制可执行文件。
    • /srv:存放服务相关文件。
    • /sys:存放内核相关文件。
    • /tmp:存放临时文件。
    • /usr:存放用户程序和文件。
    • /var:存放系统日志和变化的文件。

第四章

用户类型

在 Linux 中,用户可以分为三种类型:超级用户、系统用户和普通用户。

  • 超级用户是系统管理员,拥有最高的权限,其用户名为 root,主目录为 /root
  • 系统用户是为了满足系统服务或应用程序的需要而创建的用户,其用户名通常以 ___ 开头,主目录通常为 //var。默认情况下,这些特殊用户是无法登录的,如果给这些用户授权登陆口令后,就可以使用这些用户登录系统,/sbin/nologin 无法登陆shell
  • 普通用户是系统中的普通用户,拥有较低的权限,其用户名和主目录由系统管理员创建。受限的权限,普通用户没有对系统的完全控制权,而且用户之间私人的资源是相互隔离的

用户信息文件

在 Linux 中,用户信息文件 /etc/passwd 存储了系统中所有用户的基本信息,包括用户名、用户 ID、主目录、默认 shell 等。

  • 每一行存储一个用户的账号信息

  • 用户名:加密密码:用户ID:用户组ID:用户信息:用户主目录:登录Shell

  • 超级用户root的UID是0

  • 系统用户的UID在1000以内

  • 普通用户的UID从1000开始往上编号

口令文件

在 Linux 中,口令文件 /etc/shadow 存储了系统中所有用户的加密口令和口令过期时间等信息,用于保护用户的账户安全

  • /etc/shadow 文件存储了系统中所有用户的加密口令和相关信息。
  • /etc/shadow 文件的每一行表示一个用户的加密口令和相关信息,包括用户名、加密口令、最后一次修改时间、最小口令更改时间间隔、口令有效期、口令过期前警告时间、口令过期后宽限时间、账户失效时间和保留字段。

⚠需要注意的是,/etc/shadow 文件中的用户信息只能被超级用户读取和修改,普通用户无法访问该文件。

组信息文件

在 Linux 中,组信息文件 /etc/group 存储了系统中所有组的基本信息,包括组名、组 ID、组成员等。

  1. /etc/group 文件的每一行表示一个组的信息,格式如下:组名:口令:组 ID:组成员

    其中,各字段的含义如下:

    • 组名:组的名称。

    • 口令:组的口令,通常为 x,表示加密口令存储在 /etc/gshadow 文件中。

    • 组 ID:组的数字标识符,通常为一个非负整数。

    • 组成员:属于该组的用户列表,以逗号分隔。

  2. 默认情况下,创建用户的时候,系统会自动创建一个同名的组,作为该用户的主组。

  3. 需要注意的是,/etc/group 文件中的组信息可以被普通用户读取,但是不能被修改。如果需要修改组信息,需要使用 groupmod 命令或其他相关命令。

常用指令

  1. useradd 新增用户

    • 使用格式:useradd [选项] 用户名

    • 常用选项:

      选项 英文 作用 例子
      -u uid 指定新用户的用户 ID useradd -u 1001 testuser
      -g gid 指定新用户所属的主组 useradd -g users testuser
      -d home-dir 指定新用户的主目录 useradd -d /home/testuser testuser
      -s shell 指定新用户的默认 shell 默认为/bin/sh useradd -s /bin/bash testuser
      -c comment 指定新用户的注释性描述 useradd -c "Test User" testuser
      -p password 指定新用户的加密口令 useradd -p password123 testuser
      -G GroupList 一个用户可以属于一个组,也可以属于多个组。 useradd -G user1 user2
  2. passwd 设置密码

  3. usermod 修改用户属性

    • 使用格式:usermod [选项] 用户名

    • 常用选项:

      选项 英文 作用 例子
      -d home-dir 修改用户的主目录 usermod -d /home/newdir testuser
      -s shell 修改用户的默认 shell usermod -s /bin/zsh testuser
      -g group 修改用户的主组 usermod -g newgroup testuser
      -G supplementary 修改用户的附加组 usermod -G group1,group2 testuser
      -u uid 修改用户的用户 ID usermod -u 1001 testuser
  4. userdel 删除用户 格式 userdel [-r] 用户名 -r 加上后删除与用户相关的文件和目录

  5. groupadd 增加用户组 格式 groupadd [-g] 组名 -g 加上后可以设置GID

  6. groupdel 删除用户组 格式 groupdel 组名

  7. chown 改变指定目录或文件的所属用户、所属组

    • 格式:chown [-R] 用户名[:组名] 路径 -R 递归更改目录里面所有文件目录的组
    • 例子:chown wilson a.txt 或者 chown wilson:wilson a.txt
  8. chgrp 改变指定目录或文件的所属组 格式 chgrp [-R] 组名 路径 -R 递归更改目录里面所有文件目录的组

  9. In 创建文件的快捷方式|创建链接文件

    • 使用格式:ln [选项] 源文件 目标文件

    • 软链接和硬链接

      • 硬链接: 给文件一个副本(别名),同时建立两者之间的连接关系,修改其中一个,与其连接的文件同时被修改,如果删除其中一个,其余的文件不受影响。磁盘上只有一份数据。硬链接是存在同一个文件系统中
      • 软链接:软链接的方式则是产生一个特殊的文件,该文件的内容是指向另一个文件的位置。它只是一个快捷方式,删除了源文件,这个连接文件就没用了。软链接可以跨越不同的文件系统
    • 常用选项:

      选项 英文 作用 例子
      -s symbolic 创建符号链接 ln -s /path/to/source /path/to/target
      -f force 强制创建链接,覆盖已存在的文件 ln -sf /path/to/source /path/to/target
  10. tar 打包和压缩文件

    • 使用格式:tar [选项] 压缩文件名 路径

    • 常用选项:

      选项 英文 作用 例子
      -c create 创建新的归档文件 tar -cvf archive.tar file1 file2
      -x extract 从归档文件中提取文件 tar -xvf archive.tar
      -z gzip 使用 gzip 压缩/解压缩归档文件 tar -czvf archive.tar.gz file1 file2
      -j bzip2 使用 bzip2 压缩/解压缩归档文件 tar -cjvf archive.tar.bz2 file1 file2
      -f file 指定归档文件名 tar -cvf archive.tar file1 file2
      -v verbose 显示详细信息 tar -cvf archive.tar file1 file2
      -t list 列出归档文件中的文件列表 tar -tvf archive.tar
      -C directory 指定解压缩目录 tar -xvf archive.tar -C /path/to/target
    • 常用解压压缩

      • tar zcvf dir1.tar.gz dir1 压缩
      • tar zxvf dir1.tar.gz解压
  11. gzip 解压与压缩文件

    • 使用格式:gzip [选项] 文件名

    • 常用选项:

      选项 英文 作用 例子
      -d decompress 解压缩文件 gzip -d file.gz
      -c stdout 将压缩后的文件输出到标准输出 gzip -c file > file.gz
      -f force 强制压缩,覆盖已存在的文件 gzip -f file
      -r recursive 递归压缩目录下的所有文件 gzip -r /path/to/dir
    • 需要注意的是,gzip 命令只能压缩单个文件,无法压缩目录。使用 -d 选项可以解压缩文件,使用 -c 选项可以将压缩后的文件输出到标准输出。使用 -f 选项可以强制压缩,覆盖已存在的文件。使用 -r 选项可以递归压缩目录下的所有文件。

  12. unzip 解压文件

    • 使用格式:unzip [选项] 文件名

    • 常用选项:

      选项 英文 作用 例子
      -d directory 指定解压缩目录 unzip -d /path/to/target file.zip
      -o overwrite 覆盖已存在的文件 unzip -o file.zip
      -q quiet 静默模式,不显示解压缩过程 unzip -q file.zip
      -v verbose 显示详细信息 unzip -v file.zip
  13. awk 文本数据处理工具

    • 使用格式:awk [选项] 'pattern {action}' [文件名]

    • 常用选项:

      选项 英文 作用 例子
      -F field-separator 指定字段分隔符 awk -F: '{print $1}' /etc/passwd
      cat /etc/passwd | awk -F: ‘{print $1,$5}
      -v assign 定义变量 awk -v var=value '{print var}'
      -f file 从文件中读取脚本 awk -f script.awk file.txt
  14. sed 对文本文件进行编辑和转换

    • 使用格式:sed [选项] 'command' [文件名]

    • 常用选项:

      选项 英文 作用 例子
      -n quiet 静默模式,只显示处理结果 sed -n '1p' file.txt
      -i in-place 直接修改文件内容 sed -i 's/old/new/g' file.txt
      -e expression 指定多个编辑命令 sed -e 's/old/new/g' -e 's/foo/bar/g' file.txt
      c 整行替换 sed ‘2c Hello Unix’ test.txt
      a 在指定行号之后插入 sed ‘1a Hello Unix’ test.txt
      i 在指定行号位置插入 sed ‘1i Hello Unix’ test.txt
      d 删除 # sed ‘1d’ test.txt
  15. cut对文本文件进行切割和提取

    • 从指定文件中过滤或提取特定内容,并显示在当前屏幕上

    • 使用格式:cut [选项] [文件名]

    • 常用选项:

      选项 英文 作用 例子
      -d delimiter 指定字段分隔符 cut -d: -f1 /etc/passwd
      -f fields 指定要提取的字段,与-d一起使用,指定显示哪个区域 cut -f1,3 file.txt
      -c characters 指定要提取的字符范围 cut -c1-5 file.txt
      -b bytes 以字节为单位进行分割
  16. tr 转换或删除文件中的字符

    • 使用格式:tr [选项] [字符集1] [字符集2]

    • 常用选项:

      选项 英文 作用 例子
      -d delete 删除字符集1中的字符 tr -d 'a' < file.txt
      -s squeeze-repeats 将字符集1中重复的字符压缩成一个字符 tr -s ' ' < file.txt
      -c complement 取字符集1的补集 tr -c 'a-z' '\n' < file.txt
      小写转化为大写 tr ‘a-z’ ‘A-Z’ < /etc/passwd
  17. find 查找文件或者目录

    • 使用格式:find [路径] [表达式]

    • 常用表达式

      选项 英文 作用 例子
      -amin accessed-minutes 在过去n分钟内被读取过的文件 find /etc -amin +60
      -atime accessed-time 按文件访问时间搜索,单位为天 find /etc -atime -7
      -cmin changed-minutes 按文件状态改变时间搜索,单位为分钟 find /etc -cmin +60
      -ctime changed-time 按文件状态改变时间搜索,单位为天 find /etc -ctime -7
      -type type 按文件类型搜索, f(普通文件)、d(目录)、l(符号链接) find /etc -type f
      -perm permission 按文件权限搜索,以使用数字或符号表示权限,例如 644u=rw,g=r,o=r find /etc -perm 644
      -name name 按文件名搜索 find /etc -name passwd
  18. grep 查找文件里符合条件的字符串

    • 使用格式:grep [选项] 字符串 文件

    • 常用选项:

      选项 英文 作用 例子
      -i ignore-case 忽略大小写 grep -i "hello" file.txt
      -v invert-match 反向匹配,显示不包含指定字符串的行 grep -v "hello" file.txt
      -n line-number 显示行号 grep -n "hello" file.txt
      -r recursive 递归搜索子目录 grep -r "hello" /etc
      -w word-regexp 按单词匹配 grep -w "hello" file.txt
      -e pattern 指定搜索模式 grep -e "hello" -e "world" file.txt

正则表达式

正则表达式 作用
^ 锚定行的开始,如:^grep匹配所有以grep开头的行
$ 锚定行的结束,如:grep$匹配所有以grep结尾的行
. 匹配一个非换行符的字符,如:gr.p匹配gr后接一个任意字符,然后是p
* 匹配零个或多个先前字符,如:.*grep匹配所有一个或多个空格后紧跟grep的行。.*一起用代表任意字符
[] 匹配一个指定范围内的字符,如[Gg]rep匹配Grepgrep
[^] 匹配一个不在指定范围内的字符,如:[^A-FH-Z]rep匹配不包含A-FH-Z的一个字母开头,紧跟rep的行
\(..\) 标记匹配字符,如\([Ll]ove\)love被标记为1
\< 锚定单词的开始,如:\<grep匹配包含以grep开头的单词的行
\> 锚定单词的结束,如:grep\>匹配包含以grep结尾的单词的行
x\{m\} 重复字符xm次,如:0\{5\}匹配包含5个o的行
x\{m,\} 重复字符x,至少m次,如:o\{5,\}匹配至少有5个o的行
x\{m,n\} 重复字符x,至少m次,不多于n次,如:o\{5,10\}匹配5--10个o的行
\w 匹配文字和数字字符,也就是[A-Za-z0-9],如:G\w*p匹配以G后跟零个或多个文字或数字字符,然后是p
\W \w的反置形式,匹配一个或多个非单词字符,如点号句号等
\b 单词锁定符,如:\bgrep\b只匹配grep

需要注意的是,正则表达式在 Linux 中广泛应用于各种命令和工具中,例如 grepsedawk 等。在使用正则表达式时,需要注意特殊字符的转义和匹配模式的语法。

第五章

常用指令

  1. cal 打印日期

    • 使用格式:cal [选项] [月份] [年份]

    • 常用选项:

      选项 英文 作用 例子
      -m monday 将周一作为一周的第一天 cal -m
      -j julian 显示儒略日 cal -j
      -y year 显示指定年份的日历 cal -y 2022
      -3 three-months 显示当前月份及前后两个月的日历 cal -3
      -h help 显示帮助信息 cal -hdate
  2. date

    • 使用格式:date [选项] [+格式]

      date 命令用于显示或设置系统的日期和时间。它可以显示当前日期和时间,也可以设置日期和时间。

    • 常用选项:

      选项 作用
      -d 显示指定日期和时间的格式
      -s 设置日期和时间
      -u 显示或设置协调世界时(UTC)
    • 时间输出例子

      date ’+%Y-%m-%d %H:%M:%S’

      %H 小时(00..23)
      %M 分钟(00..59)
      %S 秒(00..60)
      %Y 完整年份(0000..9999)
      %m 月份(01..12)
      %d 日(01..31)
  3. wc 统计文件中的行数、单词数和字符数

    • 使用格式:wc [选项] [文件]

    • 常用选项:

      选项 英文 作用 例子
      -c bytes 统计字符数 wc -c file.txt
      -l lines 统计行数 wc -l file.txt
      -w words 统计单词数 wc -w file.txt
  4. sort 对内容排序

    • 使用格式:sort [选项] [文件]

    • 常用选项:

      选项 英文 作用 例子
      -r reverse 反向排序 sort -r file.txt
      -n numeric 按照数字顺序排序 sort -n file.txt
      -t field-separator 指定字段分隔符 sort -t , file.txt
      -k key 指定排序的关键字 sort -k 2 file.txt
  5. which\whereis 查找文件

    • 介绍

      • which 命令用于查找指定命令的可执行文件路径。它会在 $PATH 环境变量指定的路径中查找命令。
      • whereis 命令用于查找指定命令的可执行文件路径、源代码路径和帮助文档路径。
    • 使用格式:which [命令] whereis [命令]

    • 常用选项:

      选项 英文 作用 例子
      查找指定命令的可执行文件路径 which ls
      -b binary 只查找可执行文件路径 whereis -b ls
      -m man 只查找帮助文档路径 whereis -m ls
      -s source 只查找源代码路径 whereis -s ls
  6. su 切换用户身份

    • 使用格式:su [选项] [用户]

    • 常用选项:

      选项 英文 作用 例子
      - login 切换到目标用户的环境 su - user
      -c command 执行指定命令 su -c "command" user
      -c command 切换到目标用户的环境并执行命令 su - user -c ls
  7. sudo 变更为其他使用者的身份 除 root 外,需要键入该使用者的密码

    • 使用格式:sudo [选项] [命令]

    • 常用选项:

      选项 英文 作用 例子
      -u user 以指定用户的身份执行命令 sudo -u user command
      -i login 以目标用户的身份执行命令 sudo -i command
      -s shell 以目标用户的 shell 执行命令 sudo -s command
    • CentOS7默认没有普通用户具有sudo权限

  8. yum 安装、更新和删除软件包

    • yum 命令是一个包管理器,用于在 Linux 系统上安装、更新和删除软件包。它可以自动解决软件包之间的依赖关系,并从指定的软件源中下载软件包。

    • 使用格式:yum [选项] [命令] [软件包]

    • 常用选项:

      选项 英文 作用 例子
      -y assumeyes 自动回答 yes yum -y install package
      -q quiet 静默模式 yum -q update
      -v verbose 详细模式 yum -v install package
      -h help 显示帮助信息 yum -h
    • 常用命令:

      命令 作用 例子
      install 安装软件包 yum install package
      update 更新软件包 yum update
      remove 删除软件包 yum remove package
      search 搜索软件包 yum search keyword
      info 显示软件包信息 yum info package

vi

VI模式与模式切换

image-20230526140311172

末行模式

  1. 保存、退出

    命令 输出
    :q 正常退出
    !q 强制退出
    :w 写入文件
    :w filename 另存为
    :wq 写入后退出
    :wq! 写入后强制退出
    😡 :wq一样

    补充

    按键 行为
    ZZ 保存并退出,与末行模式下 :wq 效果一样
    gg 定位到第一行行首
    dG 删除所有内容
    :n,m d 删除第 n 行到第 m 行之间的内容
  2. 行号

    • 临时设置

      命令 行为
      :set nu:set number 显示所有行号
      :nu:number 显示光标所在行号
      :set nonu:set nonumber 取消行号显示
    • 长期设置 ~/.vimrc #当前用户下的vim配置文件

  3. 搜索

    • 按键

      n 向下搜索下一个匹配项
      N 向上搜索上一个匹配项
    • 命令

      命令 行为
      /<pattern> 从光标所在位置往下搜索
      ?<pattern> 从光标所在位置往上搜索
  4. 替换

    命令 行为
    :s/x/y 把光标所在行第一个匹配的 x 替换为 y
    :n,m s/x/y 把第 n 行到 m 行中每行中第一个匹配的 x 替换为 y
    :% s/x/y 把当前文件中所有行的第一个匹配的 x 替换为 y
    :g/x/s//y/g 把每一行中所有的匹配项都替换为 y
    :s/x/y/g 在当前行中替换所有匹配的 xy
    :n,m s/x/y/g 把第 n 行到 m 行中每行中所有匹配的 x 替换为 y
    :% s/x/y/g 把当前文件中所有行中所有匹配的 x 替换为 y

命令模式

  1. 光标移动

    按键 行为
    h 向左移动光标
    j 向下移动光标
    k 向上移动光标
    l 向右移动光标
    $ 移动到行尾
    0^ 移动到行首
    gg 定位到第一行行首
    G 定位到末行行首
    nG 定位到第 n 行行首
    n+ 向下移动 n
    n- 向上移动 n
    wnw 移动到下一个字首
    ene 移动到下一个字尾
    bnb 移动到上一个字首
    命令 行为
    ( 移动到上一句
    ) 移动到下一句
    { 移动到上一段
    } 移动到当前段
    Ctrl + b 向上翻一页
    Ctrl + f 向下翻一页
    Ctrl + u 向上翻半页
  2. 删除&恢复

    按键 行为
    xnx 删除一个或 n 个字符
    ddndd 删除一行或 n
    `d[w|e|b|$|^ G
    u 撤销上一步操作
    U 撤销对当前行的所有操作
  3. 复制&粘贴

    命令 行为
    yynyy 复制一行或 n
    `y[w|e|b|$|^ G
    p 粘贴到光标所在位置下一个字符位置
  4. 替换

    按键 行为
    rnr 替换光标所在字符(相同字符),自动退出
    R 进入替换模式,替换光标所在字符,直到按下 Esc,不会自动退出
  5. 进入插入模式

    按键 行为
    i 在光标左侧插入
    a 在光标右侧插入
    o 在光标所在行的下一行插入
    s 删除光标所在字符后插入
    I 在光标所在行首插入
    A 在光标所在行尾插入
    O 在光标所在行的上一行插入
    S 删除光标所在行

VI文件冲突

每次打开文件是会创建一个名为.swp的临时文件当多界面编辑、vi异常退出时会导致异常删除.swp即可

文本格式转换

  • Window和Linux文件格式全乱了?
    • Windows 换行结束符号有两个控制字符,一个是归位字符(carriage return,^M),另一个是换行字符( new line,^J )
    • Linux中只使用一个换行字符\n (功能同^J )
  • 安装 yum install –y dos2unix unix2dos
  • 使用
    • unix2dos|dos2unix filename 格式转换后覆盖更新原文件
    • unix2dos|dos2unix –n filename newFilename 格式转换后存为新文件

课外作业

行为 命令
执行 man ls > out.txt ,生成out.txt文件 man ls > out.txt
使用 vi 打开 out.txt vi out.txt
显示所有行号 :set number
光标移动到100行,向右移动10个字符 100G10l
移动到第一行,往下搜索“1024”,定位到第二个匹配项 1G/1024<Enter>n
将50行到100行之间的小写“o”改写为大写"O" :50,100s/o/O/g
修改完了,突然反悔,如何恢复修改前? u
复制65到73行之间这9行的内容,粘贴到最后一行 :65,73y|:$p
删除21到42行之间的所有内容 :21,42d
把当前文档另存为 out.txt.bak :w out.txt.bak
定位到28行,删除3个单词 28G3dw
在第一行新增一行,输入"I am a Student!" ggO I am a Student!<Esc>
保存并退出 :wq

第六章

常用指令

  1. ifconfig 查看当前系统中的网络接口信息

    • 使用格式 ifconfig [选项]

    • 常用选项

      选项 英文 作用 例子
      -a all 显示所有网络接口信息,包括未启用的接口 ifconfig -a
      -i interface 显示指定网络接口的信息 ifconfig eth0
      -s statistics 显示网络接口的统计信息 ifconfig -s
      -h help 显示帮助信息 ifconfig -h
  2. ifup 可以启用指定的网络接口

    • 使用格式 ifup [选项]

    • 常用选项

      选项 英文 作用 例子
      -a all 启用所有未启用的网络接口 ifup -a
      -i interface 启用指定的网络接口 启用名为 eth0 的网络接口:ifup eth0
      -h help 显示帮助信息 ifup -h
  3. ping 网络连通性测试

    • 使用格式 ping [选项] <目的主机名或IP地址>

    • 常用选项

      选项 英文 作用 例子输出
      -c count 指定发送数据包的次数 ping -c 4 www.google.com
      -i interval 指定发送数据包的时间间隔(秒) ping -i 0.5 www.baidu.com
      -s size 指定发送数据包的大小(字节) ping -s 1000 www.microsoft.com
      -t ttl 指定数据包的生存时间(跳数) ping -t 64 www.yahoo.com
      -h help 显示帮助信息 ping -h
  4. netstat 用于显示网络状态

    • 使用格式 netstat [选项]

    • 常用选项

      选项 英文 作用 例子输出
      -a all 显示所有连接和监听端口 netstat -a
      -n numeric 以数字形式显示地址和端口 netstat -n
      -p program 显示与连接关联的进程 netstat -p
      -t tcp 仅显示 TCP 连接 netstat -t
      -u udp 仅显示 UDP 连接 netstat -u
      -h help 显示帮助信息 netstat -h
      -l listening 显示监控中的服务器的Socket netstat -l
      -v verbose 显示指令执行过程 netstat -v
  5. service 管理系统服务

    • 格式 service [服务] 选项

    • 常用选项

      选项 英文 作用 例子输出
      start start 启动指定的服务 service ssh start
      stop stop 停止指定的服务 service ssh stop
      restart restart 重启指定的服务 service ssh restart
      status status 显示指定服务的状态 service ssh status
      enable enable 设置指定服务开机自启动 service ssh enable
      disable disable 取消指定服务开机自启动 service ssh disable
  6. chkconfig 管理系统服务的开机自启动状态

    • 格式 chkconfig [选项] 服务名 [状态]

    • 常用选项

      选项 英文 作用 例子输出
      --list --list 显示所有服务的开机自启动状态 chkconfig --list
      --add --add 添加指定服务到开机自启动列表 chkconfig --add sshd
      --del --del 从开机自启动列表中删除指定服务 chkconfig --del sshd
      --level --level 设置指定运行级别下的服务开机自启动状态 chkconfig --level 3 sshd on
  7. systemctl 管理系统服务 结合service和chkconfig

    • 格式 systemctl [选项] 服务

    • 常用选项

      选项 英文 作用 例子输出
      start start 启动指定的服务 systemctl start sshd
      stop stop 停止指定的服务 systemctl stop sshd
      restart restart 重启指定的服务 systemctl restart sshd
      status status 显示指定服务的状态 systemctl status sshd
      enable enable 设置指定服务开机自启动 systemctl enable sshd
      disable disable 取消指定服务开机自启动 systemctl disable sshd
      list-unit-files list-unit-files 列出所有可用的服务 systemctl list-unit-files

网络配置文件的各自作用

文件/目录 描述
/etc/sysconfig/network 最基本的网络信息,系统启动时读取该文件
/etc/sysconfig/network-scripts/* 此目录下的文件是系统启动时用来初始化网络的一些信息,例如:第一块以太网卡对应的文件为 ifcfg-eth0
/etc/host.conf 域名解析的配置文件
/etc/hosts 域名或主机名与 IP 地址的映射文件
/etc/resolv.conf 域名服务器配置文件
/etc/protocols 定义使用的网络互联协议及协议号
/etc/services 设定主机的不同端口的网络服务

设置静态ip方法

  1. 打开网络配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0(假设你的网卡名称为 eth0)。

  2. BOOTPROTO 的值改为 static,表示使用静态 IP 地址。

  3. 添加以下几行配置:

    配置项 配置值
    IPADDR 192.168.1.100
    NETMASK 255.255.255.0
    GATEWAY 192.168.1.1
    DNS1 8.8.8.8
    DNS2 8.8.4.4(可选)

    其中,IPADDR 表示设置的 IP 地址,NETMASK 表示设置的子网掩码,GATEWAY 表示设置的网关地址,DNS1DNS2 表示设置的 DNS 服务器地址。

  4. 保存并关闭文件。

  5. 重启网络服务,使配置生效。可以使用以下命令重启网络服务:

    systemctl restart network或者 service network restart

开机自启动三种方式

  • /etc/rc.d/rc.local

    1. 赋予脚本可执行权限 chmod +x /opt/script/autostart.sh
    2. 在 /etc/rc.d/rc.local 末尾增加想要执行的脚本内容. su - user -c '/opt/script/autostart.sh’
    3. 给 /etc/rc.d/rc.local 赋予可执行权限 chmod +x /etc/rc.d/rc.local
  • chkconfig

    1. 将脚本移动到 /etc/rc.d/init.d目录下 mv /opt/script/autostart.sh /etc/rc.d/init.d
    2. 赋予脚本可执行权限 chmod +x /etc/rc.d/init.d/autostart.sh
    3. 添加脚本到开机自动启动项目中 cd /etc/rc.d/init.d# chkconfig --add autostart.sh# chkconfig autostart.sh on
  • systemctl

    1. 默认情况下,服务通过yum install时,会自动配置好unit
    2. 文件默认在 /usr/lib/systemd/system 目录下
    3. 以Jenkins为例
      • systemctl enable jenkins.service
      • systemctl start jenkins.service

第七章

两种网络服务模式

独立的守护进程工作模式(stand-alone)

  1. 是Unix传统的C/S模式的访问模式
  2. 在Client/Server模式下,服务器监听(Listen)在一个特定的端口上等待客户连接,连接成功后服务器和客户端通过端口进行数据通信
  3. 守护进程的工作就是打开一个端口,并且等待(Listen)进入连接如果客户端发起一个连接请求,守护进程就创建(Fork)一个子进程响应这个连接,而主进程继续监听其他的服务请求
  4. 运行独立的守护进程工作方式称作:stand-alone

image-20230526152355948

基于xinetd的工作模式

  1. 从守护进程的概念可以看出,对于系统所要提供的每一种服务,都必须运行一个监听某个端口连接情况的守护进程,这通常意味着资源浪费
  2. 为了解决这个问题,Linux引进了“网络守护进程服务程序”的概念
  3. RHEL5使用的网络守护进程是xinetd ( eXtended InterNET daemon)
  4. 和stand-alone模式相比xinetd模式也称 Internet Super-Server(超级服务器)

image-20230526152600712

两种模式选择

  1. xinetd能够同时监听多个指定的端口,在接受用户请求时,它能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求
  2. 可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程
  3. 运行单个xinetd就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源
  4. 但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降

telnet

服务配置过程

步骤 操作
1 安装 Telnet 服务器软件。在大多数 Linux 发行版中,可以使用包管理器来安装 Telnet 服务器软件。
yum install -y telnet telnet-server
2 配置 Telnet 服务器。在大多数 Linux 发行版中,可以通过编辑 /etc/xinetd.d/telnet 文件来配置 Telnet 服务器。
3 重启 inetd 服务。在大多数 Linux 发行版中,可以使用以下命令来重启 inetd 服务:systemctl restart xinetd
4 配置防火墙。在 Linux 中,需要打开 Telnet 服务器所使用的端口(默认为 23 端口)。可以使用以下命令来打开端口:sudo iptables -A INPUT -p tcp --dport 23 -j ACCEPT如果使用的是其他防火墙软件,需要根据具体软件的配置方式进行操作。

命令使用

命令 描述
telnet [host] [port] 连接到指定的主机和端口。
Ctrl + ] 进入 Telnet 命令模式。
close 关闭当前 Telnet 连接。
quit 退出 Telnet 客户端。
send [text] 发送文本到远程主机。
set [option] [value] 设置 Telnet 客户端选项。
unset [option] 取消设置 Telnet 客户端选项。
display [option] 显示 Telnet 客户端选项。
mode [option] 设置 Telnet 客户端模式。
help 显示 Telnet 命令帮助信息。

FTP

两种工作模式的区别和联系

  • PORT 主动模式 (服务器 主动连接 客户端 )

    步骤

    FTP服务器“主动”去连接客户端的数据端口来传输数据

    1. 客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口(即tcp 21端口)
    2. 客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器
    3. 服务器会从它自己的数据端口(20)“主动”连接到客户端指定的数据端口(N+1)
    4. 客户端就可以和ftp服务器建立数据传输通道了

    image-20230526153340896

  • PASV 被动模式(服务器 被动等待 客户端连接)

    FTP服务器“被动”等待客户端来连接自己的数据端口

    1. 客户端打开两个任意的非特权本地端口(N >1024和N+1)
    2. 第一个端口连接服务器的21端口,提交PASV命令
    3. 服务器会开启一个任意的非特权端口(P > 1024),并发送给客户端
    4. 客户端发起从本地端口N+1到服务器的端口的连接用来传送数据。(注意此模式下的FTP服务器不需要开启tcp 20端口了)

image-20230526153558569

FTP 配置过程

  1. 安装 FTP 服务器软件。在大多数 Linux 发行版中,可以使用包管理器来安装 FTP 服务器软件。例如,在 Ubuntu 中,可以使用以下命令来安装 vsftpd 服务器软件:

    sudo apt-get install vsftpd

  2. 配置 FTP 服务器。在大多数 Linux 发行版中,可以通过编辑 /etc/vsftpd.conf 文件来配置 FTP 服务器。找到以下行:

    anonymous_enable=YES

    将其改为:

    anonymous_enable=NO

    这将禁用匿名访问,只允许通过用户名和密码进行登录。

  3. 配置防火墙。在 Linux 中,需要打开 FTP 服务器所使用的端口(默认为 21 端口)。可以使用以下命令来打开端口:

    sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT

    如果使用的是其他防火墙软件,需要根据具体软件的配置方式进行操作。

  4. 启动 FTP 服务器。在大多数 Linux 发行版中,可以使用以下命令来启动 vsftpd 服务器:

    sudo service vsftpd start

    如果启动失败,可以使用以下命令来查看错误日志:

    sudo tail -f /var/log/syslog

    在实际使用中,需要根据具体需求进行修改和扩展

FTP命令使用

命令 描述
ftp xx.xx.xx.xxopen xx.xx.xx.xx 连接到指定的 FTP 服务器。
get <filename>mget <filename> 从 FTP 服务器下载指定的文件。mget 命令可以下载多个文件。
put <filename>mput <filename> 上传本地文件到 FTP 服务器。mput 命令可以上传多个文件。
binary or acsii 设置文件传输方式为二进制或 ASCII。
cd <directory> 在 FTP 服务器上切换目录。
lcd <directory> 在本地主机上切换目录。
ls 在 FTP 服务器上执行 ls 命令,列出当前目录下的文件和子目录。
mkdir <directory> 在 FTP 服务器上创建目录。
close 关闭当前 FTP 连接。

第八章

shell程序的特点及用途

特点


  1. shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行

  2. 不同的shell解释器使用不同的shell命令语法

  3. shell程序解释执行,不生成可以执行的二进制文件

  4. 可以帮助用户完成特定的任务,提高使用、维护系统的效率

  5. 了解shell程序可以更好的配置和使用Linux,实现自动化运维

用途


  1. shell使用解释型语言,不需重新编译
  2. 它适合于编写执行相对简单的任务的工具,因为它更强调易于配置、维护和可移植性
  3. 它不适合用来完成时间紧迫型和处理器忙碌型的任务

shell 程序的编写、执行和调试

  1. 简单例子

    #!/bin/bash
    
    echo "Hello, World!"
    
    exit 0
  2. 执行

    • 可以使用 /bin/bash filename

    • 添加执行权限

      1. `chmod +x /path/filename.

      2. 指定路径执行./path/filename

变量声明与使用、read、位置变量、$HOME、$PATH、¥?

  1. Shell 变量声明与使用

    • 注意事项
      1. 变量名只能包含字母、数字和下划线,且不能以数字开头。
      2. 变量名区分大小写。
      3. 变量赋值时,等号两侧不能有空格
      4. 使用变量时,需要在变量名前加上 $ 符号
      5. 如果变量的值包含空格或其他特殊字符,需要使用引号将其括起来,例如:variable_name="value with spaces"
    • 引用
      1. 在使用变量时,需要在变量名前加上 $ 符号,例如:echo $variable_name
      2. 如果变量的值包含空格或其他特殊字符,需要使用引号将其括起来,例如:echo "$variable_name"
      3. 如果变量的值包含 $ 符号,可以使用反斜杠进行转义,例如:echo "\$variable_name"
      4. 如果需要在字符串中插入变量的值,可以使用双引号将字符串括起来,并在变量名前加上 $ 符号,例如:echo "The value is: $variable_name"
      5. 如果需要在字符串中插入命令的输出结果,可以使用`$() 将命令括起来,例如:echo "The date is: $(date)"
      6. 如果需要在字符串中插入特殊字符,可以使用转义字符,例如:echo "The path is: /path/to/dir\/file"

    在 Shell 中,可以使用以下方式来声明和使用变量

    # 声明变量
    variable_name=value
    
    # 使用变量
    echo $variable_name
  2. read 命令

read 命令用于从标准输入中读取一行文本,并将其赋值给指定的变量。例如:

read variable_name
echo $variable_name
  1. 位置变量

在 Shell 脚本中,以下是常用的特殊变量:

  1. $0:代表脚本的名字。
  2. $1$2、...、$n:分别代表第 1 个、第 2 个、...、第 n 个参数。
  3. $*:这个变量包括所有参数的列表,作为一个字符串。
  4. $@:这个变量包括所有参数的列表,作为一个数组。
  5. $#:这个变量包括参数的个数。

例如,假设有一个名为 script.sh 的 Shell 脚本,其内容如下:

\#!/bin/bash

echo "The script name is: $0"

echo "The first argument is: $1"

echo "The second argument is: $2"

echo "All arguments as a string: $*"

echo "All arguments as an array: $@"

echo "The number of arguments is: $#"

在上面的代码中,$0 表示脚本的名字,$1$2 分别表示第 1 个和第 2 个参数,$*$@ 分别表示所有参数的列表,$# 表示参数的个数。可以在命令行中执行以下命令来运行脚本并传递参数:

./script.sh arg1 arg2

在上面的命令中,arg1arg2 分别作为第 1 个和第 2 个参数传递给脚本。执行结果如下:

The script name is: ./script.sh

The first argument is: arg1

The second argument is: arg2

All arguments as a string: arg1 arg2

All arguments as an array: arg1 arg2

The number of arguments is: 2

需要注意的是,在使用 $*$@ 时,如果参数的值包含空格或其他特殊字符,需要使用引号将其括起来,例如:

./script.sh "arg1 with spaces" "arg2 with spaces"

  1. 环境变量

    环境变量 说明
    $HOME 用户的主目录
    $IFS 内部的域分隔符,一般为空格符、制表符或换行符
    $PATH 寻找命令或可执行文件的搜索路径列表,路径以冒号分隔
    $$ Shell脚本的进程号
    $? 紧邻的前驱命令的返回值 0=成功 1=失败
    $TERM 使用的终端类型
    $SHELL 查看当前用户所使用的的shell

例子:

echo "Home directory: $HOME"

echo "System PATH: $PATH"

ls /not/exist

echo "Exit status: $?"

如果当前用户的主目录为 /home/user,系统的环境变量 PATH 为 /usr/local/bin:/usr/bin:/bin,则会输出:

Home directory: /home/user

System PATH: /usr/local/bin:/usr/bin:/bin

ls: cannot access '/not/exist': No such file or directory

# 其中,`ls /not/exist` 命令会返回 2 作为退出状态码。
Exit status: 2
  1. 双引号、单引号和倒引号的区别和联系

    在 Shell 中,双引号、单引号和反引号都是用来表示字符串的特殊符号,它们的区别和联系如下:

    1. 双引号:双引号中的变量会被扩展为其值,而反斜杠后面的特殊字符会被解释。例如:echo "The date is: $(date)"

    2. 单引号:单引号中的变量和特殊字符都会被原样输出,不会被扩展。例如:echo 'The date is: $(date)'

    3. 反引号:反引号中的命令会被执行,并将输出结果作为字符串返回。例如:echo "The date is: \date "

    另外,需要注意以下几点:

    1. 双引号和单引号都可以用来表示包含空格或其他特殊字符的字符串,例如:echo "The path is: /path/to/dir with spaces"echo 'The path is: /path/to/dir with spaces'
    2. 反引号在某些情况下可能会与单引号混淆,可以使用 $() 来代替反引号,例如:echo "The date is: $(date)"
    3. 双引号和单引号可以嵌套使用,例如:echo "The path is: '/path/to/dir with spaces'"echo 'The path is: "/path/to/dir with spaces"'
  2. 简单数学运算、条件判断(字符串、数字)、逻辑运算


    1. 数学运算

      • 可以使用 expr 命令来进行简单的数学计算,例如
      \# 加法
      expr 1 + 2
      \# 减法
      expr 3 - 1
      \# 乘法
      expr 2 \* 3
      \# 除法
      expr 6 / 2
      \# 取余
      expr 7 % 3
      
      # 使用 $((...)) 进行数学计算。例如,可以使用以下命令计算变量 num1num2 的和
      num1=1
      num2=2
      echo $((num1 + num2))
      
      # 使用 expr 命令进行数学计算。例如,可以使用以下命令计算变量 num1num2 的和:
      
      num1=1
      num2=2
      expr $num1 + $num2

      在上面的代码中,\* 表示乘法运算符,需要使用反斜杠进行转义

      • 使用 let 命令进行数学计算
      num1=1
      num2=2
      let sum=num1+num2
      echo $sum
      
      num=1
      let num++
      echo $num   

      需要注意的是,let 命令只能进行整数运算,不能进行浮点数运算。另外,let 命令中的变量名不需要使用 $ 符号进行括起来。

    2. 条件判断

      注意事项

      • 判断结果的一般定义:真:0. 假:1
      • [ condition ] [右边和]左边需要有空格

      选项

      • 操作符
      操作符 含义
      -f fn 如果 fn 存在且为普通文件,则返回真,否则返回假。
      -b fn 如果 fn 存在且为块设备文件,则返回真,否则返回假。
      -e fn 如果 fn 存在,则返回真,否则返回假。
      -d fn 如果 fn 存在且为目录,则返回真,否则返回假。
      -r fn 如果 fn 存在且可读,则返回真,否则返回假。
      -w fn 如果 fn 存在且可写,则返回真,否则返回假。
      -x fn 如果 fn 存在且可执行,则返回真,否则返回假。
      -O fn 如果 fn 存在且被当前用户拥有,则返回真,否则返回假。
      -L fn 如果 fn 存在且为符号链接,则返回真,否则返回假。
      • 字符串
      操作符 含义
      string_1 = string_2 如果 string_1string_2 两个字符串相等,则返回真,否则返回假。
      string_1 != string_2 如果 string_1string_2 两个字符串不相等,则返回真,否则返回假。
      -z string 如果字符串 string 的长度为 0,则返回真,否则返回假。
      -n string 如果字符串 string 长度不为 0,则返回真,否则返回假。
      string -n string,如果字符串 string 长度不为 0,则返回真,否则返回假。
      • 数字
      操作符 含义
      num_1 -eq num_2 如果 num_1num_2 相等,则返回真,否则返回假。
      num_1 -ne num_2 如果 num_1 不等于 num_2,则返回真,否则返回假。
      num_1 -gt num_2 如果 num_1 大于 num_2,则返回真,否则返回假。
      num_1 -lt num_2 如果 num_1 小于 num_2,则返回真,否则返回假。
      num_1 -le num_2 如果 num_1 小于等于 num_2,则返回真,否则返回假。
      num_1 -ge num_2 如果 num_1 大于等于 num_2,则返回真,否则返回假。
    3. 逻辑运算

      逻辑运算符 说明 示例
      -a 逻辑与,如果两个条件都为真,则结果为真 [ -f file ] -a [ -r file ]
      -o 逻辑或,如果两个条件有一个为真,则结果为真 [ -d directory ] **-o** [ -w directory ]
      ! 逻辑非,结果与条件相反 ! [ -x file ]
  3. if、case、for、while、until

    • if

      #!/bin/bash
      
      # 获取用户输入的数字
      echo "请输入一个数字:"
      read num
      
      # 判断数字是否小于0
      if [ $num -lt 0 ]; then
      echo "您输入的数字小于0"
      # 判断数字是否等于0
      elif [ $num -eq 0 ]; then
      echo "您输入的数字等于0"
      # 如果以上条件都不满足,则数字大于0
      else
      echo "您输入的数字大于0"
      fi
    • case

      #!/bin/bash
      
      # 获取用户输入的选项
      echo "请选择一个选项(A、B、C、D):"
      read option
      
      # 使用case语句检查选项
      case $option in
      A)
       echo "您选择了选项A"
       ;;
      B)
       echo "您选择了选项B"
       ;;
      C)
       echo "您选择了选项C"
       ;;
      D)
       echo "您选择了选项D"
       ;;
      *)
       echo "无效的选项"
       ;;
      esac
    • for

      #!/bin/bash
      
      # 使用for循环输出数字1到5
      for i in 1 2 3 4 5
      do
      echo $i
      done
      
      # 使用for循环遍历数组
      fruits=("apple" "banana" "orange" "grape")
      for fruit in "${fruits[@]}"
      do
      echo "我喜欢吃$fruit"
      done
      
      # 使用for循环遍历文件夹中的文件
      for file in /path/to/directory/*
      do
      echo $file
      done
    • While

      function demo_fun()
      {
      while [ -n "$1" ]
      do
          echo "Parameters($$count) is:$1"
          let count=$count+1
          shift
      done
      }              

第九章

GCC的使用

编译过程

  1. 预处理阶段:在这个阶段,gcc会对源代码文件进行预处理,包括宏展开、头文件包含、条件编译等操作。预处理器会生成一个新的文件,通常以.i为扩展名gcc –E hello.c –o hello.i
  2. 编译阶段:在这个阶段,gcc会将预处理后的文件编译成汇编代码。编译器会对代码进行语法分析、语义分析、优化等操作,生成一个汇编代码文件,通常以.s为扩展名gcc –S hello.c –o hello.s
  3. 汇编阶段:在这个阶段,gcc会将汇编代码文件转换成机器码文件。汇编器会将汇编代码转换成二进制指令,生成一个目标文件,通常以.o为扩展名gcc -c hello.c -o hello.o
  4. 链接阶段:在这个阶段,gcc会将目标文件和库文件链接成一个可执行文件。链接器会解析目标文件中的符号引用,并将其与库文件中的符号定义进行匹配,生成一个可执行文件gcc hello.o -o hello

一次编译与多次

  • 采用一步编译 gcc hello.c say_hello.c -o hello

  • 分步编译的方案

    思路:编译每一个.c文件,得到.o的目标文件将每一个.o的目标文件链接成一个可执行的文件

    1. gcc -c say_hello.c -o say_hello.o
    2. gcc -c hello.c -o hello.o
    3. gcc hello.o say_hello.o -o hello

不同目录

image-20230526172218940

  1. 文件 hello.c 引用的头文件 say_hello.h 不在当前目录中,也不在GCC默认的头文件搜索路径/usr/include中
  2. -I 选项指定搜索头文件的特殊目录
  3. gcc hello.c functions/say_hello.c -o hello –I functions注意:不在当前目录的文件,需要指定路径
hello: hello.o say_hello.o
    gcc hello.o say_hello.o -o hello    
say_hello.o: say_hello.c
    gcc -c say_hello.c -o say_hello.o
hello.o: hello.c
    gcc -c hello.c -o hello.o
clean:        
    rm -f *.o
    rm -f hello

层次图

image-20230526173024174

例子:

bf19b101634136da16e4445f825d6d94

1、main.c依赖f1、f2目录里面的头文件,所以要加-If1 -If2(可以写成-I f1 -I f2,不能写成-If1 f2);
2、a.o、b.o所用到的c文件,别忘了把f1、f2加进去,要写成f1/a.c、f2/b.c,gcc命令一样要加,不然会找不到文件。

gdb的基本使用

进入gdb环境 gdb

命令 用途 例子
file 指定需要进行调试的程序。 file myprogram
step 单步(行)执行,如果遇到函数会进入函数内部。 step
next 单步(行)执行,如果遇到函数不会进入函数内部。 next
run 启动被执行的程序。 run
quit 退出gdb调试环境。 quit
print 查看变量或者表达式的值。 print myvar
break 设置断点,程序执行到断点就会暂停起来。 break myfunction
shell 执行其后的shell命令。 shell ls -l
list 查看指定文件或者函数的源代码,并标出行号。 list myfunction

静态函数库创建与使用

  1. 编写函数代码并编译成目标文件

    gcc -c foo.c bar.c

  2. 将目标文件打包成静态函数库

    ar -rsv libpr.a bar.o foo.o 固定格式lib*

  3. 在程序中使用静态函数库

    gcc -o main main.c -L. -lpr

  4. 运行程序

    ./main

动态函数库创建与使用

  1. 编写函数代码并编译成目标文件

    gcc -c -fPIC foo.c bar.c

    这将生成两个位置无关的目标文件foo.obar.o

  2. 将目标文件打包成动态函数库

    gcc -shared -o libmylib.so foo.o bar.o

    这将生成一个名为libmylib.so的动态函数库,其中包含foo.obar.o中的函数。

  3. 在程序中使用动态函数库

    gcc -o myprogram myprogram.c -L. -lmylib

第十章

设备管理

  1. Linux系统中设备都被抽象为设备文件来表示的
  2. 为应用程序提供一个一致的文件界面,方便应用程序和操作系统之间的通信。
  3. 设备文件集中放置在/dev目录下,一般有几千个
  4. 不管有没有对应的真实设备,Linux系统在安装的时候都会自动预先创建。

设备命名

  1. Linux系统磁盘设备命名方式遵循一定的规则。
  2. 前两个字母表示分区所在设备的类型
    • hd:IDE硬盘
    • sd:SCSI硬盘(U盘,移动硬盘等)
  3. 第三个字母表示分区在哪个设备上
    • hda:第一块IDE硬盘
    • sda:第一块SCSI硬盘
    • sdb:第二块SCSI硬盘
  4. 数字表示分区的次序
    • hda1:第一块IDE硬盘第一分区
    • sdb2:第二块SCSI硬盘第二个分区

Linux文件系统

  1. Linux系统的第一个文件系统是Minix(文件名不能超过14个字符,文件大小不能超过64MB)
  2. ext:1992年设计,是第一个专为Linux设计的文件系统,文件大小可到2GB,文件名支持255字符,性能不佳
  3. ext2: 1993年设计,采用三级间接块来存储数据块指针,并以块(block,默认为1KB)为单位分配空间,存取文件的性能极好
  4. ext3/ext4:对ext2的改进,采用日志式文件系统技术,目前各个Linux发行版使用
  5. XFS高性能文件系统,2001年移植到Linux内核上RHEL/CentOS 7 和Oracle Linux将XFS作为默认文件系统XFS有许多独特的性能提升功能使他从众多文件系统中脱颖而出,像可伸缩/并行 IO,元数据日志,热碎片整理,IO 暂停/恢复,延迟分配等

虚拟文件系统VFS

  1. VFS并不是一个实际的文件系统只存在于内存,系统启动时建立,系统关闭时消亡
  2. VFS功能包括
    • 记录可用文件系统的类型
    • 将设备与对应的文件系统联系起来
    • 处理面向文件的通用操作
    • 涉及到针对文件系统的操作时,把他们映射到相关的物理文件系统

image-20230526180644314

挂载设备

  1. 计算机系统中,所有的存储设备都是以目录树的形式对文件进行管理的 。
  2. 在Linux系统中,所有的文件都是在以“/”目录为根的一棵“大”目录树中进行管理。
  3. 如果要使用USB存储设备、光盘或软盘等存储设备,必须将这些设备中的“小”目录树像嫁接一样挂载(mount)到Linux系统的“大”目录树中。

image-20230526181048602

挂载设备的过程

  1. 查看设备:使用命令fdisk -l可以查看系统的存储设备
  2. 挂载设备 :首先使用mkdir命令建立挂载点目录,然后再使用mount命令挂载相关设备
  3. 访问设备
  4. 卸载设备 :用户在使用完挂载设备后,不能直接将挂载设备从系统拔出,否则会出现问题,严重的会导致系统崩溃。用户必须先执行卸载命令然后再该设备拔出umount [挂载点或设备名]

相关命令

  1. mkfs 把指定的设备格式为指定的文件系统

    • 格式:mkfs [选项][-t <文件系统类型>] [设备名称] [区块数]
    • 例子:mkfs –t ext3 /dev/hda4
  2. fdisk创建和维护分区表

    • 格式:fdisk [选项]

      选项 作用
      -l 列出素所有分区表
      -u 与-l配合使用,显示分区数目
  3. mount 挂载Linux系统外的文件

    • 格式:mount [选项] <挂载设备名称> <挂载点>

    • 常用选项

      选项 英文 用途 例子
      -t type 指定文件系统类型,通常不必指定。mount会自动选择正确的类型。 mount -t ext4 /dev/sda1 /mnt
      -o auto auto 打开自动挂载模式。表示在启动时自动挂载文件系统。 mount -o auto /dev/sdb1 /mnt
      -o noauto noauto 关闭自动挂载模式。表示不自动挂载文件系统。 mount -o noauto /dev/sdb1 /mnt
      -o defaults defaults 使用预设的选项rwsuiddevexecautonouserasync mount -o defaults /dev/sda1 /mnt
      -o ro ro 用只读模式挂载文件系统。 mount -o ro /dev/sda1 /mnt
      -o rw rw 用可读写模式挂载文件系统。 mount -o rw /dev/sda1 /mnt
  4. umount 卸除文件系统

    • 格式:umount [选项] 挂载点或设备名

    • 常用选项

      选项 英文 用途 例子
      -a all 卸载/etc/mtab中记录的所有文件系统。 umount -a
      -n no-write 卸载时不将信息存入/etc/mtab文件中。 umount -n /mnt
      -r read-only 若无法成功卸载,则尝试以只读的方式重新挂载文件系统。 umount -r /mnt
      -t type 仅卸载选项中所指定的文件系统类型。 umount -t ext4 /mnt
      -v verbose 执行时显示详细的信息。 umount -v /mnt
  5. df 查看磁盘空间使用情况(disk free)

    • 格式:df [选项] [路径]

    • 常用选项

      选项 英文 用途 例子
      -a all 包含所有的具有 0 Blocks 的文件系统。 df -a
      -h human-readable 使用人类可读的格式。 df -h
      -i inodes 列出 inode 资讯,不列出已使用 block。 df -i
      -l local 限制列出的文件结构。 df -l
      -t type=TYPE 限制列出文件系统的 TYPE。 df -t ext4
      -T print-type 显示文件系统的形式。 df -T
  6. du 统计目录或文件所占磁盘空间大小(disk usage)

    • 格式:du [选项/参数] [目录名…]

    • 常用选项

      选项 英文 用途 例子
      -a all 递归显示指定目录中各个文件及下级目录中各文件占用的数据块数。 du -a /home/user
      -h human-readable 以友好直观方式显示信息,即以KB或MB为单位。 du -h /home/user
      -b bytes 以字节为单位列出磁盘空间使用情况。 du -b /home/user
      -m megabytes 以MB为单位显示。 du -m /home/user
      -s summarize 对每个目录参数只给出占用的数据块总数。 du -s /home/user
  7. whoami 查看当前登录用户名称

  8. who命令用于显示当前登录系统的用户信息,包括用户名、终端设备、登录时间等。

  9. who查看当前登录用户情况,who的增强版

  10. ps 显示当前进程的状态

    • 格式:ps [选项]

    • 常用选项

      选项 英文 用途 例子
      -A all 列出所有的进程。 ps -A
      -w wide 显示加宽可以显示较多的资讯。 ps -w
      -au user-oriented 显示较详细的资讯。 ps -au
      -aux user-oriented 显示所有包含其他使用者的行程。 ps -aux
      -e everyone 显示所有进程。 ps -e
      -f full 采用全格式显示。 ps -f
  11. pstree 以树形结构查看进程信息

    • 格式pstree [选项] [pid | user]

    • 常用选项

      选项 英文 用途 例子
      -a show command line arguments 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。 pstree -a
      -c compact display 不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。 pstree -c
      -p show process PIDs 显示某进程信息。 pstree -p 1234
      -u show user/owner 显示某用户信息。 pstree -u username
  12. kill删除执行中的程序或工作

    • 格式:kill [-s <信息名称或编号>][程序]

    • 常用选项

      选项 英文 用途 例子
      -s signal 指定要发送的信号。 kill -s SIGTERM 1234
      -l list 列出所有可用的信号。 kill -l
      -9 force 强制终止进程。 kill -9 1234
      -15 terminate 终止进程。 kill -15 1234
  13. top 能显示实时的进程列表,而且还能实时监视系统资源,包括内存、交换分区和CPU的使用率等

    • 格式: top [选项]

    • 常用选项

      选项 英文 用途 例子
      -d delay 指定刷新时间间隔。 top -d 5
      -p process 指定要监视的进程ID。 top -p 1234
      -u user 指定要监视的用户。 top -u username
      -H threads 显示进程的线程信息。 top -H
  14. free 显示内存状态,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等

    • 格式:free [选项]

    • 常用选项

      选项 英文 用途 例子
      -b bytes 以字节为单位显示内存使用情况。 free -b
      -k kilobytes 以KB为单位显示内存使用情况。 free -k
      -m megabytes 以MB为单位显示内存使用情况。 free -m
      -g gigabytes 以GB为单位显示内存使用情况。 free -g
      -t total 显示总内存使用情况。 free -t

进程

进程的概念

  1. Linux系统上所有运行的东西都可以称之为一个进程,如每个用户任务、每个系统管理任务进程是一个程序的运行
  2. 进程与程序是有区别的
    • 程序只是一个静态的指令集合,不占系统的运行资源,只占用磁盘空间
    • 进程是一个随时都可能发生变化的、动态的、使用系统运行资源(cpu,内存等)的程序
    • 一个程序可以启动多个进程
  3. Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性
    • 交互进程: 由shell启动的进程批
    • 处理进程: 这种进程和终端没有联系,是一个进程序列
    • 守护进程: 在后台持续运行的进程

调度启动-at命令

  1. 介绍:用于在指定的时间执行一次性任务,可以用于在指定时间运行命令、脚本或程序等

  2. 用法:at [选项] [时间]

  3. 选项

    选项 英文 用途 例子
    -m mail at工作完成后,无论命令是否输出,都用 E-mail 通知执行at命令的用户。 at -m 10:30
    -c check 显示该at工作的实际内容。 at -c 1
    -t time 在指定时间提交工作并执行,时间格式为[[CC]YY]MMDDhhmm。 at -t 202201011230
    -d delete 删除某个工作,需要提供相应的工作标识号(ID),同atrm命令的作用相同。 at -d 1
    -l list 列出当前所有等待运行的工作,和atq命令具有相同的作用。 at -l
    -f file 指定所要提交的脚本文件。 at -f script.sh 10:30
  4. 时间

    HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行
    Midnight(midnight) 代表 12:00 AM(也就是 00:00)
    Noon(noon) 代表 12:00 PM(相当于 12:00)
    Teatime(teatime) 代表 4:00 PM(相当于 16:00)
    英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无
    MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号
    now+时间 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行

调度启动-crontab命令

  1. 介绍

    • at命令产生的进程调度不具有周期性,只能在时间条件满足时执行一次
    • 但很多时候需要重复地周期性地执行某个程序
    • crontab用来让使用者在固定时间或固定时间间隔执行程序
    • 对用户来说,只需要关注自己的crontab文件的撰写,不需干涉crond进程的执行
    • 因为一个用户只有一个crontab文件,所以,crontab文件不能直接创建或者直接修改(root可以),
    • 必须通过crontab命令得到crontab命令用于安装、删除或者列出用于驱动cron后台进程的crontab文件
    • 设定周期性任务。root用户可以指定其他用户的时程表
  2. 格式:crontab [ -u user ] 文件 crontab [ -u user ] { -l | -r | -e }

  3. 常用选项

    选项 英文 用途 例子
    -e edit 执行文字编辑器来设定时间表。 crontab -e
    -r remove 删除目前的时程表。 crontab -r
    -l list 列出目前的时程表。 crontab -l
  4. 定时任务的添加

    • 格式

      每个定时任务占用一行,格式如下:

      * * * * * command

      * * * * *表示定时任务的执行时间和周期,共有5个字段,分别表示分钟、小时、日期、月份和星期(0-6 0是星期日),可以使用*表示任意值,也可以使用数字或者范围表示具体的值,例如0 0 * * *表示每天的0点0分执行任务。

    • 例子

      # 每月每天12点执行一次echo hello
      0 12 * * * echo hello
      
      # 在12月内,每天早上6点到12点,每隔20分钟执行一次/usr/bin/backup
      */20 6-12 * 12 * /usr/bin/backup
      
      # 每月每天的午夜0点20分,2点20分,4点20分…显示当前时间
      20 0-23/2 * * * date
      
      # 每天的0点0分执行备份脚本:
      0 0 * * * /path/to/backup.sh
      
      # 每小时的第10分钟和第40分钟执行一次清理任务:
      10,40 * * * * /path/to/cleanup.sh
      
      # 每周一的0点0分执行一次更新任务:
      0 0 * * 1 /path/to/update.sh
      
      # 每月的第一天的0点0分执行一次统计任务:
      0 0 1 * * /path/to/stats.sh
      
      #每天的8点到18点之间,每隔30分钟执行一次监控任务:
      */30 8-18 * * * /path/to/monitor.sh

系统日志

Linux系统的日志文件通常存储在/var/log目录下,不同的日志文件记录了不同的系统事件和信息。以下是常见的Linux系统日志文件及其用途:

  • /var/log/messages:记录系统的重要事件和错误信息。
  • /var/log/syslog:记录系统的所有事件和信息。
  • /var/log/auth.log:记录系统的认证和授权信息,包括用户登录、sudo使用等。
  • /var/log/kern.log:记录内核的事件和信息,包括硬件故障、驱动程序问题等。
  • /var/log/dmesg:记录系统启动时的内核信息。
  • /var/log/boot.log:记录系统启动时的启动信息。

可以使用catlesstail等命令来查看系统日志文件的内容。例如,使用less /var/log/messages命令可以查看/var/log/messages文件的内容,并使用q键退出查看。使用tail -f /var/log/syslog命令可以实时查看/var/log/syslog文件的内容,以便及时发现系统问题和错误。

第十一章

Docker

docker是什么

  1. Docker 是一个应用打包、分发、部署的工具。
  2. Docker:可理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要。
  3. 普通虚拟机:一个完整而庞大的系统,包含各种不管你要不要的软件。

Docker与虚拟机的区别

特性 普通虚拟机 Docker
跨平台 通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行 支持的系统非常多,各类 Windows 和 Linux 都支持
性能 性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了 性能好,只虚拟软件所需运行环境,最大化减少没用的配置
自动化 需要手动安装所有东西 一个命令就可以自动部署好所需环境
一致性 环境一致性不高,不同系统差异大 一致性好,不同系统都一样部署方式

Docker的重要概念

  1. 容器:可以想象成一个精简版的Linux OS环境和其下 (包括root用户权限和用户空间、进程空间等)运行的应用程序空间。
  2. 镜像:一个只读模板,包含一个完整的Linux OS环境和 用户所需的应用程序,用以新建Docker容器。
  3. 仓库:集中存放镜像文件的地方,分为公开仓库和私有 仓库两类。最大的公开仓库是DockerHub,用户 根据实际需要可以在本地网络创建私有仓库。

Docker部署的优势

  • 常规应用开发部署方式

    Windows 上开发、测试 --> 到 Linux 服务器配置运行环境部署经典问题:这段代码在我机器上没问题啊!!!

  • Docker 开发部署流程

    Windows 上开发、测试 --> 打包为 Docker 镜像(可以理解为软件安装包) --> 各种服务器上只需要一个命令部署好

    优点:确保了不同机器上跑都是一致的运行环境,不会出现我机器上跑正常,你机器跑就有问题的情况。

Docker指令

  1. docker search 镜像名 [--no-trunc]搜索镜像

  2. docker pull [选项] [仓库地址[:端口号]/]仓库名[:标签]拉取镜像

  3. docker images [选项] [REPOSITORY]查看镜像

  4. docker image rm [选项] <镜像1> [<镜像2> …] 删除镜像

  5. docker run [选项] NAME[:TAG]新建并启动容器

    选项 描述
    --name 为容器指定一个新名字(唯一,不指定则随机)
    -d 后台运行容器,并返回ID
    -t 为容器分配一个伪输入终端
    -i 以交互模式运行容器(一般与-t一起用,进入后台)
    -p 端口映射,<host端口>:<容器端口>
    -v 目录映射,<host目录>:<容器目录>
    -e 设置环境变量
  6. docker ps [选项]查看容器信息(查看id可以)

    选项 描述
    -a 显示所有的容器,包括未运行的
    -f 根据条件过滤显示的内容
    -n 列出最近创建的 n 个容器
    -q 静默模式,只显示容器编号
  7. docker start [OPTIONS] 容器id 启动已终止的容器

  8. docker stop CONTAINER 终止容器 (CONTAINER可以是ID也可以是NAME)

  9. docker restart CONTAINER 重启容器(CONTAINER可以是ID也可以是NAME)

  10. docker rm [选项] CONTAINER 删除容器

    -f:通过SIGKILL信号强制删除一个运行中的容器

  11. docker exec [选项] CONTAINER COMMAND [参数]

    是一个在正在运行的容器中运行命令的命令。您可以使用此命令在已经运行的容器中运行命令,而无需启动新的 shell 会话。

  12. docker commit [选项] 容器名 [REPOSITORY[:TAG]]创建镜像

    选项 描述
    -a 提交的镜像作者
    -m 提交时的说明文字
    -c 创建文件时使用 Dockerfile 指令
  13. docker build [选项] path 用于构建 Docker 镜像的命令。它使用 Dockerfile 文件中的指令来构建一个新的镜像

    选项 作用
    -t 镜像的名字及标签, REPOSITORY[:TAG]
    path Dockerfile 所在目录
  14. docker tag [选项] IMAGE[:TAG] 标记镜像

    docker tag ubuntu:20.04 myubuntu:v3

  15. docker push [选项] NAME[:TAG]上传镜像

Dockerfile

结构

  1. 基础镜像信息(centos ubuntu …… nginx ……)
  2. 维护者信息(docker search可查看)
  3. 镜像操作指令(tar yum make)
  4. 容器启动时执行指令(系统启动时,第一个加载的程序/脚本/命令)

Dockerfile操作指令

指令 描述
FROM 指定新镜像所基于的镜像,第一条指令必须为 FROM 指令,每创建一个镜像就需要一条 FROM 指令,例如 centos:7。FROM 有两层含义:①开启一个新的镜像 ②必须写的一行指令。
MAINTAINER 说明新镜像的维护人信息(可写可不写)。
RUN 每一条 RUN 后面跟一条命令,在所基于的镜像上执行命令,并提交到新的镜像中,RUN 必须大写。
CMD 指定启动容器时需要运行的命令或者脚本,Dockerfile 只能有一条 CMD 命令如果指定多条则只能执行最后一条,“bin/bash”也是一条 CMD,并且会覆盖 image 镜像里面的 cmd。
EXPOSE 指定新镜像加载到 Docker 时要开启的端口暴露端口,就是这个容器暴露出去的端口号。
ENV 设置一个环境变量的值,会被后面的 RUN 使用。容器可以根据自己的需求创建时传入环境变量,镜像不可以。
ADD ①将源文件复制到目标文件,源文件要与 Dockerfile 位于相同目录中,②或者是一个 URL,③若源文件是压缩包则会将其解压缩。
COPY 将本地主机上的文件/目录复制到目标地点,源文件/目录要与 Dockerfile 在相同的目录中,COPY 只能用于复制,ADD 复制的同时,如果复制的对象是压缩包,ADD 还可以解压,COPY 比 ADD 节省资源。
VOLUME 在容器中创建一个挂载点,简单来说就是 -v,指定镜像的目录挂载到宿主机上(由容器创建和管理)。
USER 指定运行容器时的用户。
WORKDIR 为后续的 RUN、CMD、ENTRYPOINT 指定工作目录,相当于是一个临时的“cd”,否则需要使用绝对路径,例如 WORKDIR /opt。移动到 opt 目录,并在这下面的指令都是在 opt 下执行。

第十二章

X Window

X Window系统由三个基本元素组成

  1. X 服务端 (X server)
    • 是控制输入及输出设备并维护相关资源的程序,它接收输入设备的信息,并将其传给X Client,而将X Client传来的信息输出到屏幕上(在屏幕上构造方块(窗口),然后画出里面的元素)
    • 每一套显示设备只对应唯一的X Server
    • 由系统供应商提供,通常无法被用户修改
    • 只是一个普通的用户程序
  2. X 客户端
    • 是应用程序的核心部分,它与硬件无关,每个应用程序就是一个X Client
    • X Client可以是终端仿真器(Xterm)或图形界面程序,它不直接对显示器绘制或者操作图形,而是与X Server通信,由X Server控制显示
    • X Client无法直接影响视窗行为或显示效果,它们只能发送一个请求给X Server,由X Server来完成这些的请求
    • 多种多样的X Client程序向X Server发出请求,由X Server运算得出结果,再显示到指定的地方去
  3. X 通信通道
    • X通信通道的主体是xlib(X函数库)
    • X Client调用xlib,利用相应的通信功能向X Server发出请求
    • X Server完成任务之后,同样调用xlib把结果显示指点的设备上去

image-20230527005545395

修改系统运行级别

  1. 临时

    • init n或telinit n

      n为级别号,root权限(init 5)

    • startx

      启动图形化环境(需要安装图形化界面)

      startx

  2. 长期

    • 修改配置文件 /etc/inittab(CentOS6及以前)
    • systemctl set-default .target(CentOS7之后)
      • 查看 /etc/inittab文件内容 cat /etc/inittab
      • 查看runlevel 与.target的对应关系 ls -l /lib/systemd/system/runlevel.target

题目

列出至少 5 个软连接和硬连接的区别

  1. 存储方式:硬连接是在文件系统中创建一个新的目录项,指向同一个 inode 节点,而软连接则是创建一个新的文件,其中包含指向原文件的路径。
  2. 跨文件系统:硬连接只能在同一个文件系统中创建,而软连接可以跨文件系统创建。
  3. 文件类型:硬连接只能链接普通文件,而软连接可以链接任何类型的文件,包括目录。
  4. 修改原文件:修改原文件会影响所有硬连接,而软连接不会受到影响。
  5. 删除原文件:删除原文件后,硬连接仍然可以访问文件内容,而软连接则会失效。
  6. 文件大小:硬连接和原文件大小相同,而软连接大小为指向原文件的路径长度。
  7. 数量限制:硬连接数量没有限制,而软连接数量受到文件系统的限制。

以图解方式说明 stand-alone 工作模式,并说明选择该工作模式的原则。

image-20230526152600712

  1. xinetd能够同时监听多个指定的端口,在接受用户请求时,它能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求
  2. 可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程
  3. 运行单个xinetd就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源
  4. 但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降

写出至少 5个 gdb,调试过程中常用的指令,并说明指令的作用

命令 用途 例子
file 指定需要进行调试的程序。 file myprogram
step 单步(行)执行,如果遇到函数会进入函数内部。 step
next 单步(行)执行,如果遇到函数不会进入函数内部。 next
run 启动被执行的程序。 run
quit 退出gdb调试环境。 quit
print 查看变量或者表达式的值。 print myvar
break 设置断点,程序执行到断点就会暂停起来。 break myfunction

简述 U 盘挂载到 Linux文件系统的步骤

  1. 确认 U 盘插入电脑,并且电脑能够识别 U 盘。可以使用 fdisk 命令查看系统中的块设备列表,确认 U 盘的设备名称,例如 /dev/sdb

  2. 创建一个用于挂载 U 盘的目录。可以使用 mkdir 命令创建一个新目录,例如 /mnt/usb

  3. 使用 mount 命令将 U 盘挂载到目录中。可以使用以下命令将 U 盘挂载到 /mnt/usb 目录中:

    mount /dev/sdb1 /mnt/usb

    其中 /dev/sdb1 是 U 盘的设备名称,/mnt/usb 是挂载目录。

  4. 确认 U 盘已经成功挂载。可以使用 df 命令查看文件系统的使用情况,确认 U 盘已经挂载到指定目录中。

  5. 卸载 U 盘。在使用 U 盘之后,需要将其从文件系统中卸载,以避免数据丢失。可以使用以下命令卸载 U 盘:

    umount /mnt/usb

    其中 /mnt/usb 是挂载目录。

以图解的方式说明 VI 的模式有哪些,每个模式下可以做什么操作

image-20230526140311172

  1. 命令模式

    命令模式是 vi 的默认模式,也是最常用的模式。在命令模式下,可以执行各种命令,例如移动光标、删除文本、复制粘贴等。以下是一些常用的命令:

    • hjkl:分别向左、下、上、右移动光标。
    • x:删除光标所在位置的字符。
    • dd:删除光标所在行。
    • yy:复制光标所在行。
    • p:粘贴已复制或删除的文本。
    • u:撤销上一次操作。
    • ZZ :保存
  2. 插入模式

    插入模式用于编辑文本。在命令模式下,按下 iao 等键可以进入插入模式。以下是一些常用的命令:

    • i:在光标前插入文本。
    • a:在光标后插入文本。
    • o:在光标所在行下方插入新行。
    • Esc:退出插入模式,返回命令模式。
  3. 底行模式

    底行模式用于执行一些高级命令,例如保存文件、退出 vi、查找替换等。在命令模式下,按下 : 键可以进入底行模式。以下是一些常用的命令:

    • :w:保存文件。
    • :wq:保存文件并退出 vi
    • :q:退出 vi
    • :q!:强制退出 vi,放弃所有修改。
    • :/pattern:查找匹配 pattern 的文本。
    • :s/old/new/g:将当前行中所有匹配 old 的文本替换为 new
    • :n:跳转到第 n 行。
    • :set number:显示行号。
    • :set nonumber:隐藏行号。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇