apt-get使用介绍

什么是apt-get
apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。是debian,ubuntu发行版的包管理工具,与红帽中的yum工具非常类似。
apt-get命令一般需要root权限执行,所以一般跟着sudo命令

sudo apt-get xxxx

apt命令用法
packagename指代为软件包的名称

apt-get update
在修改/etc/apt/sources.list或/etc/apt/preferences之後运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的。
apt-get install packagename
安装一个新软件包(参见下文的aptitude)
apt-get remove packagename
卸载一个已安装的软件包(保留配置文档)
卸载一个已安装的软件包(删除配置文档)
apt-get autoremove packagename
同上,比上面的要删除的彻底一点
dpkg --force-all --purge packagename
有些软件很难卸载,而且还阻止了别的软件的应用,就能够用这个,但是有点冒险。
apt-get autoclean
apt会把已装或已卸的软件都备份在硬盘上,所以假如需要空间的话,能够让这个命令来删除您已删掉的软件
apt-get clean
这个命令会把安装的软件的备份也删除,但是这样不会影响软件的使用。
apt-get upgrade
可以使用这条命令更新软件包,apt-get upgrade不仅可以从相同版本号的发布版中更新软件包,也可以从新版本号的发布版中更新软件包,尽管实现后一种更新的推荐命令为apt-get dist-upgrade;
在运行apt-get upgrade命令时加上-u选项很有用(即:apt-get -u upgrade)。这个选项让APT显示完整的可更新软件包列表。不加这个选项,你就只能盲目地更新。APT会下载每个软件包的最新更新版本,然后以合理的次序安装它们。注意在运行该命令前应先运行 apt-get update更新数据库。更新任何已安装的软件包。[1]
apt-get dist-upgrade
将系统升级到新版本
apt-cache search string
在软件包列表中搜索字符串
dpkg -l package-name-pattern列出任何和模式相匹配的软件包。假如您不知道软件包的全名,您能够使用“*package-name-pattern*”。
aptitude
周详查看已安装或可用的软件包。和apt-get类似,aptitude能够通过命令行方式调用,但仅限于某些命令——最常见的有安装和卸载命令。
由于aptitude比apt-get了解更多信息,能够说他更适合用来进行安装和卸载。
apt-cache showpkg pkgs
显示软件包信息。
apt-cache dumpavail打印可用软件包列表。
apt-cache show pkgs
显示软件包记录,类似于dpkg –print-avail。
apt-cache pkgnames
打印软件包列表中任何软件包的名称。
dpkg -S file
这个文档属于哪个已安装软件包。
dpkg -L package
列出软件包中的任何文档。
dpkg -l
列出所有已安装的软件包
apt-file search filename
查找包含特定文档的软件包(不一定是已安装的),这些文档的文档名中含有指定的字符串。apt-file是个单独的软件包。您必须先使用apt-get install来安装他,然後运行apt-file update。假如apt-file search filename输出的内容太多,您能够尝试使用apt-file search filename | grep -w filename(只显示指定字符串作为完整的单词出现在其中的那些文档名)或类似方法,例如:apt-file search filename | grep /bin/(只显示位于诸如/bin或/usr/bin这些文档夹中的文档,假如您要查找的是某个特定的执行文档的话,这样做是有帮助的)
apt-get autoclean
定期运行这个命令来清除那些已卸载的软件包的.deb文档。通过这种方式,您能够释放大量的磁盘空间。假如您的需求十分迫切,能够使用apt-get clean以释放更多空间。这个命令会将已安装软件包裹的.deb文档一并删除。大多数情况下您不会再用到这些.debs文档,因此假如您为磁盘空间不足而感到焦头烂额,这个办法也许值得一试。

Ubuntu下编译Linux内核

1.俗话说,工欲善其事,必先利其器。在编译内核前,需要配置一下编译环境,在终端输入:

sudo apt-get install build-essential kernel-package libncurses5-dev 

其中,build-essential 是安装gcc编译器和make环境。

kernel-package是内核编译有关的。

libncurses5-dev是为了能配置内核,与 make menuconfig 命令有关。

2.下载源代码:去内核源码网  http://www.kernel.org/ 下载自己想编译的内核源代码,我下载的是最新的,linux-3.3.4.tar.bz2,尝尝鲜啊!

3.将其拷贝到主文件夹下面,接着  ctrl+alt+t 打开终端,执行以下命令:

mkdir src && tar -jxf linux-3.3.4.tar.bz2 -C src/

意思就是在主文件夹下新建一个名为src的文件夹,并将源代码解压到src文件夹内。

4.为了进入到src/linux-3.3.4 目录,执行以下命令:cd  /src/linux-3.3.4  

这样一来,我们的工作目录就变成src/linux-3.3.4了,以后所有的命令都是在这个目录下执行的。

5.配置内核文件比较繁琐,一般我们都会利用系统已经存在的内核配置文件,执行以下命令:

cp /boot/config-uname -r ./.config 

由于这个文件是隐藏的,所以当你执行完这条语句,去查看这个文件的时候,是看不到的,但它确实存在,而且还很重要。

注:如果你不是第一次编译,建议你首先执行这样一条语句: make mrproper 

其含义是将上一次编译的.o和.config等相关文件删除掉。然后在copy已存在的config文件。这个顺序不能颠倒。如果颠倒了,新copy的config文件就会被删除掉喔。

6. 配置内核。如果对内核的配置不熟,建议执行第5步,如果很熟系,第五步可以忽略。

执行一下命令:make menuconfig

此时,会弹出如下的界面:

最后两项是 Load an Alternate Configuration File 和 Save an Alternate Configuration File 

我们进入Load an Alternate Configuration File,会出现这样的画面:

保持默认直接ok就行,这样就利用了刚才复制过的config文件。保存退出就行了。

7.开始编译内核:

make bzImage         //编译大内核,如果你想编译小内核,可以这样 make zImage

make modules         //编译模块

make install modules_install   //将内核与模块相关的文件复制到系统位置

注意:这个过程要花费1-2个小时。

8.在linux-2.6版本及以后,系统会为我们自动生成image文件,所以我们只需要查看是否生成了相应的模块就行了。

进入boot文件夹,看到系统已经有了config-3.3.4 ,initrd.img-3.3.4, System.map-3.3.4,vmlinuz-3.3.4  ,这说明内核已经生成完毕。如图所示:

9.还有一项,看看引导程序是否为我们添加了引导项。执行以下命令:sudo gedit /boot/grub/grub.cfg  

如图,系统自动为我们添加了引导项,如果没有,需要自己仿照已存在的项添加。这里就不多说了。

10. reboot 重启之后就可已选择进入相应的内核了。注意:原来系统的内核仍然存在,依然可用。

Ubuntu安装BusyBox致命错误curses.h没有那个文件或目录

问题:
 root@czu:~# cd /root/桌面/busybox-1.19.3
root@czu:~/桌面/busybox-1.19.3# make menuconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/split-include
scripts/basic/split-include.c: 在函数‘main’中:
scripts/basic/split-include.c:134:11: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
  HOSTCC  scripts/basic/docproc
  GEN     include/applets.h
  GEN     include/usage.h
  GEN     applets/Kbuild
  GEN     coreutils/Kbuild
  GEN     coreutils/Config.in
  GEN     coreutils/libcoreutils/Kbuild
  GEN     procps/Kbuild
  GEN     procps/Config.in
  GEN     mailutils/Kbuild
  GEN     mailutils/Config.in
  GEN     e2fsprogs/Kbuild
  GEN     e2fsprogs/Config.in
  GEN     e2fsprogs/old_e2fsprogs/Kbuild
  GEN     e2fsprogs/old_e2fsprogs/Config.in
  GEN     e2fsprogs/old_e2fsprogs/uuid/Kbuild
  GEN     e2fsprogs/old_e2fsprogs/blkid/Kbuild
  GEN     e2fsprogs/old_e2fsprogs/e2p/Kbuild
  GEN     e2fsprogs/old_e2fsprogs/ext2fs/Kbuild
  GEN     libbb/Kbuild
  GEN     libbb/Config.in
  GEN     printutils/Kbuild
  GEN     printutils/Config.in
  GEN     libpwdgrp/Kbuild
  GEN     debianutils/Kbuild
  GEN     debianutils/Config.in
  GEN     shell/Kbuild
  GEN     shell/Config.in
  GEN     loginutils/Kbuild
  GEN     loginutils/Config.in
  GEN     sysklogd/Kbuild
  GEN     sysklogd/Config.in
  GEN     console-tools/Kbuild
  GEN     console-tools/Config.in
  GEN     init/Kbuild
  GEN     init/Config.in
  GEN     scripts/Kbuild
  GEN     runit/Kbuild
  GEN     runit/Config.in
  GEN     miscutils/Kbuild
  GEN     miscutils/Config.in
  GEN     archival/Kbuild
  GEN     archival/Config.in
  GEN     archival/libarchive/Kbuild
  GEN     modutils/Kbuild
  GEN     modutils/Config.in
  GEN     selinux/Kbuild
  GEN     selinux/Config.in
  GEN     util-linux/Kbuild
  GEN     util-linux/Config.in
  GEN     util-linux/volume_id/Kbuild
  GEN     editors/Kbuild
  GEN     editors/Config.in
  GEN     findutils/Kbuild
  GEN     findutils/Config.in
  GEN     networking/Kbuild
  GEN     networking/Config.in
  GEN     networking/libiproute/Kbuild
  GEN     networking/udhcp/Kbuild
  GEN     networking/udhcp/Config.in
  HOSTCC  scripts/kconfig/conf.o
scripts/kconfig/conf.c: 在函数‘conf_choice’中:
scripts/kconfig/conf.c:354:9: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
scripts/kconfig/conf.c: 在函数‘conf_askvalue’中:
scripts/kconfig/conf.c:106:8: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
  HOSTCC  scripts/kconfig/kxgettext.o
  HOSTCC  scripts/kconfig/mconf.o
scripts/kconfig/mconf.c: 在函数‘show_textbox’中:
scripts/kconfig/mconf.c:839:7: 警告: 忽略声明有 warn_unused_result 属性的‘write’的返回值 [-Wunused-result]
scripts/kconfig/mconf.c: 在函数‘exec_conf’中:
scripts/kconfig/mconf.c:473:6: 警告: 忽略声明有 warn_unused_result 属性的‘pipe’的返回值 [-Wunused-result]
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/mconf
  HOSTCC  scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:0:
scripts/kconfig/lxdialog/dialog.h:31:20: 致命错误: curses.h:没有那个文件或目录
编译中断。
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1
make[1]: *** [menuconfig] 错误 2
make: *** [menuconfig] 错误 2
root@czu:~/桌面/busybox-1.19.3#
解决办法:
root@czu:~/桌面/busybox-1.19.3# apt-get install libncurses5-dev
原因:
Ubuntu系统中缺少一个套件 ncurses devel ,把此套件安装下即可。

Ubuntu设置root用户登录图形界面

先设定一个root的密码,sudo passwd root
1、先设定一个root的密码,sudo passwd root
2、root 登陆,su root
3、备份一下lightgdm,有备无患。
cp -p /etc/lightdm/lightdm.conf /etc/lightdm/lightdm.conf.bak
4、编辑lightdm.conf
sudo gedit /etc/lightdm/lightdm.conf
5、添加一行:
greeter-show-manual-login=true
修改后为:
[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-show-manual-login=true
重启登陆即可。已经可以输入root了。

自己动手编译Linux内核

一、实验目的

学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。

 

二、实验内容

在Linux操作系统环境下重新编译内核。实验主要内容:

A. 查找并且下载一份内核源代码,本实验使用最新的Linux内核2.6.36。

B. 配置内核。

C. 编译内核和模块。

D. 配置启动文件。

本次实验环境是Linux2.6.35内核的环境下,下载并重新编译内核源代码(2.6.36);然后,配置GNU的启动引导工具grub,成功运行编译成功的内核。

 

三、主要仪器设备(必填)

Linux环境:utuntu10.10,linux内核2.6.35

待编译内核:linux2.6.36

 

四、操作方法和实验步骤

【1】下载内核源代码

从http://os.zju.edu.cn/newlinux/files/jijiangmin网站上下载最新的Linux内核2.6.36。

 

【2】部署内核源代码

打开终端,更改用户权限为root。具体做法是在终端输入sudo su,然后按提示输入密码。判断是否是root用户是使用whoami命令,若输出为root则已经切换到root账户。

输入mv linux-2.6.36.tar.gz  /usr/src,目的是把下载的内核源代码文件移到/usr/src目录。

输入cd /usr/src切换到该目录下。

输入tar zxvf linux-2.6.36.tar.gz,目的是解压内核包,生成的源代码放在linux-2.6.36目录下。

输入cd linux-2.6.36,切换到该目录下。

输入cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config,目的是使用在boot目录下的原配置文件。

 

【3】配置内核

配置内核的方法很多,主要有如下几种:

#make menuconfig  //基于ncurse库编制的图形工具界面

#make config  //基于文本命令行工具,不推荐使用

#make xconfig  //基于X11图形工具界面

#make gconfig  //基于gtk+的图形工具界面

由于对Linux还处在初学阶段,所以选择了简单的配置内核方法,即make menuconfig。在终端输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。

对每一个配置选项,用户有三种选择,它们分别代表的含义如下:

<*>或[*]——将该功能编译进内核

[]——不将该功能编译进内核

[M]——将该功能编译成可以在需要时动态插入到内核中的代码

本实验在make menuconfig后,把ext2和ext3文件系统编译进内核。如果用户是在虚拟机下编译的,那么一般要把SCSI设备编译进内核。不是在虚拟机下编译的也可以把它编译进去,不会有什么影响的。

 

【4】编译内核

这步是时间最长的一个步骤,一般在3个小时左右。

编译内核只需在终端输入make,然后等待编译的完成。

 

【5】编译和安装内核模块

输入make modules_install,这步很快能完成。

 

【6】安装内核

输入make install

 

【7】生成启动

依次输入:

sudo mkinitramfs -o /boot/initrd.img-2.6.36

sudo update-initramfs -c -k 2.6.36

sudo update-grub2  //自动修改系统引导配置,产生grub.cfg启动文件。

 

五、实验结果和分析

把内核源代码移动到目录/usr/src,如下图

 

在成功执行语句

sudo mkinitramfs -o /boot/initrd.img-2.6.36

sudo update-initramfs -c -k 2.6.36

后的boot目录,如下图

 

在成功执行语句

sudo update-grub2

后grub.cfg文件中增加了新内核的启动项,如下图

 

在所有的实验步骤成功完成后,重新启动,可以发现在启动项中多了两项,分别为Linux2.6.36模式和Linux2.6.36 recovery模式,选择Linux2.6.36模式,进入新的内核,若在启动过程中没有跳出错误提示,表示已经成功了。

进入系统后,打开终端,输入uname -a,输出如下图,表明现在已经是2.6.36的内核了

 

常用命令:编译内核: 
# cd /usr/src/linux 
# make dep -----链接程序代码与函数库. 
# make clean -----删除不必要的模块和文件. 
# make bzImage -----开始编译系统内核. 
# make modules -----开始编译外挂模块. 
# make modules_install -----安装编译完成的模块. 


# mkinitrd /boot/initrd-2.2.5-15.img 2.2.5-15


编译64位内核

    make ARCH=x86_64 menuconfig
    make ARCH=x86_64
    make ARCH=x86_64 modules_install
    make ARCH=x86_64 install