linux学习笔记2

体系结构
在这里插入图片描述
在这里插入图片描述
【1】流行的两种软件包管理机制
(1)Debian Linux首先提出“软件包”的管理机制—Deb软件包
将应用程序的二进制文件、配置文件、man/info帮助页面等文件合并打包在一个文件中,用户使用软件包管理器直接操作软件包,完成获取、安装、卸载、查询等操作。
(2)Redhat Linux基于这个理念推出了自己的软件包管理机制—Rpm软件包
(3)随着Linux操作系统规模不断扩大,系统中软件包间复杂的依赖关系,导致Linux用户麻烦不断
(4)Debian Linux开发出了APT软件包管理器。
1)检查和修复软件包依赖关系
2)利用Internet网络帮助用户主动获取软件包
(5)APT工具再次促进了Deb软件包更为广泛地使用,成为Debian Linux的一个无法替代的亮点。

【2】软件包的类型
(1)Ubuntu有两种类型的软件包:二进制软件包(deb)和源码包(deb-src)
1)二进制软件包(Binary Packages):它包含可执行文件、库文件、配置文件、man/info页面、版权声明和其它文档。
2)源码包(Source Packages):包含软件源代码、版本修改说明、构建指令及编译工具等。
先由tar工具归档为.tar.gz文件,然后再打包成.dsc文件。
(2)在用户不确定一个软件包类型时,可以使用file命令查看文件类型。

【3】软件包的命名
软件包的命名遵循以下约定:
Filename_Version-Reversion_Architecture.deb
软件包名称 Filename
软件版本 Version
修订版本 Reversion
体系架构A rchitecture

【4】软件包管理工具分类
(1)根据用户交互方式的不同,可以将常见的软件包管理工具分为三类:
类别 常见工具举例 描述
命令行 dpkg-deb、dpkg、apt 在命令行模式下完成软件包管理任务。为完成软件包
的获取、查询、软件包依赖性检查、安装、卸载等任务
需要使用各自不同的命令
文本窗口界面 dselect、aptitude、tasksel 在文本窗口模式中,使用窗口和菜单可以完成软件包管理任务
图形界面 synaptic 在X-Window图形桌面环境中运行,具有更好的交互性、可读性、易用性等特点

【5】dpkg相关命令
dpkg -i 安装一个在本地文件系统上存在的Debian软件包
dpgk -r 移除一个已经安装的软件包
dpkg -P 移除已安装软件包及配置文件
dpkg -L 列出安装的软件包清单
dpkg -s 显出软件包的安装状态

【6】总结与思考
(1) 本节课主要对软件包管理机制进行了总体介绍,并详细讲解了dpkg软件包管理器的用法
(2)思考
1)dpkg和apt软件包管理器有什么区别?

在这里插入图片描述

安装和运行

linux@ubuntu:~/桌面/111/soft$ mv '/var/run/vmblock-fuse/blockdir/5180e293/rxvt_1%3a2.6.4-14_i386.deb' .
linux@ubuntu:~/桌面/111/soft$ sudo dpkg -i rxvt_1%3a2.6.4-14_i386.deb
[sudo] password for linux: 
Selecting previously unselected package rxvt.
(正在读取数据库 ... 系统当前共安装有 186332 个文件和目录。)
正在解压缩 rxvt (从 rxvt_1%3a2.6.4-14_i386.deb) ...
正在设置 rxvt (1:2.6.4-14) ...
update-alternatives: 使用 /usr/bin/rxvt-xterm 来提供 /usr/bin/rxvt (rxvt),于 自动模式 中。
update-alternatives: 错误: 无 rclock 的候选项。
正在处理用于 man-db 的触发器...
linux@ubuntu:~/桌面/111/soft$ rxvt

在这里插入图片描述
卸载

linux@ubuntu:~/桌面/111/soft$ sudo dpkg -P rxvt
(正在读取数据库 ... 系统当前共安装有 186365 个文件和目录。)
正在卸载 rxvt ...
update-alternatives: 使用 /usr/bin/rxvt-xpm 来提供 /usr/bin/rxvt (rxvt),于 自动模式 中。
正在清除 rxvt 的配置文件 ...
正在处理用于 man-db 的触发器...
linux@ubuntu:~/桌面/111/soft$ rxvt
bash: /usr/bin/rxvt: No such file or directory

linux@ubuntu:~/桌面/111/soft$ rxvt
bash: /usr/bin/rxvt: No such file or directory
linux@ubuntu:~/桌面/111/soft$ sudo dpkg -L rxvt
[sudo] password for linux: 
未曾安装软件包 rxvt。
使用 dpkg --info (= dpkg-deb --info) 来检测打包好的文件,
还可以通过 dpkg --contents (= dpkg-deb --contents) 来列出它们的内容。
linux@ubuntu:~/桌面/111/soft$ sudo dpkg -i rxvt_1%3a2.6.4-14_i386.deb
Selecting previously unselected package rxvt.
(正在读取数据库 ... 系统当前共安装有 186332 个文件和目录。)
正在解压缩 rxvt (从 rxvt_1%3a2.6.4-14_i386.deb) ...
正在设置 rxvt (1:2.6.4-14) ...
update-alternatives: 使用 /usr/bin/rxvt-xterm 来提供 /usr/bin/rxvt (rxvt),于 自动模式 中。
update-alternatives: 错误: 无 rclock 的候选项。
正在处理用于 man-db 的触发器...
linux@ubuntu:~/桌面/111/soft$ sudo dpkg -L rxvt
/.
/usr
/usr/bin
/usr/bin/rxvt-xterm
/usr/bin/rxvt-xpm
/usr/bin/rclock
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/rclock.1.gz
/usr/share/man/man1/rxvt-xterm.1.gz
/usr/share/doc
/usr/share/doc/rxvt
/usr/share/doc/rxvt/examples
/usr/share/doc/rxvt/examples/example.menu
/usr/share/doc/rxvt/examples/jedmenu.sl
/usr/share/doc/rxvt/examples/menu
/usr/share/doc/rxvt/examples/rxvt.menu
/usr/share/doc/rxvt/examples/terminal.menu
/usr/share/doc/rxvt/html
/usr/share/doc/rxvt/html/rxvt.html
/usr/share/doc/rxvt/html/rxvtRef-frame.html
/usr/share/doc/rxvt/html/rxvtRef-toc.html
/usr/share/doc/rxvt/html/rxvtRef.html
/usr/share/doc/rxvt/BUGS
/usr/share/doc/rxvt/README.xvt.gz
/usr/share/doc/rxvt/README.menu
/usr/share/doc/rxvt/xterm.seq.gz
/usr/share/doc/rxvt/FAQ.Debian.gz
/usr/share/doc/rxvt/changelog.Debian.gz
/usr/share/doc/rxvt/README.Debian
/usr/share/doc/rxvt/copyright
/usr/share/doc/rxvt/changelog.gz
/usr/share/doc/rxvt/FAQ.gz
/usr/share/doc/rxvt/README.greek.gz
/usr/share/doc/rxvt/rxvtRef.txt.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/rxvt
/usr/share/menu
/usr/share/menu/rxvt
/etc
/etc/menu-methods
/etc/menu-methods/rxvt
/usr/share/man/man1/rxvt-xpm.1.gz
linux@ubuntu:~/桌面/111/soft$ sudo dpkg -s rxvt
Package: rxvt
Status: install ok installed
Priority: optional
Section: x11
Installed-Size: 536
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Architecture: i386
Version: 1:2.6.4-14
Provides: x-terminal-emulator
Depends: libc6 (>= 2.4), libx11-6, libxpm4
Conffiles:
 /etc/menu-methods/rxvt b0dfbc8f0b846ed1d5021cbdcc3b872a
Description: VT102 terminal emulator for the X Window System
 Rxvt is an 8-bit clean, color xterm replacement that uses significantly
 less memory than a conventional xterm, mostly since it doesn't support
 toolkit configurability or Tek graphics, but also since features can
 be removed at compile-time to reflect your needs.
 .
 The distribution also includes rclock, the smaller/better xclock
 replacement with appointment scheduling and xbiff functionality.
Original-Maintainer: Jan Christoph Nordholz <hesso@pool.math.tu-berlin.de>
linux@ubuntu:~/桌面/111/soft$ sudo dpkg -P rxvt
(正在读取数据库 ... 系统当前共安装有 186365 个文件和目录。)
正在卸载 rxvt ...
update-alternatives: 使用 /usr/bin/rxvt-xpm 来提供 /usr/bin/rxvt (rxvt),于 自动模式 中。
正在清除 rxvt 的配置文件 ...
正在处理用于 man-db 的触发器...
linux@ubuntu:~/桌面/111/soft$ sudo dpkg -s rxvt
系统没有安装软件包 rxvt,因而没有相关的信息。
使用 dpkg --info (= dpkg-deb --info) 来检测打包好的文件,
还可以通过 dpkg --contents (= dpkg-deb --contents) 来列出它们的内容。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
【1】APT工作原理
(1)Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存在软件仓库中,进行有效地组织和管理。
然后将软件仓库置于许许多多的镜像服务器中,并保持基本一致,因此,对于用户,这些镜像服务器就是他们的软件源(reposity)

(2)在Ubuntu系统中,使用软件源配置文件/etc/apt/sources.list列出最适合访问的镜像站点地址。

(3)软件源配置文件只是告诉Ubuntu系统可以访问的镜像站点地址。但那些镜像站点都拥有什么软件资源并不清楚。
若是每安装一个软件包,就在服务器上寻找一边,效率是很低的。因而就有必要为这些软件资源列出个清单(建立索引年文件),
以便本地主机查询,这就是APT软件包管理器的工作原理。

cyz@cyz-virtual-machine:~$ ls /
bin    dev   lib    libx32      mnt   root  snap      sys  var
boot   etc   lib32  lost+found  opt   run   srv       tmp
cdrom  home  lib64  media       proc  sbin  swapfile  usr
cyz@cyz-virtual-machine:~$ cd /
cyz@cyz-virtual-machine:/$ vi etc/apt/sources.list

sudo vi可以编辑list文件

(4)/etc/apt/sources.list。本质就是一个普通的文本文件,就可以在超级管理员授权下,使用任何文本编辑器进行编辑。在该文件中,
添加的软件源镜像站点称为一个配置项,并遵循以下格式:
DebType AddressType://Hostaddress/Ubuntu Distribution Component1 Component2…
deb http://cn.archive.ubuntu.com/ubuntu/ feisty main restricted universe multiverse

(5) 根据软件包的开发组织对该软件的支持程度,以及遵从的开源程度,划分为如下四类:
1)核心(Main):官方维护的开源软件,是由Ubuntu官方完全支持的软件,包括大多数流行的、稳定的开源软件,是Ubuntu默认安装的基本软件包;
2)公共(Universe):社区维护的开源软件,是由Ubuntu社区的计算机爱好者维护的软件。这些软件包没有安全升级的保障。
		  用户在使用时,需要考虑这些软件包存在的不稳定性;
3)受限(Restricted):官方维护的非开源软件,是专供特殊用途,而且没有自由软件版权,不能直接修改软件,但依然被Ubuntu团队支持的软件;
4)多元化(Multiverse):非Ubuntu官方维护的非开源软件,用户的使用这些软件包时,需要特别注意版权问题。

(6)刷新软件源
1)修改了配置文件—/etc/apt/source.list,目的只是告知软件源镜像站点的地址。但那些所指向的镜像站点所具有的软件资源并不清楚,
需要将这些资源列个清单,以便本机主机知晓可以申请哪些资源。
2)使用“apt-get update”命令会扫描每一个软件源服务器,并为该服务器所具有软件包资源建立索引文件,存放在本地的/var/lib/apt/lists目录中。

【2】软件管理相关工作
在这里插入图片描述

(1)管理软件包
 1)在Ubuntu Linux中,通常使用apt-get命令管理软件包,只需告知软件包名字,就可以自动完成软件包的获取、安装、编译和卸载,以及检查软件包依赖关系。
 2)apt-get命令提供了一个软件包管理额命令行平台。在这个平台上使用更丰富的子命令,完成具体的管理任务。
	apt-get subcommands [-d|-f|-m|-q|--purge|--reinstall|-b|-s|-y|-u|-h|-v] pkg

在这里插入图片描述

 (2) 修复软件包依赖关系
 1)如果由于故障而中断软件安装过程,可能会造成关联的软件包只有部分安装。之后,用户就会发现该软件既不能重装又不能删除。
 2)作为组合命令,下面前者用于检查软件包依赖关系,后者用于修复依赖关系。
	“apt-get check”--“apt-get -f install”
 3) 在处理依赖关系上,apt-get会自动下载并安装具有依赖关系(depends)的软件包,但不会处理与安装软件包存在推荐(recommends)和建议(suggests关系的软件包。
cyz@cyz-virtual-machine:/$ sudo apt-get check
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
您也许需要运行“apt --fix-broken install”来修正上面的错误。
下列软件包有未满足的依赖关系:
 rxvt:i386 : 依赖: libc6:i386 (>= 2.4) 但是它还没有被安装
             依赖: libx11-6:i386 但是它还没有被安装
             依赖: libxpm4:i386 但是它还没有被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以指定一个解决办法)。
cyz@cyz-virtual-machine:/$ sudo apt-get -f install
cyz@cyz-virtual-machine:/$ sudo apt-get update
获取:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]     
命中:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease              
命中:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates InRelease
命中:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-backports InRelease    
已下载 129 kB,耗时 10(12.6 kB/s)                                           
正在读取软件包列表... 完成


(3)更新软件包
 1)在Ubuntu Linux中,只需使用命令“apt-get upgrade”就可以轻松地将系统中的所有软件包一次性升级到最新版本
cyz@cyz-virtual-machine:/$ dpkg -s rxvt
Package: rxvt
Status: install ok installed
Priority: optional
Section: x11
Installed-Size: 536
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Architecture: i386
Version: 1:2.6.4-14
Provides: x-terminal-emulator
Depends: libc6 (>= 2.4), libx11-6, libxpm4
Conffiles:
 /etc/menu-methods/rxvt b0dfbc8f0b846ed1d5021cbdcc3b872a
Description: VT102 terminal emulator for the X Window System
 Rxvt is an 8-bit clean, color xterm replacement that uses significantly
 less memory than a conventional xterm, mostly since it doesn't support
 toolkit configurability or Tek graphics, but also since features can
 be removed at compile-time to reflect your needs.
 .
 The distribution also includes rclock, the smaller/better xclock
 replacement with appointment scheduling and xbiff functionality.
Original-Maintainer: Jan Christoph Nordholz <hesso@pool.math.tu-berlin.de>
cyz@cyz-virtual-machine:/$ dpkg -P rxvt
dpkg: 错误: 所请求的操作需要超级用户权限
cyz@cyz-virtual-machine:/$ sudo dpkg -P rxvt
(正在读取数据库 ... 系统当前共安装有 216384 个文件和目录。)
正在卸载 rxvt:i386 (1:2.6.4-14) ...
update-alternatives: 使用 /usr/bin/rxvt-xpm 来在自动模式中提供 /usr/bin/rxvt (rxvt)
正在清除 rxvt:i386 (1:2.6.4-14) 的配置文件 ...
正在处理用于 man-db (2.10.2-1) 的触发器 ...
cyz@cyz-virtual-machine:/$ dpkg -s rxvt
dpkg-query: 系统没有安装软件包 rxvt,因而没有相关的信息
使用 dpkg --info (= dpkg-deb --info) 来检测打包好的文件,
(4)安装软件包
 1)在准备好软件源并连通网络后,用户只需告知安装软件的名称,“apt-get install”命令就可以轻松完成整个安装过程,而无需考虑软件包的版本、优先级、依赖关系等
 2)使用“apt-get install”下载软件包大体分为四步:
	STEP1: 扫描本地存放的软件包更新列表(有apt-get update命令刷新更新列表),找到最新版本的软件包
	STEP2: 进行软件包依赖关系检查,找到支持该软件正常运行的所有软件包;
	STEP3: 从软件源所指的镜像站点中,下载相关软件包;
	STEP4: 解压软件包,并自动完成应用程序的安装和配置。
cyz@cyz-virtual-machine:/$ sudo apt-get install rxvt
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
没有可用的软件包 rxvt,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,
或者只能在其他发布源中找到

E: 软件包 rxvt 没有可安装候选
cyz@cyz-virtual-machine:/$ sudo apt-get install rxvt --reinstall
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
没有可用的软件包 rxvt,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,
或者只能在其他发布源中找到

E: 软件包 rxvt 没有可安装候选


(5)重新安装软件包
 当用户不小心损坏了已经安装的软件包,而需要修复。或者,希望重新安装软件包中某些文件的最新版本,可以重新安装软件包
(6)卸载软件包
 1)不完全卸载
 “apt-get remove”会关注那些与被删除的软件包相关的其它软件包,删除一个软件包时,将会连带删除与该软件包有依赖关系的软件包。
 2)完全卸载
 “apt-get --purge remove”命令在卸载软件包文件的同时,还删除该软件包所使的配置文件。
(7)清理软件包缓冲区
 1)如果用户认为软件包缓冲区中的文件没有任何价值了,有必要删除全部下载的软件包。可以使用“apt-get clean”清理整个软件包缓冲区,除了lock锁文件和partial目录。
    缓冲目录:  /var/cache/apt/archives
        清理命令:  sudo apt-get clean
cyz@cyz-virtual-machine:/$ ls /var/cache/apt/archives/
gcc-12-base_12.3.0-1ubuntu1~22.04_i386.deb
krb5-locales_1.19.2-2ubuntu0.4_all.deb
libbsd0_0.11.5-1_i386.deb
libc6_2.35-0ubuntu3.8_i386.deb
libcom-err2_1.46.5-2ubuntu1.1_i386.deb
libcrypt1_1%3a4.4.27-1_i386.deb
libgcc-s1_12.3.0-1ubuntu1~22.04_i386.deb
libgssapi-krb5-2_1.19.2-2ubuntu0.4_i386.deb
libidn2-0_2.3.2-2build1_i386.deb
libk5crypto3_1.19.2-2ubuntu0.4_i386.deb
libkeyutils1_1.6.1-2ubuntu3_i386.deb
libkrb5-3_1.19.2-2ubuntu0.4_i386.deb
libkrb5support0_1.19.2-2ubuntu0.4_i386.deb
libmd0_1.0.4-1build1_i386.deb
libnsl2_1.3.0-2build2_i386.deb
libnss-nis_3.1-0ubuntu6_i386.deb
libnss-nisplus_1.3-0ubuntu6_i386.deb
libssl3_3.0.2-0ubuntu1.17_i386.deb
libtirpc3_1.3.2-2ubuntu0.1_i386.deb
libunistring2_1.0-1_i386.deb
libx11-6_2%3a1.7.5-1ubuntu0.3_i386.deb
libxau6_1%3a1.0.9-1build5_i386.deb
libxcb1_1.14-3ubuntu3_i386.deb
libxdmcp6_1%3a1.1.3-0ubuntu5_i386.deb
libxpm4_1%3a3.5.12-1ubuntu0.22.04.2_i386.deb
lock
partial
cyz@cyz-virtual-machine:/$ sudo apt-get cleam
E: 无效的操作 cleam
cyz@cyz-virtual-machine:/$ sudo apt-get clean
cyz@cyz-virtual-machine:/$ ls /var/cache/apt/archives/
lock  partial

 2)按照依赖关系清理缓冲区中多余的软件包
	如果用户希望缓冲区中只保留最新版本的软件包,多余版本全部清楚,可以使用“apt-get sutoclean”命令。
(8)查询软件包信息
 1) 使用apt-cache命令完成查询软件源和软件包的相关信息。
	apt-cache subcommands [-p|-s|-q|-i|-c|-h] pkg
 2) 使用“apt-cache show”命令获取指定软件包的详细信息,包括软件包安装状态、优先级、适用架构、版本、存在依赖关系的软件包,以及功能描述。该命令可以同时显现多个软件包的详细信息。
yz@cyz-virtual-machine:/$ apt-cache show gcc
Package: gcc
Architecture: amd64
Version: 4:11.2.0-1ubuntu1
Priority: optional
Section: devel
Source: gcc-defaults (1.193ubuntu1)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 50
Provides: c-compiler, gcc-x86-64-linux-gnu (= 4:11.2.0-1ubuntu1)
Depends: cpp (= 4:11.2.0-1ubuntu1), gcc-11 (>= 11.2.0-1~)
Recommends: libc6-dev | libc-dev
Suggests: gcc-multilib, make, manpages-dev, autoconf, automake, libtool, flex, bison, gdb, gcc-doc
Conflicts: gcc-doc (<< 1:2.95.3)
Filename: pool/main/g/gcc-defaults/gcc_11.2.0-1ubuntu1_amd64.deb
Size: 5112
MD5sum: 5cc3273b99ad19d1e7029c7411873c6f
SHA1: def88673d4fd2c7620fdba33e77287ec43cb8305
SHA256: be895c1a9611905254f818c41092f147f5f2a566f87f1817b5c36d977020bea7
SHA512: 4f8d51089dc511f0da886fa577299078693f0b9383a5b4f6c96f27a590741a0c4c67c0c0964d6fa89a7aac866632e8f10a95496f0696e5149ec3b469ddda74f5
Description-zh_CN: GNU C 编译器
 这是 GNU C 编译器,一个高度精炼和优化的 C 编译器。
 .
 这是一个提供默认 GNU C 编译器的依赖包。
Description-md5: c7efd71c7c651a9ac8b2adf36b137790
Task: ubuntustudio-video, ubuntustudio-publishing, ubuntu-mate-core, ubuntu-mate-desktop
Build-Essential: yes

cyz@cyz-virtual-machine:/$ apt-cache policy axvt
N: 无法定位软件包 axvt


(9)获取软件包安装状态
 1)使用“apt-cache policy”可以获取软件包当前的安装状态
 2)如果用户仅想了解某个软件包依赖于哪些软件包,可以使用“apt-cache depends”命令
 3)如果用户仅想了解某个软件包被哪些软件包所依赖,可以使用“apt-cache rdepends”命令。
cyz@cyz-virtual-machine:/$ apt-cache depends gcc
gcc
  依赖: cpp
  依赖: gcc-11
  冲突: gcc-doc
 |推荐: libc6-dev
  推荐: <libc-dev>
    libc6-dev
  建议: gcc-multilib
  建议: make
    make-guile
  建议: manpages-dev
  建议: autoconf
  建议: automake
  建议: libtool
  建议: flex
    flex:i386
  建议: bison
    bison:i386
  建议: gdb
  建议: gcc-doc
cyz@cyz-virtual-machine:/$ apt-cache rdepends gcc
gcc
Reverse Depends:
 |nodeenv
 |libdpkg-perl
 |dpkg-dev
  varnish
  rustc-1.76
  rustc-1.62
  golang-1.22-go
  golang-1.21-go
  golang-1.20-go
  golang-1.17-go
  golang-1.13-go
  gcc-9-doc
  gcc-12-doc
  gcc-10-doc
  dahdi-dkms
 |cargo-1.76
 |cargo
  sa-compile
  rustc
  python3-numpy
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.5.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-6.2.0
  linux-source-5.19.0
  linux-source-5.19.0
  linux-source-5.19.0
  linux-source-5.19.0
  linux-source-5.19.0
  linux-source-5.19.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-source-5.15.0
  linux-ibm-6.8-source-6.8.0
 |libdpkg-perl
  golang-1.18-go
  gcc-11-doc
 |dpkg-dev
  dkms
  cmake
  notion-dev
  lmbench
  game-data-packager
  yotta
  wine64-tools
  wine64-development-tools
  varnish
  valac
  uwsgi-dev
  syrthes
 |sfront
  selinux-policy-doc
  scilab-cli
  sasm
 |ruby-inline
  rstcheck
  r-base-dev
  python3-sasmodels
  prayer-templates-dev
  perlbrew
 |pentium-builder
  pari-gp2c
  octave-dev
  ocaml
 |nuitka
  gcc-avr
  mklibs
  libsimgrid-dev
 |libinline-c-perl
 |libfuntools1
  libdmalloc5
  libdevel-cover-perl
  libdevel-checklib-perl
  libalien-wxwidgets-perl
  lcov
 |kore
  kdevelop
  iraf-dev
 |intercal
 |ikiwiki-hosting-web
 |ikiwiki
  haskell-stack
  gprbuild
  goo
  golang-1.17-go
  golang-1.13-go
  gobjc++
  gobjc
  gnucobol4
  gnucobol3
  gnat
  gm2
  ghc
  gerris
  gcl
  gccgo
  gccbrig
  gcc-offload-nvptx
  gcc-offload-amdgcn
  gcc-hppa64-linux-gnu
  gcc-11-doc
  gcc-9-doc
  gcc-12-doc
  gcc-10-doc
  gauche-c-wrapper
  gap-dev
  gambas3-gb-jit
 |flex-old
  faucc
  f2c
  eclipse-titan
  ecl
 |diploma
  dahdi-dkms
  cython3
  cxref
 |cwebx
  critcl
 |creduce
  cproto
 |cpanminus
  codelite
 |codeblocks
  cl-cffi
 |cfortran
  cbmc
 |cargo
 |bochs
  bmt
  binfmtc
  apt-build
 |anjuta
 |alsa-source
  sa-compile
  rustc
  python3-numpy
  linux-source-5.15.0
  linux-ibm-source-5.15.0
 |libtool
 |libfile-fcntllock-perl
 |libdpkg-perl
  golang-1.18-go
  gfortran
  gcc-multilib
  gcc-doc
  g++
  build-essential
 |flex
 |dpkg-dev
 |dkms
  cmake

【3】总结与思考
(1)本节课主要讲解了APT软件包管理器的工作原理及主要命令
(2)下列文件什么作用?
/etc/apt/sources.list
/var/lib/apt/lists/*
/var/cache/apt/archives

shell

【1】shell简介
(1)随着格式Linux系统的图形化程序的不断提高,用户在桌面环境下,通过点击、拖拽等操作就可以完成大部分的工作。
(2)然而,许多Ubuntu Linux功能使用shell命令来实现,要比使用图形界面交互,完成的更快、更直接。
(3)英文单词shell可直译为“贝壳”。“贝壳”是动物作为外在保护的一种工具。
(4)可以这样认为,Linux中的shell就是Linux内核的一个外层保护工具,并负责完成用户与内核之间的交互。
(5)命令是用户向系统内核发出控制请求,与交互的文本流。
(6)shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。
(7)当需要重复执行若干命令,可以将这些命令集合起来,加入一定的控制语句,编辑成为shell脚本文件,交给shell批量执行。

【2】shell命令格式
(1)最初的UNIX shell经过多年的发展,由不同的机构、针对不同的目录,开发出许多不同类型的shell程序。
目前流行的shell主要有几种:
1)Bourne Shell(简称sh):它是Unix的第一个shell程序,早已成为工业标准。目前几乎所有的Linux系统都支持它。
不过Bourne Shell的作业控制功能薄弱,且不支持别名与历史记录等功能。
2)C Shell(简称csh)
3)Korn Shell(简称ksh)
4)Bourne Again Shell:能够提供环境变量以配置用户shell环境,支持历史记录,内置算数功能,支持通配符表达式,将常用命令内置简化。
(2)体验shell命令的乐趣
1)立即关机与重启
使用系统中的图形界面
使用shell命令
在命令行键入一下命令,系统立即关机
sudo shutdown -h now
在命令行键入以下命令,系统立即重启启动
sudo shutdown -r now
sudo reboot now
2) 定时关机重启
a.一位老师在对学生进行上机测试,时间限定在45分钟内,否则计算机将自动关机。
sudo shutdown -h +45 “That is all,game over.”
b.系统正在安装软件,安装时间大概需要持续40分钟左右,软件安装之后需要重新启动电脑。用户可以不必一直等候在机旁。
使用下面的命令,计算机会在60分钟后自动重启。
sudo shutdown -r +60
(3) shell提示符标识了命令行的开始。用户在提示符后面输入一条命令并按Enter键,完成向系统提交命令。
通常shell命令提示符采用以下的格式:
username@hostname:direction$
用户名 主机名 目录名
1)username:用户名,显示当前登录用户的账户名 (执行的命令是 whoami)
2)hostname: 主机名,显示登录的主机名,例如若远程登录后,则显示登录的主机名;(执行的命令是hostname)
3)direct体on: 目录名,显示当前所处的路径,当在根目录下显示为“/”,当在用户主目录下显示为“~“;(执行的命令是pwd)
(4)通常一条命令包含三个要素:命令名称、选项、参数。命令名称是必须的,选项和参数都可能是选项。命令格式如下:
$ Command [-Options] Argument1 Argument2…
指令 选项 参数1 参数2 …
KaTeX parse error: Expected 'EOF', got '#' at position 28: …当前用户为超级用户,提示符为“#̲”,其他用户的提示符均为“”;
Command:命令名称,Shell命令或程序,严格区分大小写
Options:命令选项,用于改变命令执行动作的类型,由“-”引导,可以同时带有多个选项;
Argument:命令参数,指出命令作用的对象或目标,有的命令允许带多个参数
(5)shell命令格式
1)一条命令的三要数之间用空格隔开;
2)若将多个命令在一行书写,用分号(;)将各命令隔开;
3)如果一条命令不能在一行写完,在行尾使用反斜杠(\)表明该条命令结束。
(6)不带选项和参数
1)ls命令未带任何参数,列出当前目录中的所有文件,只显示文件名称
2)命令不带选项或参数,通常意为使用默认选项或参数

【3】shell命令行操作
(1)bash除了在命令编辑功能上比sh有很大改进外,还增加了特有功能极大地方便了用户在shell命令行上的操作。
1)补齐命令与文件名
2)查询命令历史
3)等等
(2)补齐命令与文件名
1)在使用Shell命令时,很多用户会经常遇到命令或文件名没有记全的情况。在输入命令或文件名的前几个字符后,
按TAB键或ESC键自动补齐剩余没有输入的字符串。
2)如果存在多个命令或文件有相同前缀,shell将列出所有相同前缀的命令或文件。
shell给出的提示信息,帮助用户回忆和完成输入,之后等待用户输入足够的字符。
3)需要说明的是,连续按两下TAB键或ESC键,用于命令补齐;按一次TAB键,用于文件名补齐。
(3)查询命令历史
1)用户在Shell下的操作是有很大连续性的,曾经输入的命令可能需要多次使用。当用户在操作中发现问题,需要查看
曾经执行过的操作。Bash将用户曾经输入的命令序列保存在一个命令历史表中。按“↑”和“↓”键,便可查询历史命令。
2)Bash Shell还提供了history命令。该命令将历史表按列表形式,从记录号1开始,一次性全部显示出来。
history [numberline]
3) 显然history只能记录有限条的历史命令,默认保留500条命令。
4)Bash Shell将历史命令容量保存在环境变量HISTSIZE中。
1)使用“echo $HISTSIZE”查看当前历史命令容量;
2)通过直接赋值的方法,修改当前环境变量。(只是临时)

【4】总结与思考
(1)本节课先对shell做了基本介绍,然后讲解了Linux命令的基本格式,最后介绍了常见的命令操作
(2)思考
什么是shell?
如何更改历史记录容量? 可以修改家目录下的 .bashrc 文件中的HISTSIZE
历史记录如何删除?

cyz@cyz-virtual-machine:~/桌面/testcpp/debtest$ whoami
cyz
cyz@cyz-virtual-machine:~/桌面/testcpp/debtest$ hostname
cyz-virtual-machine
cyz@cyz-virtual-machine:~/桌面/testcpp/debtest$ pwd
/home/cyz/桌面/testcpp/debtest

cyz@cyz-virtual-machine:/$ cd /;ls;date
bin    dev   lib    libx32      mnt   root  snap      sys  var
boot   etc   lib32  lost+found  opt   run   srv       tmp
cdrom  home  lib64  media       proc  sbin  swapfile  usr
20240811日 星期日 17:11:12 CST
cyz@cyz-virtual-machine:/$ ls /etc/\
> network -l
总计 16
drwxr-xr-x 2 root root 4096  810 14:30 if-down.d
drwxr-xr-x 2 root root 4096  810 14:30 if-post-down.d
drwxr-xr-x 2 root root 4096  810 14:30 if-pre-up.d
drwxr-xr-x 2 root root 4096  810 14:30 if-up.d

cyz@cyz-virtual-machine:~/桌面/testcpp/debtest$ sudo dpkg -i rxvt_1%3a2.6.4-14_i386.deb      //一次tab补齐软件包名字

yz@cyz-virtual-machine:~/桌面/testcpp/debtest$ history
    1  sudo apt-get update
    2  vi test.c
    3  gcc test.c
    4  sudo apt-get gcc
    5  sudo apt get gcc
    6  sudo apt install gcc
    7  sudo apt install g++
    8  vi test.cpp
    9  g++ test.cpp
   10  ./a.out
   11  vi test.c
   12  sudo apt install vim
   13  g++ test.cpp
   14  ./a.out
 ‘’‘’省略
cyz@cyz-virtual-machine:~/桌面/testcpp/debtest$ history 10
  223  hostname
  224  pwd
  225  ls
  226  ls -l
  227  ls -a
  228  fdsf
  229  ls
  230  history
  231  history 133
  232  history 10
cyz@cyz-virtual-machine:~/桌面/testcpp/debtest$ echo $HISTSIZE
1000
cyz@cyz-virtual-machine:~/桌面/testcpp/debtest$ HISTSIZE=50
cyz@cyz-virtual-machine:~/桌面/testcpp/debtest$ echo $HISTSIZE
50

cyz@cyz-virtual-machine:~$ vi .bashrc
cyz@cyz-virtual-machine:~$ echo $HISTSIZE
1000
//新开窗口后,生效

在这里插入图片描述

【1】shell中的通配符
(1)通配符
当需要用命令处理一组文件,例如file.txt、file2.txt、file3.txt…,用户不必意义输入文件名,
可以使用shell通配符。shell命令的通配符含义如下表
通配符 含义 实例
* 匹配任意长度的字符串 用file_*.txt,匹配file_wang.txt、file_lee.txt、file3_liu.txt
? 匹配一个长度的字符 用file_?.txt,匹配file_1.txt、file_2.txt、file_3.txt
[…] 匹配其中指定的一个字符 用file_[otr].txt,匹配file_o.txt、file_r.txt和file_t。txt
[-] 匹配指定的一个字符范围 用file_[a-z].txt,匹配file_a.txt、file_b.txt,直到file_z.txt
[^…] 除了其中指定的字符均可匹配 用file_[^otr].txt,除了file_o.txt、file_t.txt、file_r.txt的其它文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【2】shell中的管道
(1)管道
管道可以把一系列命令链接起来,意味着第一个命令的输出将作为第二个命令的输入,通过管道传递给第二个命令,
第二个命令的输出又将作为第三个命令的输入,以此类推。就像通过使用“|”符连成一个管道。
ls /use/bin | wc -w
在这里插入图片描述
wc - print newline, word, and byte counts for each file

【3】总结与思考
(1)本节课主要介绍了shell中的几种特殊字符的用法以及管道的使用
(2)思考
1)shell中有哪些特殊字符? * ? [ ]
2)shell中管道的作用? 第一个命令的输出作为第二个命令的输入
3)shell中grep命令和管道如何结合?
cat /etc/passwd | grep “linux”
ps -ef 是查看当前运行的进程
grep, egrep, fgrep, rgrep - print lines that match patterns

SYNOPSIS
grep [OPTION…] PATTERNS [FILE…]
grep [OPTION…] -e PATTERNS … [FILE…]
grep [OPTION…] -f PATTERN_FILE … [FILE…]

DESCRIPTION
grep searches for PATTERNS in each FILE. PATTERNS is one or more
patterns separated by newline characters, and grep prints each line
that matches a pattern. Typically PATTERNS should be quoted when grep
is used in a shell command.

   A FILE of “-”  stands  for  standard  input.   If  no  FILE  is  given,
   recursive  searches  examine  the  working  directory, and nonrecursive
   searches read standard input.

   In addition, the variant programs egrep, fgrep and rgrep are  the  same
   as  grep -E,  grep -F,  and  grep -r, respectively.  These variants are
   deprecated, but are provided for backward compatibility.

笔记

【1】输入输出重定向
(1)输入/输出重定向是改变shell命令或程序默认的标准输入/输出目标,重新定向到新的目标。
(2)linux中默认的标准输入定义为键盘,标准输出定义为终端窗口。
(3)用户可以为当前操作改变输入或输出,迫使某个特定命令的输入或输出来源为外部文件。
重定向符 含义 实例
> file 将file文件重定向为输出源,新建模式 ls /usr > Lsoutput.txt,将ls /usr的执行结果,
写到Lsoutput.txt文件中,若有同名文件将被删除
>> file 将file文件重定向为输出源,追加模式 ls /usr >> Lsoutput.txt,将ls /usr的执行结果,
追加到Lsoutput.txt文件已有内容后
< file 将file文件重定向为输入源 wc < file1,将file1中的内容作为输入传给wc命令
2> 或 &> 将由命令产生的错误信息输入到文件中 ls noexistingfile.txt 2> err.log,使用ls命令,
查看一个不存在的文件时,将系统错误提示保存在err.log文件中
(4)cat命令功能为在标准输出上显示文件。下面通过一个实例,可以更好地理解重定向的功能。
1) cat #使用标准输入/出设备
have a good day! #用户使用标准输入设备——键盘,键入字符串,并按Enter键
have a good day! #系统在标准输出——显示器上,显示用户刚刚输入的字符串
2) cat > file1.txt #输出重定向,将输出定向到文件file1.txt
have a good day! #用户使用标准输入设备——键盘,键入字符串,并按Enter键
#用户输入的字符串被保存在file1.txt文件中
3) cat < file1.txt #输入重定向,将cat命令的输入指定为file1.txt文件
have a good day! #系统在标准输出显示器上,显示cat命令从文件中读出的字符串

【2】命令置换
(1)命令替换是将一个命令的输出作为另一个命令的参数。命令格式如下所示。
1)其中,命令command2的输出将作为命令command1的参数。需要注意,命令置换的单引号为ESC键下方的“”键
command1 command2
2)pwd命令用于显示当前目录的绝对路径。在上面的命令行中,使用命令置换符,将pwd的运行结果作为ls命令的参数。最终,命令执行结果是显示当前目录的文件内容。
linux@ubuntu:~$ ls ·pwd`
Desktop Examples historycommandlist mywork

【3】总结与思考
(1)本节课首先介绍了shell中的输入输出重定向的用法,然后介绍了命令置换的使用
(2)思考:
什么叫输入输出重定向?
有哪些输入输出重定向符?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值