又见炊烟升起

新随笔 联系 订阅 管理

常用

// 0=标准输入,1=标准输出,2=标准错误输出,而管道只会把前一个命令的“1=标准输出”,作为下一个命令的标准输入。

把2=标准错误输出和 1=标注输出 一起输出,使用2>& 1:

cat test1.txt test_xxx.txt > result.log 2>& 1

AI回答

Q:列表redhat的几个发行版的区别

Red Hat 生态系统的几个主要 Linux 发行版——Fedora、RHEL、CentOS Stream 以及曾经的 CentOS,它们之间的关系更像是一个创新、稳定与自由度的“光谱”,各有侧重。

为了让你一目了然,我整理了一个对比表格,梳理了这几个“兄弟”版本的核心区别:

📋 Red Hat 主要发行版对比

特性维度 Fedora (社区版) CentOS Stream (中游版) Red Hat Enterprise Linux (RHEL) (企业版)
核心定位 创新试验场,RHEL的“上游”开发版 滚动更新的中游版,介于Fedora和RHEL之间 企业级稳定平台,注重长期稳定与商业支持
更新模式 快速迭代,约6个月发布一个全新版本 滚动发布,持续获得更新,是RHEL的开发主干 保守稳定,约2-3年一个主要版本,只通过向后移植修复安全和关键问题
稳定性 较低,包含最新但可能未经充分测试的软件包 中等,比Fedora稳定,但可能不如RHEL 最高,经过严格测试,适合关键任务
软件包版本 最新、最前沿,引入新技术 较新,接近下一个RHEL小版本的内容 成熟稳定,版本相对保守,但安全可靠
目标用户 开发者和技术爱好者,希望体验最新Linux技术 RHEL开发者和希望提前了解RHEL动向的系统管理员 企业、生产环境,需要长期稳定和技术支持的组织
技术支持周期 约2年 约5年 (滚动更新) 长达10年 (包括5年全面支持和5年延长维护)
费用 免费 免费 商业订阅(付费),提供官方技术支持

💡 补充说明:关于曾经的 CentOS

你可能也听说过 CentOS Linux。它曾是RHEL的免费、精确重建版,广受欢迎 。但红帽已经改变了它的定位。传统的CentOS Linux 8已于2021年停止维护,CentOS Linux 7也于2024年6月结束生命周期 。其生态位现在被 CentOS Stream 所取代。

🚀 RHEL 内部的细分版本

另外,RHEL 自身在过去也曾根据应用场景细分为不同版本,主要面向大中小型企业和特定工作负载。虽然现在已不那么强调,但了解其历史有助于你理解企业级Linux的演进 :

  • RHEL AS (Advanced Server):最高端版本,为大型企业关键应用和数据中心设计,支持最高16个CPU和64GB内存。
  • RHEL ES (Entry Server):中端版本,面向中小型企业或部门级应用,支持1-2个CPU和小于8GB内存。
  • RHEL WS (Workstation):桌面/客户端版本,用于运行桌面应用、软件开发等,不提供网络服务功能。

希望这个对比能帮你理清Red Hat家族的脉络。你是打算用于个人学习、生产环境部署,还是想深入了解某个特定版本呢?告诉我你的具体需求,我再帮你细看~

Q:列表manjaro 和arch linux的管理包管理器的区别

Manjaro 和 Arch Linux 的包管理区别,主要体现在 Manjaro 在继承 Arch 的 Pacman 基础上,增加了自己开发的 Pamac 作为补充。为了让你看得更清楚,我把它们的核心区别整理成了下面这个表格:

📦 包管理器核心对比

对比维度 Arch Linux Manjaro
基础工具 Pacman (命令行) Pacman (命令行) + Pamac (命令行与图形界面)
设计定位 专注底层、强大、灵活的 后端工具 在 Pacman 基础上,提供更 用户友好 的前端
用户界面 仅有命令行接口 既有命令行,也有图形界面 (GTK/GUI),适合不同习惯的用户
软件源 直接连接 Arch 官方源,软件包 最新、最激进 连接 Manjaro 官方源,软件包经过 额外测试,通常比 Arch 晚数周推送,更稳定
AUR 支持 需借助 yay、paru 等 第三方辅助工具 Pamac 原生支持 AUR,可在设置中一键启用,无需安装额外工具
功能特性 核心功能:安装、升级、删除、查询、数据库操作等 集成度更高:除 Pacman 功能外,还提供 AUR 构建 (build)、清理孤⼉包 (--orphans)、检查更新 (checkupdates) 等便捷命令
命令风格 参数 简洁但数量多,需记忆,例如 -Syu Pamac 命令 更直观、类自然语言,例如 pamac search, pamac install

💡 补充说明:为什么 Manjaro 要这么做?

Arch Linux 坚持“KISS”原则,Pacman 作为其核心组件,功能强大但门槛较高 。Manjaro 的目标是让更多用户能体验到 Arch 生态的优点,因此它做了两件事:

  1. 保留了 Pacman:让高级用户和习惯了 Arch 操作方式的用户依然可以用熟悉的命令 。
  2. 开发了 Pamac:为所有用户提供了一个更安全、更易用的“包装”。你可以把它理解为“Pacman 的超级图形化加强版”,它简化了 AUR 的使用,并对软件包进行了额外的稳定性测试 。

总结一下:如果你喜欢自己动手、追求极致的软件更新速度和最纯粹的 Arch 体验,那么 Arch Linux 的命令行 Pacman 会非常适合你。如果你希望系统更稳定一些,同时不想牺牲 Arch 丰富的软件资源(特别是 AUR),那么 Manjaro 的 Pamac 会让你用起来更顺手。

了解了这些区别之后,你是打算在 Manjaro 上试试用 Pamac 来安装软件,还是想进一步了解某个特定命令的用法?告诉我你的想法,我可以继续为你介绍。

公共

//烧录linux镜像到u盘,建议直接使用ventoy安装到u盘

//从历史来看,真的别碰Canonical的东西。大多都是Redhat先出新东西,然后Canonical说我也要,然后几年后不声不响默默砍掉。Redhat推systemd,虽然一直被诟病但现在挺香(别整些Unix哲学有的没的,光是以前的firewalld和iptables大混战就让人恶心。init进程大一统绝对是好事),Canonical出upstart,没了。桌面也是,Redhat推Wayland,磕磕绊绊但能用,gnome曾经都默认了。Canonical为了手机的美梦,自己搞Mir,没了。更别提Canonical的各种迷惑操作,自己不用gnome shell反而去fork一份改名Unity出来,也没了。臭名昭著的内部错误,自己搞出来自己的菜单接口。可以说干尽割裂社区的能事,反过来还要被社区的方案暴打。snap更让人火大。压缩运行用了SquashFS也行,但是前期各种不稳定。还有需要一个daemon,挺恼人的。这也罢了,最恶心的是强推snap的行为,甚至自家员工跑去给Arch Wiki乱打包。关于通用打包方式,flatpak本身就是xdg推的嘛,只能桌面也正常。迷惑的是它需要(一般上都会)打包自己的Gtk,所以就巨大,主题还不一样。snap没稳定前打包大的更离谱。通用打包OpenSUSE做过探索,一个OpenSUSE Build Service平台(简称OBS)打包出rpm、deb和pkg,但是实在是太复杂了,称不上银弹级别的解决方案。还是用AppImage叭,Jetbrains家的IDE就是这个打包的。至于隔离运行,systemd based系统有自带的nspawn用。

//创建持久化 Live U 盘

需要特殊制作方法:

  • mkusb工具(推荐)
  • Rufus(特定配置)
  • 手动分区制作

特点:需要创建额外的casper-rw分区来存储用户数据

//Noto Sans CJK SC 与 Noto Sans SC 有什么区别?

SC = Simplified Chinese

CJK = Chinese,Japanese,Korean

如果你只用中文的话,不建议装 cjk,有些时候日文字会取代汉字

//cd -是返回到上一次的工作目录。

//关闭密钥环:

https://jingyan.baidu.com/article/aa6a2c14f1dd130d4c19c419.html

//linux下的EOF(文件结束)是使用CTRL-D键.

//刻录操作系统镜像优先使用 Rufus

//GConf 是在基于 GNOME2 的 Linux 操作系统中实现对应用程序的配置及管理功能的工具。我们可以把 GConf 理解为 linux 操作系统中的注册表。然而,它克服了 Windows 注册表的一些缺点,比如 Windows 注册表遭到破坏,可能会导致操作系统崩溃,而且 GConf 的配置信息存储于纯文本的文件中,可读性很好。在 GNOME3 中,GConf 已经被 DConf/Gsettings 替代,但还是用些应用在使用 GConf。

//添加环境变量:

echo 'PATH=$PATH:~/.local/bin' >> ~/.bashrc

//常用工具:

清理磁盘空间:BleachBit

//在Linux上,i386架构是为Intel处理器兼容的标准32bit,amd64是AMD设计但同样兼容Intel处理器的标准64bit。

//关闭登录终端时的笑话:


To turn off greeting (fortune) in terminal window:

$ sudo gedit /etc/bash.bashrc

Comment out the line /usr/bin/mint-fortune

//terminal 的“透视”改为“透明”功能:

执行gconf-editor ,

找到/apps/metacity/general/compositing_manager,勾选它,或者用compiz。

//系统参数编辑器还有 dconf-editor

//Linux Mint Debian Edition (LMDE) is a rolling distribution based on Debian Testing.

//查看版本号:

方法一:

命令:uname -a

作用:查看系统内核版本号及系统名称

方法二:版本

命令:cat /proc/version

作用:查看目录"/proc"下version的信息,也可以得到当前系统的内核版本号及系统名称

方法三:对于不同发行版的具体版本,使用 ls *-release看有没有操作系统的版本文件,如:


---------- On Fedora Linux ---------- 

$ cat /etc/fedora-release 

---------- On Debian Linux ---------- 

$ cat /etc/debian_version 

---------- On Ubuntu and Linux Mint ---------- 

$ cat /etc/lsb-release

---------- On opensuse Linux ---------- 

$ cat /etc/os-release

---------- On Mnajaro Linux ----------

$ cat ./lsb-release

①SUSE版本Linux用lsb_release -a命令即可列出版本信息

②此命令cat /etc/issue也适用于所有的Linux发行版

查看gnome的版本,使用$ gnome-shell --version

//proc文件系统,它不是普通的文件系统,而是系统内核的映像,也就是说,该目录中的文件是存放在系统内存之中的,它以文件系统的方式为访问系统内核数据的操作提供接口。而我们使用命令“uname -a"的信息就是从该文件获取的,当然用方法二的命令直接查看它的内容也可以达到同等效果.另外,加上参数"a"是获得详细信息,如果不加参数为查看系统名称。

//linux 命令相关:

cd ~/documents

其中'~' 表示home目录

//cp -i foo bar/

mv -ir foo bar/

其中'-i' :覆盖文件的提示,'-r':递归处理文件

rm -rf bar/

其中'-f':删除文件不提示

//&&连接两个命令,且只有第一个命令成功完毕后才执行第二个命令

//ldd :显示依赖库

//updatedb locate 用于刷新当前系统中的locate命令的索引库

//pdf 字体查看: pdffonts a.pdf | iconv -f GBK

//linux下搜索文件内容:

find /usr/include/ -type f -iname "*.h" | xargs grep -i -e "FcPattern"

在c语言文件中查找
find . -iname "*.h" -o -iname "*.c*" | xargs grep -i -e "FcPattern"

//在 find 命令中,如果它尝试搜索一个不存在的目录,它会输出一个错误消息,如 "find: ‘/path/to/nonexistent/dir’: No such file or directory"。要抑制这些错误消息,你可以将 find 命令的错误输出重定向到 /dev/null。
使用 2>/dev/null 可以将标准错误(file descriptor 2)重定向到 /dev/null,这样就不会在终端上显示错误消息了。

例如:

find /path/to/search -name "*.txt" 2>/dev/null

//虚拟控制台的选择可以通过按下 Alt 键和功能键 Fn(n=1~6)来

实现。例如:用户登录后,按 Alt+F2 组合键,用户又可以看到“login:”

提示符,此时看到的是第二个虚拟控制台。如果此时再按 Alt+F1 组

合键,就可以回到第一个虚拟控制台。一个新安装的 Linux 系统允许

用户使用 Alt+F1 到 Alt+F6 组合键来访问 6 个虚拟控制台。

//在 X Window 图形操作界面中按 Alt+Ctrl+Fn 组合键 (n=1~6)

就可以进入控制台字符操作界面。这就意味着用户可以同时拥有 X

Window 以 及 6 个 控 制 台 操 作 界 面 , 在 控 制 台 操 作 界 面 中 按

Alt+Ctrl+F7 组合键即可回到刚才的 X Window 图形操作界面。也就

是说,用 Alt+Ctrl+Fn 组合键即可实现字符界面与 X Window 界面的

快速切换。

//下面的方法将告诉你如何把Naautilus文件管理器中地址栏从按钮还原成文字模式

1.如果临时想切换到文字模式,只要使用快捷键Ctrl+L,按ESC键返回

2.一直以文字模式,那么打开gconf-editor,按ALT + F2键入

gconf-editor

依次进入:apps > nautilus > preferences

在右边把 always_use_location_entry 勾上即可

//使用irc时常常需要贴代码等大段文字,可以在 http://fpaste.org/ 等网站使用临时贴文字的地方贴上,然后拷贝其网址.

图片使用 http://img.vim-cn.com/ 网站。

//目前,许多嵌入式处理器都提供了自举模式(Bootstrap),供用户写入引导代码。自举模式利用了固化在芯片内部的一段引导程序,当处理器复位时,如果在特定引脚上加信号,则处理器将在复位后执行固化ROM中的程序。例如,MX1提供了4条复位引脚,复位时引脚不同的电平组合可以从不同的片选端启动系统。自举ROM中的程序完成串口的初始化,然后等待用户从串口写入用户代码。自举模式所能接受的是一种专门格式的文本文件,包括数据和要写入/读出的地址。关于自举模式的代码格式,可参考相关芯片的手册。在摩托罗拉的网站还提供了许多小工具,帮助开发者将其它格式的文件转换成为自举模式格式。通过自举模式下载的通常是一段和上位机软件(如超级终端)通信的程序,完成接收数据并写入Flash的操作。写入的数据可以是用户自己的应用程序、数据或者操作系统的内核。通过自举模式下载的引导程序同样可以用GNU工具开发。

GNU提供的编译工具包括汇编器as、C编译器gcc、C++编译器g++、连接器ld和二进制转换工具objcopy。基于ARM平台的工具分别为arm-linux-as、arm-linux-gcc、arm-linux-g++、arm -linux-ld 和arm-linux-objcopy。GNU的所有开发工具都可以从www.gnu.org上下载,基于ARM的工具可以从www.uclinux.org获得。GNU的编译器功能非常强大,共有上百个操作选项,这也是这类工具让初学者头痛的原因。不过,实际开发中只需要用到有限的几个,大部分可以采用缺省选项。GNU工具的开发流程如下:编写C、C++语言或汇编源程序,用gcc或g++生成目标文件,编写连接脚本文件,用连接器生成最终目标文件(elf格式),用二进制转换工具生成可下载的二进制代码。

gcc等编译器内置有缺省的连接脚本。如果采用缺省脚本,则生成的目标代码需要操作系统才能加载运行。为了能在嵌入式系统上直接运行,需要编写自己的连接脚本文件。编写连接脚本,首先要对目标文件的格式有一定了解。GNU编译器生成的目标文件缺省为elf格式。elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码;.data(数据段)包含固定的数据,如常量、字符串;.bss(未初始化数据段)包含未初始化的变量、数组等。C++源程序生成的目标代码中还包括.fini(析构函数代码)和.init(构造函数代码)等。有关elf文件格式,读者可自行参考相关资料。连接器的任务就是将多个目标文件的.text、.data和.bss等段连接在一起,而连接脚本文件是告诉连接器从什么地址开始放置这些段。

接生成的elf文件还不能直接下载执行,通过objcopy工具可生成最终的二进制文件:

arm-linux-objcopy-O binary bootstrap.elf bootstrap.bin

其中-Obinary指定生成为二进制格式文件。Objcopy还可以生成S格式的文件,只需将参数换成-O srec。如果想将生成的目标代码反汇编,还可以用objdump工具:

arm-linux-objdump-D bootstrap.elf

//对于ARM,EABI和OABI有什么区别:

Q3: What are OABI and EABI?

From OESF

Jump to: navigation, search

Q3: What are OABI and EABI?

A3: They are two kinds of ABI (Application Binary Interface). The ‘O’ stands for ‘Old’, and the ‘E’ means ‘Embedded’, a new approach to API for portable devices like the Zaurus.

According to this explanation,

GNU EABI is a new application binary interface (ABI) for Linux. It is part of a new family of ABI's from ARM? Ltd. known in the arm-linux community as EABI (or sometimes Embedded ABI).

According to Debian Wiki the new EABI:

* Allows mixing softfloat and hardfloat code.

* Uses a more efficient syscall convention.

* Will be more compatible with future tools.

Furthermore, the GCC default for EABI will be to use softfloat instructions for floating point arithmetic.

//gcc编译文件后一般自动生成的几个重要section,包括.text .data .bss,这些重要的段和ARM的RO、RW、ZI都可以一一对应的上,不过这里的section还不能运行,因为还没有连接重定位.

//.ld 文件是GNU ld的linker script.

//Linux 的众多优良特性之一就是可以在运行时扩展由内核提供的特性的能力. 这意味着你可以在系统正在运行着的时候增加内核的功能( 也可以去除).

每块可以在运行时添加到内核的代码, 被称为一个模块. Linux 内核提供了对许多模块类型的支持, 包括但不限于, 设备驱动. 每个模块由目标代码组成( 没有连接成一个完整可执行文件), 可以动态连接到运行中的内核中, 通过insmod 程序, 以及通过rmmod 程序去连接.

//以Linux 的方式看待设备可区分为3 种基本设备类型:字符模块, 块模块, 网络模块.

//添加PPA:

在“Applications”, “Accessories”, “Terminal“下找到终端程序,现在你只需要输入“sudo add-apt-repository”,后面跟着你的PPA的名称;接下来所有你需要做的就是更新你的包管理器然后安装你正在查找的程序。例如,下面是安装Hotot需要的步骤:

sudo add-apt-repository ppa:hotot-team

sudo apt-get update

sudo apt-get install hotot

● 查看自己的linux的gnome或者kde等等软件的版本号,使用 apt-show-versions 软件就能看到所有的软件版本号

比如:

nisy@debian:~$ apt-show-versions -p gnome

gnome:i386/jessie 1:3.14+3 uptodate

nisy@debian:~$ apt-show-versions -p gedit

gedit:i386/sid 3.18.0-1 upgradeable to 3.18.2-1

●开机系统的grub启动顺序,使用 grub-customizer 来控制

·

把文件夹拖到了gnome的最上方的栏上,左击就打开该文件夹,如果需要删除这个图标,需要:

  1. 滑鼠指向该图示

  2. 左手按住 win + alt

  3. 右手按右键,从面板中移除

·

终端的背景真透明的解决方法:

A:安装配置编辑器

代码:

sudo apt-get install gconf-editor

B:打开配置编辑器

代码:

gconf-editor

C:依次进入/apps/metacity/general/,找到compositing_manager并勾选,即可实现终端真透明。

GNOME

//对于Gnome,其版本号查询:


gnome-about --gnome-version

Gnome version 3.x, user type:

$ gnome-session –version

Debian

//Debian主要分三个版本:稳定版本(如wheezy)、测试版本(如jessie)、不稳定版本(unstable,永远为Debian Sid)。

// dpkg (Debian Package) itself is a low level tool. APT (Advanced Packaging Tool), a higher level tool, is more commonly used than dpkg as it can fetch packages from remote locations and deal with complex package relations, such as dependency resolution. Frontends for APT like aptitude (ncurses) and synaptic (GTK+) are used for their friendlier interfaces.

//软件源的设置:/etc/apt/sources.list

//查询debian的版本号:


nisy@nisy:~$ more /etc/debian_version

cat /etc/*release

或


lsb_release -a

或


cat /etc/lsb-release 

或


[root@blliu Server]# more /etc/issue

Red Hat Enterprise Linux Server release 5.4 (Tikanga)

[root@blliu Server]# uname -a

Linux blliu 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

//发行版本有:

experimental

unstable (代号 sid)

testing

stable (代号 lenny)

说明: experimental是最不稳定的版本,意思是还在试验阶段, unstable版本里的软件包是符合Debian软件包规则,但还是新的产品,欠缺测试;testing里的软件包版本是处在测试阶段,一旦经过大量测试没问题就可以归于stable版本里.

Ubuntu

//http://debgen.simplylinux.ch/ for the Debian Generator

http://repogen.simplylinux.ch/ for the Ubuntu Generator

//换源:


bash <(curl -sSL https://linuxmirrors.cn/main.sh)

//ubuntu 安装Visual Studio Code 的PPA

安装Ubuntu Make

使用命令

sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make

sudo apt-get update

sudo apt-get install ubuntu-make

安装Visual Studio Code

使用命令

umake ide visual-studio-code

卸载命令:

umake ide visual-studio-code --remove

sudo apt-get remove ubuntu-make

opensuse

//Tumbleweed 是“极速版”,追求最新;而 Slowroll 是它的“缓速版”,在滚动更新的基础上追求更高的稳定性。
//更新grub没有update-grub命令,而是使用:


nisy@linux-1deb:~> sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Generating grub configuration file ...

Found theme: /boot/grub2/themes/openSUSE/theme.txt

Found linux image: /boot/vmlinuz-4.12.14-lp151.28.83-default

Found initrd image: /boot/initrd-4.12.14-lp151.28.83-default

Found linux image: /boot/vmlinuz-4.12.14-lp151.28.59-default

Found initrd image: /boot/initrd-4.12.14-lp151.28.59-default

Found Manjaro Linux (20.1.2) on /dev/nvme0n1p11

Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi

Found Deepin 15.11  (15.11) on /dev/nvme0n1p8

Found Fedora 31 (Workstation Edition) on /dev/nvme0n1p9

done

nisy@linux-1deb:~>

deepin

//深度操作系统 V15.10 选用 dde-kwin 作为默认窗口管理器,使用 dde-kwin 代替之前的 deepin-wm.

从开发者角度DDE 全家桶中,除了“深度终端”,其它所有的产品都是基于 Qt 开发.

深度操作系统 V15.10 由 Debian stable 全新构建并发布

为了更好的和用户互动,deepin 系统的社区版对外发布也采用了一种新的方式:滚动更新。由之前每三个月一次的系统大版本更新,改成了每三周一次的小版本更新,例如 15.8.1、 15.8.2 ...15.8.4 等等。

fedora

// 一直以来unix及类unix系统的目录结构对于很多人显得晦涩难懂,Fedora计划简化其目录结构,将二进制文件集中放在/usr/bin,将库文件集中到/usr/lib和/usr/lib64,而对于原本同样用于存储二进制文件的/bin和/sbin将以连接的形式指向/usr/bin,同样的/lib /lib64也会以连接形式指向对应目录。示意如下:


/ 

|-- etc

|-- usr

    |-- bin

    |-- lib

    |-- lib64

|-- run

|-- var

|-- bin -> usr/bin

|-- sbin -> usr/bin

|-- lib -> usr/lib

|-- lib64 -> usr/lib64

arch linux

//manjaro的pamac 是什么软件的前端?使用execsnoop 来检查一下 ,发现是pacman

//AUR表示Archlinux User-Community Repository。翻译成中文就是Archlinux社区软件仓库。它是Archlinux的用户自行编写的PKGBUILDs的集合。我将会在随后为大家解释什么是PKGBUILD。

  简单来说,AUR是一些官方软件仓库不支持的社区软件包的组合(当然这里的包也可能作为官方软件包的候选者)。AUR用户只需要对这些软件包进行投票,得票超过一定数目并经过官方包维护人员审批通过既可以进入官方的软件仓库。

  你可以通过这个站点进行投票:http://aur.archlinux.org/

  yaourt用起来很简单,而且类似于Pacman的命令,下面是常用的一些命令:


  yaourt -S package_name – 从AUR安装软件包

  yaourt -Ss password – 使用关键字搜索软件包

  yaourt -Syu –aur – 从AUR升级本地软件数据库并安装更新

  yaourt -Si package_name – 列出软件包信息

  yaourt -Sc – 从缓存中清楚旧的软件包

  yaourt -Su – 安装AUR中的更新软件包

  yaourt -Sy – 获取最新的AUR软件包数据库

  yaourt -Cd – 清楚AUR软件包数据库

  yaourt -R package_name – 删除软件包

其他

//必备好用工具:

bcc

gitk 查看git修改记录

Q:var 等linux的分区的名字含义?

目录 名称含义 用途说明
/var Variable(可变的) 存放经常变化的数据,如日志文件(/var/log)、邮件队列、缓存、数据库文件等。系统运行时会频繁写入此分区,建议单独分区并监控磁盘空间。
/etc Et cetera(等等/其他) historically 是"其他文件"的存放地,现在演变为 "Everything to configure"(所有配置),存放系统级配置文件(如网络配置、用户密码、服务配置等)。
/home Home(家) 普通用户的个人主目录,每个用户在此有独立子目录(如 /home/username),存放个人文件和个性化设置。
/usr Unix System Resources 或 Unix Shared Resources 存放用户级程序和共享只读数据,包括应用程序(/usr/bin)、库文件(/usr/lib)、文档等。
/bin Binaries(二进制文件) 存放基本用户命令的可执行文件(如 ls, cp, mv),所有用户都需要的基础工具。
/sbin System Binaries(系统二进制文件) 存放系统管理命令(如 fdisk, reboot),通常只有 root 用户或管理员使用。
/root Root(根用户) 超级用户(root)的家目录,区别于根目录 /。
/tmp Temporary(临时) 存放临时文件,系统重启后通常清空。
/dev Devices(设备) 存放设备文件(如硬盘 /dev/sda、键盘、鼠标等),Linux 将硬件抽象为文件。
/boot Boot(启动) 存放启动相关文件,包括内核(vmlinuz)、引导加载器配置等,对系统启动至关重要。
/lib Libraries(库) 存放系统启动和基本命令所需的共享库文件。
/opt Optional(可选的) 存放第三方软件(如 Chrome、Spotify、Java 等),非系统默认自带的软件。
/mnt Mount(挂载) 临时挂载其他文件系统(如网络共享、外部硬盘)的挂载点。
/media Media(媒体) 自动挂载可移动媒体(如 U 盘、DVD、移动硬盘)的位置。
/proc Processes(进程) 虚拟文件系统,存放系统进程和内核信息(如内存、CPU 状态),实际不占用磁盘空间。
/srv Service(服务) 存放系统提供的服务数据(如 Web 服务器、FTP 服务器的文件)。
/sys System(系统) 虚拟文件系统,提供内核、设备、模块的信息接口。

常用词汇

usr:usr是Unix Software Resource 的意思,不是user的意思

BTS

-Bug 跟踪系统

PTS

-软件包跟踪系统

Debian Developer (DD):Debian 社区的官方成员。DD 拥有向Debian 官方仓库上传的全部权限。

Unstable:开发中的版本,更新频繁,代号永为sid。Ubuntu 每次版本发布,皆是基于Debian sid。

Debian 开发生命周期:experimental —> unstable(sid) —> testing —> stable

如果您果真勇敢,不怕折腾,则选择experimental,experimental 并不是一个完整的发行版本。选择unstable 基本可以,没有什么大问题,更新比testing 快很多,stable 基本就是安全更新。

Debian Maintainer (DM):拥有对Debian 官方仓库部分上传权限的人,比Debian 开发者权限低,简单来说只能上传自己维护的包

RFA - Request for Adoption 申请收养(某个软件)

RFP: Request For Packaging, 我觉得这个包应当加入Debian, 但是我不想去打包, 所以请求谁来打包

ITP: Intent To Package, 我想打这个包, 已经在开始工作了, 大家不要抢, 抢也要先跟我联系

RFH: Request For Help, 我忙不过来了, 或者技术能力不足, 需要人帮忙一起维护

RFA: Request For Adoption, 这个包我不想继续维护了, 谁想接手

O: Orphan, 这个包已经被我放弃了, 谁想接收就接手吧

ITA: Intent To Adoption, 我要接手这个包

ITP -Intent To Package

wnpp-Work-Needing and Prospective Packages

FTBFS: Failed To Build From Source, 其实就是编译失败, 经常在bug 报告中出现

NMU: Non-Maintainer Upload, 经常在修改日志出现, 表名修改人员不是这个包的指定维护人员

NM Process: New Maintainer Process, 新维护人员流程, 这个流程是针对申请Debian 开发人员(DD)的, 但由于DM 概念的引入, 这个名字现在带来了一些混淆, 估计会改一个名字吧.

QA: Quality Assurance, 质量保证, Debian 的QA 小组主要负责每个包的管理首页, 比如ibus的, 还有开发工具来保证Debian 的质量, 比如lintian, DEHS, ..., 还有就是维护孤儿包(orphaned package)

xxx@l.d.o: xxx@lists.debian.org, Debian 的maillist, 懒得敲字的时候就变成了@l.d.o

.d.o: .debian.org, 同上, 类似的原因

CVE: Common Vulnerabilities and Exposures, 一般在修改日志中出现, 一般表示一个安全漏洞

LP: launchpad, Ubuntu 的开发网站, 也是Ubuntu 的Bug 中心, 在关闭Ubuntu 相关bug 时, 用这个来支持对应的bug 号,比如"LP: #317443", 就指https://bugs.launchpad.net/bugs/317443

DFSG - Debian Free Software Guidelines

【AI】举例说明find后使用xargs 和-exec的差异

find 后面的 -exec 和管道接 xargs 都能“把 find 找到的文件交给别的命令处理”,但机制、安全性、效率、参数位置差别很大。

先给结论:

  • -exec 是 find 自己的动作,不经过管道,直接由 find 调用命令。
  • xargs 是独立命令,从标准输入读文本,再把文本拆成参数交给后面的命令。
  • -exec ... \;:每个文件执行一次命令,安全,但慢。
  • -exec ... +:尽可能批量传入文件,安全且快,但 {} 通常必须放最后。
  • find ... | xargs:默认按空白拆参数,遇到空格文件名会出错;要安全必须 find -print0 | xargs -0。
  • 需要并行执行时,一般用 xargs -P,-exec 不支持并行。

1. 准备示例文件

mkdir demo && cd demo
touch 'a.txt' 'b.txt' 'c b.txt' 'd.log'

其中 c b.txt 文件名里有空格,用来演示安全性差异。


2. 对每个 txt 文件统计行数

方式一:-exec ... \;

find . -name '*.txt' -exec wc -l {} \;

效果类似:

0 ./a.txt
0 ./b.txt
0 ./c b.txt

特点:

  • 每个文件执行一次 wc -l。
  • 文件名作为独立参数传入,空格安全。
  • 进程启动次数多,文件多时慢。

方式二:-exec ... +

find . -name '*.txt' -exec wc -l {} +

效果类似:

0 ./a.txt
0 ./b.txt
0 ./c b.txt
0 total

特点:

  • find 尽可能把多个文件一次性传给 wc -l。
  • 效率比 \; 高很多。
  • 文件名安全。
  • wc 对多个文件会输出 total。

方式三:xargs

find . -name '*.txt' -print0 | xargs -0 wc -l

效果也类似:

0 ./a.txt
0 ./b.txt
0 ./c b.txt
0 total

特点:

  • -print0 让 find 用 NUL 分隔文件名。
  • xargs -0 按 NUL 读取参数。
  • 这样空格、换行、引号等特殊字符都安全。
  • 如果不用 -0,文件名有空格就会出错。

3. 删除文件:安全性对比

假设要删除所有 .txt。

错误且危险的写法

find . -name '*.txt' | xargs rm

因为 find 默认输出:

./a.txt
./b.txt
./c b.txt

xargs 默认按空白拆分,会把 ./c b.txt 拆成:

./c
b.txt

于是实际可能执行:

rm ./a.txt ./b.txt ./c b.txt

这里 ./c 和 b.txt 被当成两个文件,可能报错,也可能误删。

安全写法

find . -name '*.txt' -print0 | xargs -0 rm

或者:

find . -name '*.txt' -exec rm {} \;

或者:

find . -name '*.txt' -exec rm {} +

这三种都能正确处理 c b.txt。


4. 参数位置差异:移动文件

假设要把 .bak 文件移动到 /tmp/backup/。

-exec ... \; 可以把 {} 放中间

find . -name '*.bak' -exec mv {} /tmp/backup/ \;

每个文件执行一次:

mv ./x.bak /tmp/backup/
mv ./y.bak /tmp/backup/

-exec ... + 通常要求 {} 在最后

下面写法通常不行:

find . -name '*.bak' -exec mv {} /tmp/backup/ +

因为 + 形式要求 {} 出现在命令末尾。可以改成 mv -t:

find . -name '*.bak' -exec mv -t /tmp/backup/ {} +

xargs 默认把参数追加到末尾

find . -name '*.bak' | xargs mv /tmp/backup/

实际会变成:

mv /tmp/backup/ ./x.bak ./y.bak

这通常不是你想要的。

要用 xargs 把 {} 放中间,需要 -I:

find . -name '*.bak' -print0 | xargs -0 -I {} mv {} /tmp/backup/

但 -I 通常意味着每个输入项执行一次命令,效率较低。


5. 并行能力差异

xargs 可以并行:

find . -name '*.log' -print0 | xargs -0 -n1 -P4 gzip

含义:

  • -n1:每次传 1 个文件。
  • -P4:最多 4 个进程并行。
  • 适合压缩大量日志。

-exec 不支持并行:

find . -name '*.log' -exec gzip {} \;

只能串行,每个文件一次。

或者批量但串行:

find . -name '*.log' -exec gzip {} +

6. 核心差异速查表

| 对比项 | find -exec | find ... | xargs |
|---|---|---|
| 本质 | find 的动作 | 独立命令,通过管道读输入 |
| 典型写法 | -exec cmd {} \; 或 -exec cmd {} + | find ... -print0 \| xargs -0 cmd |
| 执行次数 | \; 每文件一次;+ 批量 | 默认批量;-n 控制;-I 每项一次 |
| 空格文件名 | 安全 | 默认不安全,-0 安全 |
| 参数位置 | \; 可任意放 {};+ 通常末尾 | 默认末尾;-I 可中间但每次一个 |
| 性能 | \; 慢;+ 快 | 批量时快 |
| 并行 | 不支持 | 支持 -P |
| 管道 | 不需要 | 需要 |
| 退出状态 | 由 find 管理 | xargs 有自己的退出码规则 |


7. 推荐选择

优先安全、简单、高效:

find . -name '*.txt' -exec rm {} +

需要每个文件单独执行,或 {} 必须放中间:

find . -name '*.txt' -exec rm {} \;

需要并行:

find . -name '*.log' -print0 | xargs -0 -n1 -P4 gzip

需要和别的命令管道组合:

grep -rl 'error' . | xargs -0 ...   # 注意:grep -r 输出通常需配合 -Z 或 find -print0

一句话记忆:

  • -exec 是 find 亲自调用命令,文件名安全。
  • xargs 是 find 把文件名通过管道交给 xargs,再由 xargs 拼参数;默认怕空格,必须 -print0 | xargs -0。
  • 批量高效优先用 -exec ... +。
  • 要并行优先用 xargs -P。

为什么-exec会报错:

ook@nisymatebook:~/_my_git/github_sample_c_code2 (main)$ find . -type f -iname "*.py" |xargs ls -al
ls: cannot access './_python_sample/_serial_port_recorder_with_timestamp_': No such file or directory
ls: cannot access '串口终端工具并且打印时间戳.py': No such file or directory
ls: cannot access './_python_sample/_socket的': No such file or directory
ls: cannot access 'client不断发送,server端不断接收的例子/_client.py': No such file or directory
ls: cannot access './_python_sample/_socket的': No such file or directory
ls: cannot access 'client不断发送,server端不断接收的例子/_server.py': No such file or directory
ls: cannot access '(编译前)/build-aux/meson/postinstall.py': No such file or directory
-rw-rw-r-- 1 book book 1661 Jul 19 18:22  ./_non-linux_driver_sample/_源地YD-ESP32-C3-C开发板示例/hello_world2_uart_esp_idf/pytest_hello_world.py
-rw-rw-r-- 1 book book 1661 Jul 19 18:22  ./_non-linux_driver_sample/_源地YD-ESP32-C3-C开发板示例/hello_world3_jtag_esp_idf/pytest_hello_world.py
-rw-rw-r-- 1 book book 2963 Jul 19 18:22  ./_python_sample/_python_auto_test_phone_and_verify/_test_AR_camera.py
-rw-rw-r-- 1 book book 2508 Jul 19 18:22  ./_python_sample/_python_auto_test_phone_and_verify/_test_DMS_camera.py
-rw-rw-r-- 1 book book  431 Jul 19 18:22  ./_python_sample/_python_export_registers_of_IC/_generate_i2ctransfer_val_bus2_addr_0x29_max96722_m57.py
-rw-rw-r-- 1 book book 9133 Jul 19 18:22  ./_python_sample/_打开串口,不断发读寄存器命令并打印返回值/_i2c_repeat_read.py
-rw-rw-r-- 1 book book 1730 Jul 19 18:22  ./_python_sample/android_simulate_keep_press_button_every_random_delay_bv_adb.py
-rw-rw-r-- 1 book book 1301 Jul 19 18:22  ./_python_sample/hexdump_to_addr2value_.py
-rwxrwxr-x 1 book book 1787 Jul 19 18:22  ./_python_sample/从git仓生成修改前后的文件夹/fetch_code_diff.py
-rw-rw-r-- 1 book book 1020 Jul 19 18:22  ./_python_sample/打印运行的系统信息.py
-rw-rw-r-- 1 book book  652 Jul 19 18:22  ./_默认最小工程的模板/_builder/_nisy_/build-aux/meson/postinstall.py
-rw-rw-r-- 1 book book  652 Jul 19 18:22  ./_默认最小工程的模板/gnome_builder/gnome_app_nisy/nisy/build-aux/meson/postinstall.py

./_默认最小工程的模板/_builder/_nisy_:
total 68
drwxrwxr-x 6 book book  4096 Jul 19 18:22 .
drwxrwxr-x 4 book book  4096 Jul 19 18:22 ..
-rw-rw-r-- 1 book book 35148 Jul 19 18:22 COPYING
drwxrwxr-x 3 book book  4096 Jul 19 18:22 build-aux
drwxrwxr-x 2 book book  4096 Jul 19 18:22 data
-rw-rw-r-- 1 book book   692 Jul 19 18:22 meson.build
-rw-rw-r-- 1 book book  1071 Jul 19 18:22 org.example.App.json
drwxrwxr-x 2 book book  4096 Jul 19 18:22 po
drwxrwxr-x 2 book book  4096 Jul 19 18:22 src
book@nisymatebook:~/_my_git/github_sample_c_code2 (main)$
book@nisymatebook:~/_my_git/github_sample_c_code2 (main)$ find . -type f -iname "*.py" -exec ls -al
find: missing argument to `-exec'
book@nisymatebook:~/_my_git/github_sample_c_code2 (main)$

-exec 报错的原因是:find 的 -exec 不是一个独立选项,它必须跟一个完整的命令、一个 {} 占位符,以及一个结束标记 \; 或 +。

你输入的是:

find . -type f -iname "*.py" -exec ls -al

这里 find 看到 -exec 后,以为后面还要继续解析“要执行的命令参数”,但直到命令结束都没看到 {} 和 \;/+,所以报:

find: missing argument to `-exec'

正确写法例如:

find . -type f -iname "*.py" -exec ls -al {} \;

或者更高效地一次传给 ls:

find . -type f -iname "*.py" -exec ls -al {} +

说明:

  • {} 表示 find 找到的每个文件路径;
  • \; 表示 -exec 命令结束,分号要转义,否则会被 shell 吃掉;
  • + 是另一种结束方式,表示把多个文件一次性追加到命令末尾,通常比 \; 快。

另外,你前面这条命令:

find . -type f -iname "*.py" | xargs ls -al

出现的那些 No such file or directory,不是 find 的问题,而是 xargs 默认按空格/换行拆分参数。你的文件名里有空格,例如:

./_python_sample/_serial_port_recorder_with_timestamp_ 串口终端工具并且打印时间戳.py

xargs 会把它拆成两个参数:

./_python_sample/_serial_port_recorder_with_timestamp_
串口终端工具并且打印时间戳.py

于是 ls 认为这是两个不存在的文件。

推荐改成:

find . -type f -iname "*.py" -print0 | xargs -0 ls -al

或者直接用:

find . -type f -iname "*.py" -exec ls -al {} +

这样能正确处理带空格、中文、特殊字符的文件名。

find . -type f -iname "*.py" -print0 | xargs -0 ls -al

中的 -0 是什么意思

xargs -0 里的 -0 是 “以 NUL 字符(\0)作为输入项的分隔符” 的意思,而不是用默认的空白字符(空格、制表符、换行)来切分参数。

为什么需要它?

xargs 默认的切分规则是:遇到空格、Tab、换行就认为是一个新参数。这对文件名里包含空格的路径是灾难性的。

你之前的命令:

find . -type f -iname "*.py" | xargs ls -al

遇到这个文件:

./_python_sample/_serial_port_recorder_with_timestamp_ 串口终端工具并且打印时间戳.py

xargs 会在中间的空格处切开,变成两个参数传给 ls,于是 ls 报:

ls: cannot access './_python_sample/_serial_port_recorder_with_timestamp_': No such file or directory
ls: cannot access '串口终端工具并且打印时间戳.py': No such file or directory

-print0 和 -0 是一对

要解决这个问题,两边必须配套使用:

命令端 作用
find ... -print0 让 find 用 NUL 字符 \0 分隔每个找到的文件路径,而不是用换行
xargs -0 让 xargs 也用 NUL 字符 \0 作为分隔符来拆分输入

因为 NUL 字符(\0)不可能出现在合法的 Unix 文件名里,所以用它做分隔符是绝对安全的,无论文件名里有空格、引号、中文、甚至换行符,都能被完整地当作一个参数传递。

对比示意

假设找到两个文件:

a b.py
c.py

默认行为(find | xargs),find 输出用换行分隔:

a b.py\nc.py\n

xargs 按空白切分,得到 3 个参数:a、b.py、c.py → 错误。

-print0 | xargs -0,find 输出用 NUL 分隔:

a b.py\0c.py\0

xargs 按 NUL 切分,得到 2 个参数:a b.py、c.py → 正确。

补充:也可以用 -exec ... +

如果你不想用管道,等价的写法是:

find . -type f -iname "*.py" -exec ls -al {} +

{} + 会把找到的所有文件一次性追加到 ls -al 后面,同样能正确处理带空格的文件名,而且通常比 xargs 少启动一个进程,效率略高。两种写法都很常用,-print0 | xargs -0 的优势是可以把 find 和后续命令解耦,中间还能接其他处理。

posted on 2022-06-29 00:15  ni_sy  阅读(159)  评论(0)    收藏  举报