所以有一天我在浏览网页的时候,发现了一些地方要求我下载.deb文件 - 由于这些文件是由root安装的(因此具有root的“权限”和功能),我对此不太确定。
arkose
(它在标准软件库中 sudo arkose -n -c "cd $PWD; $SHELL"
这个功能给了我一个“沙盒”(也就是“耶,我可以搞砸了!”),可以对我的电脑上的所有东西进行写时复制访问,包括我的主目录 - 所以如果那个可恶的.deb文件执行sudo rm -rf /*
命令,我不会丢失任何数据!
还有一件事情没有强调得足够多,那就是备份数据。这些备份非常有帮助,而且我们在这个主题上有很多问题。
简而言之,确保你仔细考虑,并不要随便下载一个随机的deb文件并安装它。
$ mkdir /tmp/foo && cd /tmp/foo
$ wget http://nl.archive.ubuntu.com/ubuntu/pool/main/n/nvidia-common/nvidia-common_0.2.35_amd64.deb
less
(通过lesspipe
)可以快速查看文件内容的概述。箭头键、上下翻页键、首页/尾页键在导航时非常有用,按下Q退出程序。$ less nvidia-common_0.2.35_amd64.deb
nvidia-common_0.2.35_amd64.deb:
new debian package, version 2.0.
size 10802 bytes: control archive= 1877 bytes.
197 bytes, 11 lines * config #!/bin/sh
703 bytes, 16 lines control
741 bytes, 10 lines md5sums
163 bytes, 9 lines * postinst #!/bin/sh
206 bytes, 8 lines * postrm #!/bin/sh
827 bytes, 38 lines * preinst #!/bin/sh
263 bytes, 14 lines * prerm #!/bin/sh
365 bytes, 12 lines templates
Package: nvidia-common
Version: 1:0.2.35
Architecture: amd64
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Installed-Size: 156
Pre-Depends: dpkg (>= 1.15.7.2)
Depends: python2.7 | python2.6, python (>= 2.7.1-0ubuntu2), python (<< 2.8), debconf (>= 0.5.00) | debconf-2.0, pciutils, python-apt
Conflicts: nvidia-180-modaliases, nvidia-185-modaliases, nvidia-current-modaliases
Replaces: nvidia-180-modaliases, nvidia-185-modaliases, nvidia-current-modaliases
Section: admin
Priority: optional
Description: Find obsolete NVIDIA drivers
This package will find obsolete NVIDIA drivers in use,
detect the hardware and recommend the most appropriate
driver.
Python-Version: 2.6, 2.7
*** Contents:
drwxr-xr-x root/root 0 2011-09-07 11:06 ./
drwxr-xr-x root/root 0 2011-09-07 11:06 ./usr/
drwxr-xr-x root/root 0 2011-09-07 11:06 ./usr/share/
drwxr-xr-x root/root 0 2011-09-07 11:06 ./usr/share/doc/
drwxr-xr-x root/root 0 2011-09-07 11:06 ./usr/share/doc/nvidia-common/
-rw-r--r-- root/root 1174 2011-09-07 11:07 ./usr/share/doc/nvidia-common/changelog.gz
-rw-r--r-- root/root 466 2011-06-24 14:45 ./usr/share/doc/nvidia-common/copyright
...
dpkg-deb
来提取文件并分析其内容了。第一个命令将文件树提取到新创建的目录fs
中,第二个命令将其提取到DEBIAN
目录中,因为没有指定其他目标。$ dpkg-deb -x nvidia-common_0.2.35_amd64.deb fs
$ dpkg-deb -e nvidia-common_0.2.35_amd64.deb
less
来分析维护脚本的内容(即在安装和卸载过程中将被使用/运行的文件)。prerm
、preinst
、postrm
、postinst
是在卸载/安装之前/之后运行的脚本,这些是最重要的要分析的文件。使用:n
和:p
在文件之间切换。通过按下=
,您可以获取当前文件名和行号以及列表中的文件数量。$ less DEBIAN/*
$ less fs/usr/bin/nvidia-detector # fs<TAB><TAB>/usr/ <TAB><TAB>bin ...
$ less fs/usr/lib/nvidia/pre-install
$ ls -la fs/usr/lib # quickly check the directory contents, my memory is weak
drwxr-xr-x 5 peter peter 100 2011-09-07 11:06 .
drwxr-xr-x 5 peter peter 100 2011-09-07 11:06 ..
drwxr-xr-x 2 peter peter 60 2011-09-07 11:06 nvidia
drwxr-xr-x 3 peter peter 60 2011-09-07 11:06 python2.6
drwxr-xr-x 3 peter peter 60 2011-09-07 11:06 python2.7
$ # I conclude: python2.6 is not a symlink to python2.7
$ less fs/usr/lib/python2.7/dist-packages/NvidiaDetector/*
press 'v' to open an editor (e.g. nano, vim) to get syntax highlighting if preferable
/etc/init
(用于启动脚本)或/etc/modprobe.d
(加载内核模块选项)这样的目录。ldd
可以给出一个程序可能用于什么的想法。下面的程序看起来像是一个使用OpenGL的图形程序。$ ldd /usr/bin/glxgears
linux-vdso.so.1 => (0x00007fff7d3ff000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007fa2ead11000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa2eaa8d000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa2ea754000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa2ea3b5000)
...
ps aux
、top
和strace -f -o logfile.txt programname
进行进一步分析。
.deb
文件,看看里面有什么。虽然我必须说,我从Ubuntu论坛的一个随机帖子上下载了一个随机用户上传的.deb文件来修复我的打印机问题,但它起作用了。 - Uri Herrera