Linux系统与网络管理

黄玮

第二章:Linux服务器系统使用基础


From GUI to CLI

软件包管理


提纲


Ubuntu 16.04 vs 20.04 /etc/apt/sources.list


sources.list 格式说明

man sources.list

软件包类型代号

以下是Wikipedia的软件包分类和支持分类说明

免费软件 非免费软件
官方支持 main restricted
官方不支持(社区或第三方支持) universe multiverse

软件包类型代号


举例讲解

deb http://cn.archive.ubuntu.com/ubuntu/ xenial multiverse

apt-get update的过程是访问一个构造好的URL,该URL使用内置的字符串“拼接”规则构造成

http://cn.archive.ubuntu.com/ubuntu/dists/xenial/multiverse/binary-amd64/

ports.ubuntu.com


验证 ports.ubuntu.com 访问


解决 ports.ubuntu.com 导致的无人值守安装卡住问题


apt-get update VS. apt-get upgrade VS. apt-get dist-upgrade

man apt-get

apt-get remove VS. apt-get purge VS. apt-get clean


apt-get autoclean VS. apt-get autoremove


查找你需要的软件包 —— 如果你知道软件包名

apt-get install <package_name>

查找你需要的软件包 —— 如果你知道软件名,但不知道软件包名

apt-cache search <software_keyword>
apt-get install <software_keyword><TAB><TAB>

# example
apt-cache search mysql
apt-cache search apache

# 利用终端的自动补全机制获得以mysql关键字开头的所有软件包名
apt-get install mysql<TAB><TAB>

apt-file - APT package searching utility – command-line interface

apt-get install apt-file
man apt-file

apt-file is a command line tool for searching files in packages for the APT package management system.


aptitude - 对apt-get进行封装的一个更友好、更易用(主要体现在自动解决软件依赖bug上)包管理工具

apt-get install aptitude
man aptitude
$ aptitude show mysql-server
Package: mysql-server
State: not installed
Version: 5.7.16-0ubuntu0.16.04.1
Priority: optional
Section: database
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Uncompressed Size: 106 k
Depends: mysql-server-5.7
Provided by: percona-server-server-5.6 (5.6.22-rel71.0-0ubuntu4), percona-server-server-5.6
             (5.6.22-rel71.0-0ubuntu4.1), percona-xtradb-cluster-server-5.6 (5.6.21-25.8-0ubuntu3),
             percona-xtradb-cluster-server-5.6 (5.6.21-25.8-0ubuntu3.2)
Description: MySQL database server (metapackage depending on the latest version)
 This is an empty package that depends on the current "best" version of mysql-server (currently
 mysql-server-5.7), as determined by the MySQL maintainers. Install this package if in doubt about which
 MySQL version you need. That will install the version recommended by the package maintainers.

 MySQL is a fast, stable and true multi-user, multi-threaded SQL database server. SQL (Structured Query
 Language) is the most popular database query language in the world. The main goals of MySQL are speed,
 robustness and ease of use.
Homepage: http://dev.mysql.com/

$ aptitude show aptitude
Package: aptitude
State: installed
Automatically installed: no
Multi-Arch: foreign
Version: 0.7.4-2ubuntu2
Priority: optional
Section: admin
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Uncompressed Size: 4,205 k
Depends: aptitude-common (= 0.7.4-2ubuntu2), libapt-pkg5.0 (>= 1.1), libboost-iostreams1.58.0, libc6 (>=
         2.14), libcwidget3v5, libgcc1 (>= 1:3.0), libncursesw5 (>= 6), libsigc++-2.0-0v5 (>= 2.6.1),
         libsqlite3-0 (>= 3.6.5), libstdc++6 (>= 5.2), libtinfo5 (>= 6), libxapian22v5
Recommends: libparse-debianchangelog-perl, sensible-utils
Suggests: apt-xapian-index, aptitude-doc-en | aptitude-doc, debtags, tasksel
Conflicts: aptitude:i386
Provides: aptitude:i386 (= 0.7.4-2ubuntu2)
Provided by: aptitude:i386 (0.7.4-2ubuntu2)
Description: terminal-based package manager
 aptitude is a package manager with a number of useful features, including: a mutt-like syntax for matching
 packages in a flexible manner, dselect-like persistence of user actions, the ability to retrieve and
 display the Debian changelog of most packages, and a command-line mode similar to that of apt-get.

 aptitude is also Y2K-compliant, non-fattening, naturally cleansing, and housebroken.
Homepage: http://aptitude.alioth.debian.org/

aptitude, apt-get, apt

整理自:The Debian Administrator’s Handbook


在安装前如何确认软件包的版本、来源

# apt-cache policy <package-name>
# apt policy <package-name>
apt-cache policy mysql-server

mysql-server:
  Installed: (none)
  Candidate: 5.7.21-0ubuntu0.16.04.1
  Version table:
     5.7.21-0ubuntu0.16.04.1 500
        500 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main i386 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main i386 Packages
     5.7.11-0ubuntu6 500
        500 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
        500 http://cn.archive.ubuntu.com/ubuntu xenial/main i386 Packages

安装指定版本的软件

# 根据 apt-cache policy 输出结果里当前软件包的所有候选版本号
# apt install <package>=<version>
# 默认总是安装最新版
sudo apt install mysql-server=5.7.11-0ubuntu6

软件被装到哪里去了

# 查找apache2软件包依赖哪些独立软件包(名)
$ apt-cache depends apache2

# 查看指定软件包(名)在系统上创建了哪些目录和文件
$ dpkg -L apache2

# 由于apt-get在安装一款软件包时会自动安装相关依赖的软件包
# 所以,通常还需要查看这些被自动依赖安装的软件包又在系统上创建了哪些目录和文件
$ dpkg -L apache2-data
$ dpkg -L apache2-bin

谨慎修改/etc/apt/sources.list和在/etc/apt/sources.list.d/下创建第三方镜像配置文件!!!

谨慎修改/etc/apt/sources.list和在/etc/apt/sources.list.d/下创建第三方镜像配置文件!!!

谨慎修改/etc/apt/sources.list和在/etc/apt/sources.list.d/下创建第三方镜像配置文件!!!


使用第三方镜像源的风险


DEB软件包管理工具 —— dpkg

man dpkg
$ dpkg --help
Usage: dpkg [<option> ...] <command>

Commands:
  -i|--install       <.deb file name> ... | -R|--recursive <directory> ...
  -s|--status <package> ...        Display package status details.
  -p|--print-avail <package> ...   Display available version details.
  -L|--listfiles <package> ...     List files 'owned' by package(s).
  -l|--list [<pattern> ...]        List packages concisely.
  -S|--search <pattern> ...        Find package(s) owning file(s).

使用源代码方式(编译)安装

文件管理基本命令



文件管理


文本内容检索

管道 Pipe


回顾「第一章」实验中用到的这个命令里使用的操作符:|

cd ~/cd && find . -type f -print0 | xargs -0 md5sum > md5sum.txt

上一页的例子中


explainshell.com 对上述复杂命令的可视化解读

sed


SED的英文全称是Stream EDitor,它是一个简单而强大的文本解析转换工具,在1973-1974年期间由贝尔实验室的Lee E. McMahon开发。

McMahon创建了一个通用的行编辑器,最终变成为了SED。SED的很多语法和特性都借鉴了ed编辑器。设计之初,它就已经支持正则表达式,SED可以从文件中接受类似于管道的输入,也可以接受来自标准输入流的输入。

SED由自由软件基金组织(FSF)开发和维护并且随着GNU/Linux进行分发,因此,通常它也称作GNU SED


SED 典型用途


SED Quick Reference



学习 SED 的模式

正则表达式


正则表达式是用于匹配字符串中字符组合的 模式 ,可以用来检查一个串是否 包含 有某种子串、将匹配的子串 替换 或者从某个串中 取出 符合某个条件的子串等。


在线正则表达式调试工具

regular expression tester

不同编程语言对正则表达式的支持存在细微差异


Linux 命令行工具对正则表达式的支持

sed
# -E, -r, --regexp-extended
#               use extended regular expressions in the script (for portability use POSIX -E)

awk
# man awk

grep
# -E, --extended-regexp
#               Interpret PATTERNS as extended regular expressions (EREs, see below).
# -G, --basic-regexp
#        Interpret PATTERNS as basic regular expressions (BREs, see below).  This is the default.
# -P, --perl-regexp
#        Interpret PATTERNS as Perl-compatible regular expressions (PCREs).  This option is experimental when combined
#        with the -z (--null-data) option, and grep -P may warn of unimplemented features.

社区驱动的「脱水版」帮助手册


tldr: To Long, Don’t Read

跟着「范例」学命令



快速安装与上手使用

sudo apt update && sudo apt install tldr
# 从自建 gitee 镜像下载 tldr 所有手册页
git clone https://gitee.com/c4pr1c3/tldr ~/.tldr/cache

# 如果需要查看中文帮助信息
# ⚠️ 警告⚠️ 很多手册页并没有中文翻译版
# 以下方法切换默认查询目录后会导致很多命令查询失败
## 确保进入正确目录
cd $HOME/.tldr/cache

## 确认当前目录下不存在 pages.en 目录
ls pages.en
# ls: cannot access 'pages.en': No such file or directory

## 备份默认英文帮助子目录
mv pages pages.en

## 将中文帮助目录设置为默认查询帮助信息目录
ln -s pages.zh pages

# 恢复默认英文查询手册页设置
rm pages
ln -s pages.en pages

文本内容查找替换神器之AWK


其他文本内容处理小工具


一些文本处理的任务


学会使用搜索引擎

别名机制 - alias


# 查看当前shell环境中已定义的别名有哪些
alias
# 注意alias不是一个外部命令(文件),而是bash的一个内置函数
man alias
# 在bash的手册页中去搜索alias
man bash

文件压缩与解压缩



Linux 下 zip 文件解压乱码如何解决?

进程管理



子进程管理

# 执行以下ping命令后终端所有操作被“无视忽略掉”
ping www.baidu.com
# 直到使用CTRL-C快捷键组合输入,可以终止该ping进程
CTRL-C
# 我们试着把ping进程放到“后台”执行
ping www.baidu.com &
# 此时终端不断被“涌出”的ping输出结果“污染”
# 此时CTRL-C无效
CTRL-C
# 以下“2连击”可以终止该ping进程
fg
CTRL-C
# 我们再试着把ping进程放到“后台”执行,这一次我们把标准错误输出先重定向到标准输出,然后再把标准输出重定向到“黑洞”文件
ping www.baidu.com 1>/dev/null 2>&1 &
# 整个世界都清净了,终端不会再被“涌出”的ping输出结果“污染”
# 查看进程会发现ping在“后台”一直运行着
ps aux | grep ping
ping www.cuc.edu.cn 1>/dev/null 2>&1 &
# 杀死所有ping进程
killall ping

子进程管理实验Live Demo

子进程管理Demo


关于输出重定向

man bash
# search "Redirecting Standard Output and Standard Error"

目录管理


环境变量


网络调试



网络调试常见第三方工具


相关重要配置文件

提问的智慧 - 描述你的环境


自己回答以下问题(软件相关)


自己回答以下问题(软件相关进阶问题)


自己回答以下问题(软件相关高级问题)

如果能初步判断出问题的关联应用程序,那么首先建议阅读应用程序官方的bug报告指南,然后尽力去收集:


自己回答以下问题(网络相关)


自己回答以下问题(硬件相关)


提问的智慧 - 使用自动化的工具描述你的环境

# 获得硬件信息
report-hw

# reportbug 需要另行安装

reportbug
# *** ERROR: "Ubuntu" BTS is currently unsupported. Please use "ubuntu-bug" (from the apport package) for reporting bugs in Ubuntu. You can report bugs to Debian by
# specifying 'bts debian' in your ~/.reportbugrc or by passing the -B debian option on the commandline (see reportbug(1)).

reportbug --template --bts debian -S normal vim

# 将指定软件的相关信息保存到本地而不是直接提交给软件作者
sudo ubuntu-bug openssh-server --save openssh-server.bug

面向大模型的提示词工程技巧


六要素模型 (1/2)

  1. 指令 。明确任务的目的和要求,使用清晰、准确、简洁的语言表达。
  2. 上下文 。提供与任务相关的详细信息或上下文,帮助模型理解任务的背景和意图。如“Ubuntu 22.04”、“Python 3.11 和基于 requests 库”。
  3. 输入数据 。用户输入的内容或问题,作为模型生成输出的依据,如“输入的数据是 JSON 格式”、“通过命令行参数传递输入”等。

六要素模型 (2/2)

  1. 输出指示 。指定输出的类型或格式,控制模型生成的结果的长度、结构、风格等。
  2. 示例 。提供一些输入相关的示例或参考文本,展示期望的输出效果。
  3. 角色 。指定模型所扮演的角色或身份,影响模型的专业知识领域、语言风格和回答方式。

和“提问的智慧”进行比较

  1. 在提问或使用提示词之前,先尝试搜索已有的信息或资源,以避免重复或无效的问题。
  2. 清晰、准确、简洁地表达你的问题或目的,避免模糊、冗长或不相关的内容。
  3. 提供一些示例或上下文,以帮助理解你的问题或目的,但不要过多或过少。
  4. 尊重你的回答者或模型的时间和能力,不要提出过于简单或过于复杂的问题。
  5. 从回答或输出中学习,并对其进行验证和反馈。

参考文献