Linux系统上手篇

参考链接:

《鸟哥的Linux私房菜》
《深入理解yum工作原理》

常用命令汇总

创建用户

当前用户是root用户,想创建一个新用户lixiaoqiang使用命令useradd来添加。

1
2
3
4
[root@test ~]# useradd lixiaoqiang
[root@test ~]# passwd lixiaoqiang
Changing password for user lixiaoqiang
New UNIX password:

注意命令提示符的结构:[登录的用户名@主机名 当前目录]# (# root用户, $ 普通用户)

扫盲命令

命令解释
pwd查看当前路径
cd改变当前路径
ls列出文件和目录
cp拷贝文件
mv移动文件(相当于剪贴)
rm删除文件
touch创建空文件或者更新文件时间
mkdir创建目录
cat查看文件
su切换身份(切换登录用户, exit可以返回上一个用户)
rebot重启(shutdown 关机)
man帮助命令(例如: man ls)

上面这些命令都有相对应的参数,可以使用man命令来查看,也可以用搜索引擎搜索或者在下面网站查看中文解释:

Linux命令大全

文件权限

我们先创建一个文件 a 和一个目录 b 来看看。

1
2
3
4
5
[lixiaoqiang@test ~]$ touch a
[lixiaoqiang@test ~]$ mkdir b
[lixiaoqiang@test ~]$ ls -l
-rw-rw-r-- 1 lixiaoqiang lixiaoqiang 0 Mar 13 10:18 a
drwxrwxr-x 2 lixiaoqiang lixiaoqiang 6 Mar 13 10:18 b

就以文件a的文件详情为例来解释一下:

-rw-rw-r–1lixiaoqianglixiaoqiang0Mar 13 10:18a
文件类型读写执行权限连接数文件拥有者文件所属组文件大小修改时间文件名

Linux文件权限

在Linux中任何东西都可以被看作文件,这是一种系统的抽象,文件权限前的第一个字母代表文件类型,常用的文件类型如下:

类型标识类型名
-一般文件
d目录文件
b块设备文件,如硬盘
c字符设备文件,如键盘鼠标
|链接文件(相当于windows的快捷方式)
p人工管道

文件权限类型有读(r)、写(w)、执行(x)三种,如上面的rw-rw-r–就表示拥有者读写权限,所属组拥有读写权限,其他人有读权限。

可以使用chmod命令来更改文件默认权限。

1
2
3
4
5
[lixiaoqiang@test ~]$ chmod u+x a
[lixiaoqiang@test ~]$ chmod u=rwx b
[lixiaoqiang@test ~]$ ls -l
-rwxrw-r-- 1 lixiaoqiang lixiaoqiang 0 Mar 13 10:18 a
drwxrwxr-x 2 lixiaoqiang lixiaoqiang 6 Mar 13 10:18 b

可以看到此时我给文件 a 增加了一个拥有者(u)可执行权限,我给目录 b 增加了拥有者(u)读写执行的权限。

但是上面这样更改权限一次只能更改一组,如果我要同时更改拥有者、所属组、其他人对该文件的权限就需要用下面这种方式了。

1
2
3
4
5
[lixiaoqiang@test ~]$ chmod 444 a
[lixiaoqiang@test ~]$ chmod 666 b
[lixiaoqiang@test ~]$ ls -l
-r--r--r-- 1 lixiaoqiang lixiaoqiang 0 Mar 13 10:18 a
drw-rw-rw- 2 lixiaoqiang lixiaoqiang 6 Mar 13 10:18 b

这其实是一个二进制转换为10进制的数组, 4 的二进制 为 100 ,而 6 的二进制为 110 ,这个规律显而易见,如果要设置rwx权限就是 7 因为 7 的二进制为 111

FHS标准

我们都很熟悉Windows的盘符划分方式,在Linux系统中任何东西都可以抽象为文件存在,而且Linux系统有很多衍生的系统和产品,这样就造成了比较混乱的目录结构,后来出现了FHS(Filesystem Hierarchy Standard)文件系统层次结构标准来定义Linux系统中的主要目录和目录内容。

Linux目录结构

FilesystemHierarchyStandard

FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:

可分享的不可分享的是否可变
/usr/etc
/optboot
/var/mail/var/run
/var/spool/news/var/lock
  • 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录。
  • 不可分享的:自己机器上面运作的装置文件或者是与程序有关的socket文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
  • 不变的:有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等。
  • 可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。

事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

  • / (root, 根目录):与开机系统有关;
  • /usr (unix software resource):与软件安装/执行有关;
  • /var (variable):与系统运作过程有关(比如日志文件)

注意:与Window系统不同的是Linux系统的每个目录都可以挂载在不同的设备(磁盘)上面,只是逻辑上最高级别是根目录而已。如果设备不挂载则没有访问入口,形同虚设。

根目录 / 是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动作有关。FHS标准建议根目录所在分割槽应该越小越好,来减少出现错误的几率。

在系统开机过程中仅有根目录会被挂载,更目录下与系统开机过程有关的目录必须和系统更目录放置到同一个分割槽。

  • /etc:配置文件
  • /bin:重要执行档
  • /dev:所需要的装置文件
  • /lib:执行档所需的函式库与核心所需的模块
  • /sbin:重要的系统执行文件

磁盘管理

在Linux系统中,每个设备都被当成一个文件来对待:

设备挂载路径
IDE接口硬盘(也就是我们通常使用的硬盘)/dev/hd[a-d]
SCSI/SATA/U盘(我们常用的移动U盘介质和固态硬盘)/dev/sd[a-p]
打印机U盘: /dev/usb/lp[0-15] 25针: /dev/lp[0-2]
鼠标U盘: /dev/usb/mouse[0-15] PS2: /dev/psaux
当前CDROM/DVDROM/dev/cdrom
当前的鼠标/dev/mouse

磁盘分区

我们通常在Windows中只有一个机械硬盘,然后会分成(C: D: F:)等这些盘符,这些盘符实际上对应的是这个硬盘的不同分区。

windows磁盘分区

上图是我的笔记本电脑的分区表,其中SYSTEM_DRV是联想笔记本的默认隐藏分区,其余两个是都是主分区。整个磁盘第一个磁区很重要,记录了两个重要文件:

  1. 主要启动记录区(Master Boot Record, MBR):可以安装启动管理程序的地方,有446 bytes
  2. 分割表(partition table):记录整颗硬盘分割的状态,有64 bytes

MBR是很重要的,因为当系统在启动的时候会主动去读取这个区块的内容,这样系统才会知道你的程序放在哪里且该如何进行启动。 如果你要安装多重启动的系统,MBR这个区块的管理就非常非常的重要了!分隔表则是用来记录我们的分区信息的。

机械硬盘构成

为什么要将一块硬盘分割成好几个分区呢?

  1. 为了数据安全考虑,就是把鸡蛋放到多个篮子的原理。
  2. 为了搜索速度的考虑。

由于分割表只有64bytes,只能记录四条分区信息,所以一般这四个分区会分为主分区(Primary)和一个扩展分区(Extended)。

分区记录表

扩展分配最多只能有一个(操作系统的限制),逻辑分割的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分割(5号到63号), SATA硬盘则有11个逻辑分割(5号到15号)

例如现在我分了两个主分区和一个扩展分区(扩展分区分了3个逻辑分区),这5个分区的挂载位置分别是:
/dev/hda1 /dev/hda2 /dev/hda5 /dev/hda6 /dev/hda7
其中hda1到hda4是留给主分区的,所以逻辑分区从hda5开始。

磁盘挂载

所谓的『挂载』就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下; 也就是说,进入该目录就可以读取该分割槽的意思。这个动作我们称为『挂载』,那个进入点的目录我们称为『挂载点』。 由於整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分割槽的。 至于其他的目录则可依使用者自己的需求来给予挂载到不同的分割槽。

磁盘挂载

可以使用df命令来查看系统整体磁盘使用量和挂载情况。

1
2
3
4
5
6
7
8
9
10
11
12
[lixiaoqiang@test ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 6.3G 44G 13% /
devtmpfs 9.8G 0 9.8G 0% /dev
tmpfs 9.8G 0 9.8G 0% /dev/shm
tmpfs 9.8G 17M 9.8G 1% /run
tmpfs 9.8G 0 9.8G 0% /sys/fs/cgroup
/dev/sda1 1014M 229M 786M 23% /boot
/dev/mapper/centos-home 871G 4.6G 866G 1% /home
/dev/sdb 917G 77M 871G 1% /home/data1
tmpfs 2.0G 0 2.0G 0% /run/user/0
tmpfs 2.0G 0 2.0G 0% /run/user/1002

Filesystem:代表该文件系统是在哪个分区,Size代表总大小,Used表示已经使用大小,Avail表示可用大小,Use%表示已经使用百分比,Mounthed on表示挂载点。

可以使用fdisk来操作分区挂载和查看分区情况,注意这个命令只能root用户使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@test ~]# fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00011a59

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 1953523711 975712256 8e Linux LVM

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/centos-swap: 10.5 GB, 10536091648 bytes, 20578304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/centos-home: 934.9 GB, 934897778688 bytes, 1825972224 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

使用fdisk可不是简单的查询,我们可以进入某一个分区的fdisk模式,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@test ~]# fdisk /dev/sda1

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa3b4458e.

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

输入m列出可以执行的命令,可以使用fdisk来删除、创建主分区和扩展分区(逻辑分区)。如果要将这些分区挂载到指定目录则需要使用mount命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@test ~]# mount -a
[root@test ~]# mount [-l]
[root@test ~]# mount [-t 文件系统] [-L Label名] [-o 额外选项] \
[-n] 装置文件名 挂载点
选项与参数:
-a :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
-l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!
-t :与 mkfs 的选项非常类似的,可以加上文件系统种类来指定欲挂载的类型。
常见的 Linux 支持类型有:ext2, ext3, vfat, reiserfs, iso9660(光盘格式),
nfs, cifs, smbfs(此三种为网络文件系统类型)
-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序
的运行。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。
此时就得要使用这个 -n 的选项了。
-L :系统除了利用装置文件名 (例如 /dev/hdc6) 之外,还可以利用文件系统的标头名称
(Label)来进行挂载。最好为你的文件系统取一个独一无二的名称吧!
-o :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:
ro, rw: 挂载文件系统成为只读(ro) 或可擦写(rw)
async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的
内存机制,请参考文件系统运行方式。默认为 async。
auto, noauto: 允许此 partition 被以 mount -a 自动挂载(auto)
dev, nodev: 是否允许此 partition 上,可创建装置文件? dev 为可允许
suid, nosuid: 是否允许此 partition 含有 suid/sgid 的文件格式?
exec, noexec: 是否允许此 partition 上拥有可运行 binary 文件?
user, nouser: 是否允许此 partition 让任何使用者运行 mount ?一般来说,
mount 仅有 root 可以进行,但下达 user 参数,则可让
一般 user 也能够对此 partition 进行 mount 。
defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
remount: 重新挂载,这在系统出错,或重新升级参数时,很有用!

文件管理

文件系统

在上面我们对磁盘分区后需要格式化才能挂载这个分区,为什么要格式化呢?

这是因为每种操作系统所配置的文件属性/权限并不相同, 为了存放这些文件所需的数据,因此就需要将分割槽进行格式化,以成为操作系统能够利用的文件系统格式。

文件压缩/解压

不同的文件压缩算法会有特定的压缩文件扩展名,常见的压缩文件扩展名如下:

扩展名说明
.Zcompress程序压缩的文件
.gzgzip程序压缩的文件
.bz2bzip2程序压缩的文件
.tartar程序打包的数据,并没有压缩过
.tar.gztar程序打包的数据,经过gzip压缩
.tar.bz2tar 程序打包的文件,其中并且经过 bzip2 的压缩

有关这些压缩算法的命令我们可以无需研究,只需要研究tar打包文件即可,因为它比较流行且集成了打包命令。由于tar的使用广泛,所以windows的WinRAR也支持.tar.gz格式的压缩文档。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@test ~]# tar [-j|-z] [cv] [-f 创建的档名] filename... <==打包与压缩
[root@test ~]# tar [-j|-z] [tv] [-f 创建的档名] <==察看档名
[root@test ~]# tar [-j|-z] [xv] [-f 创建的档名] [-C 目录] <==解压缩
选项与参数:
-c :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的档名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项罗!
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

其他后续练习会使用到的选项介绍:
-p :保留备份数据的原本权限与属性,常用於备份(-c)重要的配置档
-P :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!

软件安装

在windows上面安装一个应用程序是非常容易的,但是在Linux上可能会比较麻烦,有时候可能需要编译源码进行安装。Linux上面安装软件大致上有四种方式。

源码安装

这种安装方式是最原始也是最复杂的方法,但是这种方法是比较推荐的一种。

建议源码保存位置: /usr/local/src
建议安装位置:/usr/local/

下面以apache2安装为例

第一步:安装准备和源码包获取

由于源码都是c语言写的,所以要先安装c语言编译器:gcc

从官方网站下载源码包,若是下载到了windows上面,可以使用ftp等传到linux上

解压到/usr/local/src/apache2目录下

1
tar -zvxf httpd-2.2.31.tar.gz

第二步:编译并安装

进入解压目录,执行configure命令

1
[lixiaoqiang@test ~]$ ./configure

该命令用于软件配置与检查(基本上每个源码包都会有该命令,即使个别的没有该命令,也会提供相关替代命令),它有以下几点功能:

  • 定义需要的功能选项
  • 检测系统环境是否符合安装要求
  • 把第一项中定义好的功能选项和第二项中检测系统环境的信息都写入Makefile文件
1
2
3
4
[lixiaoqiang@test ~]$ ./configure --prefix=/usr/local/apache2  #执行来指定安装位置(apache2目录不需要提前创建)
[lixiaoqiang@test ~]$ make depend #检查依赖库
[lixiaoqiang@test ~]$ make #编译源码
[lixiaoqiang@test ~]$ make install #安装程序

如果命令执行过程中发生终止,并且出现error、warn或no提示,则表明出错,若执行./configure或make命令时出现错误,是不需要删除/usr/local/apache2目录的,因为程序还没有真正安装。只需要执行make clean命令即可,该命令用于清除缓存、临时文件等,使安装环境恢复到未安装状态。若执行make install命令时报错,则需要删除/usr/local/apache2目录,并且执行make clean命令才行。

RPM(二进制包)

所有RPM包都在系统光盘的Packages目录中,RedHat的yum是收费服务,而CentOS的yum是免费服务。

RPM包命名规则: 软件包名-软件版本-软件发布的次数-适合的Linux平台-适合的硬件平台-包扩展名

1
httpd-2.2.15-15.el6.centsos.1.i686.rpm

yum在线安装可以方便的解决依赖文件,一条命令就可以帮用户从网上(本地也可以)找到安装包进行安装。

  1. RPM内含已编译过的程序与设置文件等数据,可以让用户免除重新编译的困扰。
  2. RPM在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装。
  3. RPM文件本身提供软件版本信息、依赖属性软件名称、软件用途说明、软件所含文件信息,便于了解软件。
  4. RPM管理的方式使用数据库记录RPM文件的相关参数,便于升级、删除、查询与验证。

RPM默认安装路径:

路径说明
/etc一些设置文件放置的目录如/etc/crontab
/usr/bin一些可执行文件
/usr/lib一些程序使用的动态函数库
/usr/share/doc一些基本的软件使用手册与帮助文档
/usr/share/man一些man page文件

RPM 有五种操作模式,分别为:安装、卸载、升级、查询和验证。

用RPM安装软件包

1
2
3
rpm -i example.rpm  #安装 example.rpm 包;
rpm -iv example.rpm #安装 example.rpm 包并在安装过程中显示正在安装的文件信息;
rpm -ivh example.rpm #安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度

删除已安装的软件包

1
rpm -e example

升级软件包

1
rpm -Uvh example.rpm

安装rpm到指定目录

1
rpm -ivh --prefix=路径 FILE.rpm

查询软件包

1
rpm -q example

如果用户得到一个新的RPM文件,却不清楚它的内容;或想了解某个文件包将会在系统里安装那些文件,可以这样做:

1
rpm -qpi koules-1.2-2.i386.rpm

yum在线安装

yum是基于rpm但更胜于rpm的软件管理工具, yum的优点是将所有软件包放到官方服务器上,当进行yum在线安装时,可以自动解决依赖性问题,而且会帮助设置系统环境变量。(rpm缺点:安装过程中,rpm包依赖性太强)。redhat的yum在线安装需要付费,CentOS不需要。

查看:yum list package
安装:yum install package
删除:yum remove package
升级rpm包:yum update package
查看rpm包信息:yum info package

原理:每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。yum会定期去”更新”yum服务器上的rpm包”清单”,然后把”清单”下载保存到yum自己的cache里面,根据/etc/yum.conf里配置(默认是在/var/cache/yum下面),每次调用yum装包的时候都会去这个cache目录下去找”清单”,根据”清单”里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,然后再去yum服务器下载rpm包安装。(前提是不存在rpm包的cache)

例如我们安装ftp服务:

1
2
$sudo vsftpd -v  #查看是否已经安装ftp服务
$sudo yum -y install vsftpd #安装ftp服务 -y的意思是对所有的选项都选择YES

这样ftp服务就安装好了,接下来只需要打开/etc/vsftpd/vsftpd.conf 配置一下即可。

再例如安装MySQL

第一步:我们去MySQL官网可以找到yum的安装库路径:https://dev.mysql.com/downloads/repo/yum/

第二步:根据官网文档,首先下载rpm

第三步:接下来更新rpm

1
$sudo  rpm -Uvh platform-and-version-specific-package-name.rpm

第四步:查看系统有哪些可用的mysql仓库

1
2
3
4
$sudo yum repolist all | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community 36
mysql-tools-community/x86_64 MySQL Tools Community 47
mysql57-community/x86_64 MySQL 5.7 Community Server 187

第五步:安装最新版本

1
$sudo yum install mysql-community-server

第六步:启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
$sudo service mysqld start 
$sudo systemctl start mysqld #CentOS 7
$sudo systemctl status mysqld

● mysqld.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-05-27 12:56:26 CST; 15s ago
Process: 2482 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS)
Process: 2421 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 2481 (mysqld_safe)
CGroup: /system.slice/mysqld.service
├─2481 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─2647 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/...

apt-get在线安装

apt-get是通过本地的 Linux 连接到网络上的 apt 仓库(源)来下载软件并自动安装,默认Ubuntu是包含这个工具的。

常用命令:

1
2
3
4
5
6
sudo apt-get update # 从网上的源更新安装包信息
sudo apt-get upgrade # 升级软件包到最新版本
sudo apt-get -f install # 修复软件依赖包的关系
sudo apt-get install software_name #安装软件
sudo apt-get remove software_name # 卸载软件,但是卸载不完全
sudo apt-get remove --purge software # 常用卸载方式,卸载完全

介绍一个小工具 aptitude,这个工具可以自动安装软件的依赖包,当你使用 apt-get 安装过程中提示你需要安装某些依赖的时候,你可以使用这个工具来代替 apt-get 使用,即可自动安装依赖的包。

1
sudo apt-get install aptitude

如果你使用 apt-get 安装软件的过程中提示你需要安装依赖,那么你换成下面的命令重新安装即可:

1
sudo aptitude software_name

如果你不能通过 apt-get 安装软件,你很可能需要更新系统的源地址。我使用的是 ailiyun,你可以将下面的地址添加到你的 sudo vim /etc/apt/sources.list 中:

1
2
deb http://mirrors.aliyun.com/ubuntu/ yakkety main universe multiverse restricted
deb http://security.ubuntu.com/ubuntu/ yakkety-security multiverse main universe restricted

然后执行更新

1
sudo apt-get update

评论

Ajax Android AndroidStudio Animation Anroid Studio AppBarLayout Babel Banner Buffer Bulma ByteBuffer C++ C11 C89 C99 CDN CMYK COM1 COM2 CSS Camera Raw, 直方图 Chrome Class ContentProvider CoordinatorLayout C语言 DML DOM Dagger Dagger2 Darktable Demo Document DownloadManage ES2015 ESLint Element Error Exception Extensions File FileProvider Flow Fresco GCC Git GitHub GitLab Gradle Groovy HTML5 Handler HandlerThread Hexo Hybrid I/O IDEA IO ImageMagick IntelliJ Intellij Interpolator JCenter JNI JS Java JavaScript JsBridge Kotlin Lab Lambda Lifecycle Lint Linux Looper MQTT MVC MVP Maven MessageQueue Modbus Momentum MySQL NDK NIO NexT Next Nodejs ObjectAnimator Oracle VM Permission PhotoShop Physics Python RGB RS-232 RTU Remote-SSH Retrofit Runnable RxAndroid RxJava SE0 SSH Spring SpringBoot Statubar Style Task Theme Thread Tkinter UI UIKit UML VM virtualBox VS Code VUE ValueAnimator ViewPropertyAnimator Vue Vue.js Web Web前端 Workbench api apk bookmark by关键字 cli compileOnly computed css c语言 databases demo hexo hotfix html iOS icarus implementation init jQuery javascript launchModel logo merge methods mvp offset photos pug query rxjava2 scss servlet shell svg tkinter tomcat transition unicode utf-8 vector virtual box vscode watch webpack 七牛 下载 中介者模式 串口 临潼石榴 主题 书签 事件 享元模式 仓库 代理模式 位运算 依赖注入 修改,tables 光和色 内存 内核 内部分享 函数 函数式编程 分支 分析 创建 删除 动画 单例模式 压缩图片 发布 可空性 合并 同向性 后期 启动模式 命令 命令模式 响应式 响应式编程 图层 图床 图片压缩 图片处理 图片轮播 地球 域名 基础 增加 备忘录模式 外观模式 多线程 大爆炸 天气APP 太白山 头文件 奇点 字符串 字符集 存储引擎 宇宙 宏定义 实践 属性 属性动画 岐山擀面皮 岐山肉臊子 岐山香醋 工具 工厂模式 年终总结 开发技巧 异常 弱引用 恒星 打包 技巧 指令 指针 插件 插值 摄影 操作系统 攻略 故事 数据库 数据类型 数组 文件 新功能 旅行 旋转木马 时序图 时空 时间简史 曲线 杂谈 权限 枚举 架构 查询 标准库 标签选择器 样式 核心 框架 案例 桥接模式 检测工具 模块化 模板 模板引擎 模板方法模式 油泼辣子 泛型 洛川苹果 浅色状态栏 渲染 源码 源码分析 瀑布流 热修复 版本 版本控制 状态栏 状态模式 生活 留言板 相册 相对论 眉县猕猴桃 知识点 码云 磁盘 科学 笔记 策略模式 类图 系统,发行版, GNU 索引 组件 组合模式 绑定 结构 结构体 编码 网易云信 网格布局 网站广播 网站通知 网络 美化 联合 脚手架 膨胀的宇宙 自定义 自定义View 自定义插件 蒙版 虚拟 虚拟机 补码 补齐 表单 表达式 装饰模式 西安 观察者模式 规范 视图 视频 解耦器模式 设计 设计原则 设计模式 访问者模式 语法 责任链模式 贪吃蛇 转换 软件工程 软引用 运算符 迭代子模式 适配器模式 选择器 通信 通道 配置 链表 锐化 错误 键盘 闭包 降噪 陕西地方特产 面向对象 项目优化 项目构建 黑洞
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×