Portage

portage是gentoo的包管理器,也是gentoo最出众的地方之一。

sit

emerge -av --update --newuse --deep @world

每次运行这条命令,就好像真个更新了整个世界(笑)。

cat /var/lib/portage	# 查看world

world是一个包集合,总是包括了我真正需要的包。

emerge -av --depclean

而这条命令使得gentoo总能保持清洁,它将除了系统需要的包(由系统profile决定,eselete profile list查看)、world中的包和它们的依赖包之外的包清除。对于apt/yum/dnf等包管理,我还没有见这样有效的包清理。

emerge -av @module-rebuild

这个sit包括了有内核模块的包,每次建立新内核,都应该重新编译。

emerge -p @system

@system包括了系统的基本包

/etc/portage/sets				# 自定义sets

use

USE管理包的功能封装,有人嫌弃apt零碎的包封装,也有人嫌弃pacman过于臃肿。那还有什么比直接自定义包的功能更高效的呢(虽然自己编译略费时间。。)。

/etc/portage/make.conf			# 定义全局USE
/etc/portage/packages.use		# 定义单个包USE

emerge --info | grep ^USE		# 查询全局USE
equery uses [pkg]				# 查询单个包USE

euse -i USEFLAG					# 查看flag作用

accept_keywords

/etc/portage/packages.accept_keywords

accept_keywords管理着包的架构和版本选择,例如amd64为稳定包,~amd64为测试包

深度清理和校验

依稀记得Arch Wiki中的pacman tips里有个非常强大的清理脚本。它通过对比磁盘文件和包管理器数据库中的所有文件找出不属于任何包的第三方文件。从而达到深度清理。(不得不说Arch的AUR的强大,连这种脚本都有一个包)

Gentoo或许也可以做到。

equery files @world | sort | uniq > owned_files.txt
find /etc /opt /usr | sort > all_files.txt
# diff or comm 比较文件导出额外文件

不过这个方法的可行性还需要验证。

equery check @world

使用equery时发现了这个命令,用于检查文件md5值,从而发现有没有文件被修改。对于大部分非内存后门来说,上述检测足够应付了。

emerge -av --emptytree @world

重建整个系统,听起来就很舒服的命令。

portageq

# 查询portage环境变量
portageq envvar

etc

etc-update

这大概又是一个gentoo特有的特色了,apt对于配置文件的更新是pass或覆盖,而gentoo这个脚本直接给了使用者最大的自由,你可以修改合并或者放弃新的配置文件。

其他命令

revdep-rebuild		# 重建库链接
perl-cleaner		# perl依赖包重建
dispatch-conf		# 更新系统配置文件
env-update && source /etc/profile	# 更新环境变量