Linux和Shell学习记录
Linux和Shell学习记录
总结记录韩顺平老师《2021图解Linux》课程里面的内容,主要是基础部分。
课程链接:https://www.bilibili.com/video/BV1Sv411r7vd/
vim使用
进入vim编辑器
1 |
|
进入后模型是查看(一般)模式
,此模式下可进行快捷操作例如:删除、复制、撤销
等。键盘键入i
即可进入编辑(插入)模式
,此模型下可进行文本编辑。键盘键入ESC
回到查看模式
,在此基础上键入:
进入命令行模式,进行文件的保存。
三种模式的切换示意图:
快捷键
- 查看模式
yy
拷贝光标所在的行,此时移动光标至需要粘贴的位置,键入p
粘贴;5yy
拷贝光标行及以下4行,同样键入p
粘贴;
dd
删除光标所在的行;5dd
删除光标行及以下4行;
u
撤销上一次操作;gg
将光标快速跳到文件最首行;G
将光标快速跳到文件最末行;20 shift+g
,将光标跳到第20行;
.
单独的小数点,表示重复上一个动作;上一条指令是dd
,则键入.
代表删除光标所在行。
- 命令行模式
- 取消、显示行号
- 命令行模式下输入
:set nu
显示文件行号; - 命令行模式下输入
:set nonu
关闭显示文件行号;
- 命令行模式下输入
- 查找关键字符
- 键入
/abc
,并回车,向下查找文件中是否存在abc
,默认返回字符的第一个位置,然后键入n
继续查找下一个匹配的字符; - 键入
?abc
,并回车,向上查找文件中是否存在abc
,默认返回字符上面最近位置,然后键入n
继续查找下一个匹配的字符;
- 键入
- 保存及退出
- 命令行模式下键入
:wq
保存并退出文件; :wq!
强制保存退出;:q!
强制退出不保存;:q
普通退出。
- 命令行模式下键入
- 取消、显示行号
Linux 开关机和用户登录注销
关机和重启
-
关机
1
2
3shutdown -h now # 立该进行关机
shutdown -h 1 # "hello, 1 分钟后会关机了"
halt # 立刻关机 -
重启
1
2shutdown -r now # 立即重启
reboot # 立即重启 -
同步(将内存中的数据写到磁盘)
1
sync # 把内存的数据同步到磁盘.
注:一般在关机或者重启前先执行一遍
sync
指令。
用户登录于注销
-
登录
1
su - root
然后输入root账户的密码即可;从高权限用于切换到低权限用户不需要密码;反之则需要。
-
注销
1
logout
退出当前登录的用户,一般在ssh连接时常用。
Linux 用户管理
添加、查看、切换、删除用户
只有root
用户才能进行其它用户的管理。
-
添加用户
1
2useradd tom # 添加tom用户 ubuntu系统默认不创建家目录,但是CentOS会自动创建
useradd -m tom # 添加tom用户,并创建tom的家目录 -
设置用户密码
1
passwd tom
-
查看用户
1
id tom
查看
tom
用户所处的组 -
切换用户
1
su - tom
-
删除用户
1
2userdel tom # 只删除用户,保留用户文件
userdel -r tom # 删除用户及其家目录文件
用户组管理——添加、修改、删除组
Linux内每个用户是以用户组来进行管理的,同组内的用户权限相同,因此可根据需要将不同用户放入不同的组中,然后给不同的组赋予不同的权限。
Linux在创建用户时,默认会创建与用户名一致的组,并把该用户放到该组中。如果需要在创建用户时指定对应的组,需使用-g
参数。
useradd -g students -m tom # 创建tom,并将其移动到students组中
-
添加组
1
groupadd students # 添加 students 组
-
修改组成员
1
usermod -g students jack # 将jack移动到students组
-
删除组
1
groupdel students
用户组管理——权限管理
在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组
的概念。一般而言,用户创建了文件,这个文件的所有者就是该用户,同时用户所在的组就是文件在的所在组,而剩下的组就是该文件的其他组。所有者以及不同组,对文件的权限(读、写、可执行)一般不同。
-
修改文件的所有者
1
2chown jack apple.txt # 将apple.txt文件的所有者修改成jack
chown -R jack /home/test # 将/home/test目录下所有的文件和目录的所有者都修改成 jack -
修改文件/目录所在的组
1
2chgrp fruit orange.txt # 将orange.txt文件的所在组更改为fruit
chgrp -R fruit /home/test # 将/home/test目录下所有的文件和目录的所在组都修改成 fruit -
修改用户的初始登录文件夹
1
usermod -d tom2 tom # 将tom用户的文件夹由tom变为tom2
注:用户需要有进入新目录的权限。
-
赋予用户root权限
用
root
账户登录,然后使用vim /etc/sudoers
打开,在root
下面添加一行一样的语句,即可赋予其他用户root权限。1
2
3## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tom ALL=(ALL) ALL
文件/目录权限介绍
键入ls -l
查看目录内所含文件、子目录的详细信息
第0位,确定文件类型:d、-、l、c、b
d
——表示是一个目录-
——表示就是一个普通文件l
——表示是一个软连接(快捷方式)c
——字符串设备,鼠标、键盘等b
——块设备,硬盘等
第1-3位,确定文件所有者对该文件的权限
r
——可读,可查看w
——可写,可修改x
——可执行
第4-6位,确定文件所在组成员对该文件的权限,同样是rwx
,如果没有相应权限则用-
代替
第7-9位,确定其他组成员对该文件的权限。
举例:drwxrwxr-x 4 hjy hjy 4096 6月 9 14:26 apps
,表示这是一个目录,然后目录所有者hjy
对该目录有rwx
权限,目录所在组hjy
也有rwx
权限,最后其他组对该目录有rx
权限,目录中有4
个子文件或文件,最后修改时间是6月9日14:26
,此目录名为apps
。
rwx权限:作用到目录和作用到文件
- 作用到文件
r
,读取,查看w
,可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权 限,才能删除该文件。x
,可以被执行
- 作用到目录
r
,可以读取,ls 查看目录内容w
,可以修改, 对目录内创建+删除+重命名目录x
,可以进入到该目录
chmod 修改文件权限
-
通过
+ - =
变更权限u
,所有者;g
,所在组,o
,表示其他组,a
,表示所有1
2
3chmod u=rwx,g=rx,o=x my_task # 赋予所有者对my_task目录rwx的权限,赋予其它组成员对my_task可执行的权限。
chmod o+r my_task # 给其他组成员赋予可读的权限
chmod a-r my_task # 对所有成员都赋予可读权限 -
通过数字变更权限
r=4,w=2,x=1
,可读权限用4表示,可执行权限用2表示,因此下述两条语句等价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
36
37
38
39
40
41
42
43chmod u=rwx,g=rx,o=x my_task
chmod 751 my_task
### 用户管理相关的文件
1. 用户配置文件——`/etc/passwd`
`cat /etc/passwd `部分显示如下:
<img src="https://imgbed2333.oss-cn-beijing.aliyuncs.com/hjy/image-20220615173659819.png" alt="image-20220615173659819" style="zoom:100%;" />
每列含义:`用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell`
2. 口令配置文件——`/etc/shadow`
都是一些加密的信息,感觉没啥用。
每列含义:`登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志`
3. 组配置文件——`/etc/group`
`cat /etc/group `部分显示如下:
<img src="https://imgbed2333.oss-cn-beijing.aliyuncs.com/hjy/image-20220615174208846.png" alt="image-20220615174208846" style="zoom:100%;" />
每列含义:`组名:口令:组标识号:组内用户列表`
## 设置、查看Linux运行级别
1. 运行级别:
1. `0`- 关机
2. `1`- 单用户(用于找回root密码)
3. `2`- 多用户状态没有网络服务
4. `3`- 多用户状态有网络服务
5. `4` - 系统未使用,保留给用户
6. `5`- 图形界面
7. `6`- 系统重启
2. 查看运行级别
```shell
systemctl get-default一般返回是
graphical.target
,代表上述的级别5
-图形界面。1
2
3# 对应关系
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5设置为多用户有网络的级别:
1
systemctl set-default multi-user.target
Linux文件目录类指令
-
pwd 指令
显示当前工作目录的绝对路径。
1
pwd
-
ls 和 ll 指令
显示当前的路径中下的文件和目录。
ls
一般只显示可见的文件,且文件显示的信息较少;ll
能够较全的显示文件、目录信息(包括修改时间、大小、权限等等。)ls
选项参数:-a
——显示所有文件包括.xxx
开头的隐藏文件;-h
——human
表示显示信息以便于人类阅读的方式显示,主要为了将文件大小自动转换为KB,MB,GB
的形式;-l
——用在ls
命令后,以显示更全的信息。
ll
直接就是全信息显示,也会显示隐藏文件,只有一个-h
参数。1
2ls -ahl # 带参数使用
ll -h -
cd 指令
切换到指定目录
1
2
3
4
5cd ~ # 切换到home目录
cd .. # 切换到上一级目录
cd ../.. # 切换到上上级目录
cd / # 切换到根目录
cd /home/tom/downloads # 切换到tom的downloads目录 -
mkdir 指令
创建文件夹(目录)
1
2mkdir my_task # 创建文件夹
mkdir -p my_task/task1 # 创建多级目录 -
rm 指令
删除文件或者文件夹
1
2rm task.zip # 删除文件
rm -rf my_task # 递归删除文件夹(目录)-r
,表示递归删除-f
,表示直接删除不报告,不用确认删除过程。 -
touch 指令
生成普通文件
1
touch hello.txt
-
cp 指令
拷贝文件
1 |
|
-f
,覆盖已经存在的目标文件而不给出提示。
-
mv 指令
移动文件或者目录,或者为其重命名
1
2
3mv /home/task1 /home/task # 将task1目录移动到task目录下
mv hello_copy.txt hello.txt # 相同目录下移动就是重命名,将hello_copy改为hello
mv hello.txt /home/task # 将hello.txt移动到task目录下 -
cat 指令
查看文件内容,不能修改文件
1
2
3cat /etc/profile # 查看profile文件,打印在终端
cat -n /etc/profile # 查看profile文件并显示行号
cat -n /etc/profile | more # 查看profile文件并交给more指令交互展示 -
more 指令
交互式显示文件内容
1
more /etc/profile # 交互式查看profile文件
more 交互键说明:
空格
——下翻一页;Enter
——向下翻一行;q
——不再查看立即退出交互;=
——显示当前行号;:f
——输出文件名和当前行行号。注:
q,=,:f
这些指令在敲出来的时候都不会在终端上有显示,直接敲就行。 -
less 指令
less 和 more 类似都可以用来交互式查看文件,不过less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
1
less /etc/profile
less 交互键说明:
空格
——下翻一页;/abc
——+ 回车,向下搜索abc
字符,键入n
查询下一个,键入N
查询上一个;?abc
——+ 回车,向上搜索abc
字符,键入n
查询下一个,键入N
查询上一个;q
——退出查看。 -
echo 指令
相当于Python里面的
print()
,打印输出内容;主要还是在.sh
文件内使用。1
echo "hello world!"
-
head 指令
查看文件前面几行的内容
1
2
head /etc/profile # 查看profile前10行的内容
head -n 20 /etc/profile # 查看profile前20行的内容
-
tail 指令
查看文件最后几行的内容
1
2
3tail /etc/profile # 查看profile末尾10行的内容
tail -n 20 /etc/profile # 查看profile末尾20行的内容
tail -f /etc/profile # 实时监控profile文件的改动-f
,参数指定后tail进程为一直占据终端窗口,可使用ctrl + c
终止进程。 -
>
指令和>>
指令>
表示输出重定向,>>
表示重定向追加1
2
3
4ls -l > log.txt # 将当前目录下的文件和子目录以文本形式写入log.txt中
ls -al >> log.txt # 将目录信息追加(补充)到log.txt中
cat /etc/profile > my_profile # 将/etc/profile中的内容重定向到my_profile文件中
echo "hello world!" >> my_log.txt -
ln 指令
软连接,相当于Windows里面的快捷方式
1
2ln -s /root /home/myroot # 在/home目录下创建一个软连接myroot,连接到/root目录
rm /home/myroot # 删除软链接 -
history 指令
查看已经执行过历史命令,也可以执行历史指令
1
2
3history # 查看之前已执行的历史命令
history 10 # 查看前10条已执行的历史命令
!476 # 执行之前id为476的历史命令
Linux时间日期类指令
-
date 显示与设置日期
显示相关
1
2
3
4
5date # 显示当前时间
date +%Y # 显示当前年份
date +%m # 显示当前月份
date +%d # 显示当前天数
date "+%Y-%m-%d %H:%M:%S" # 显示年月日时分秒设置相关
1
date -s "2020-11-03 20:02:10" # 设置时间 -s代表set
-
cal 日历指令
1
2cal # 显示当前日历
cal 2022 # 显示2022年日历
Linux搜索查找类指令
-
find 指令
1
2
3
4find /home/tom -name hello.txt # 在/home/tom下通过文件名查找hello.txt
find /home/tom -user tom # 在/home/tom下查找属于用户tom的文件
find /home/tom -size +200M # 在/home/tom下查找大于200M的文件
find /home/tom -size -200M # 在/home/tom下查找小于200M的文件 -
locate 指令
locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速 定位给定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。
1
2updatedb # 先创建更新locate数据库
locate hello.txt # 全局查找hello.txt文件,并返回文件路径 -
grep 指令
查找过滤文件,得到想看的字符内容
1
2cat -n /home/hello.txt | grep "yes" # 在hello.txt文件中,查找"yes"所在行,并且显示行号
grep -n 'yes' /home/hello.txt # 在hello.txt文件中,查找"yes"所在行,并且显示行号-i
,表示筛选时忽略大小写。
Linux压缩和解压指令
-
gzip 和 gunzip 指令
压缩和解压
.gz
后缀的文件1
2gzip /home/my_task/hello.txt # 压缩hello.txt文件并存入my_task目录下
gunzip /home/my_task/hello.txt.gz # 解压文件 -
zip 和 unzip 指令
压缩和解压
.zip
后缀的文件1
2zip -r myhome.zip /home/ # 将home目录及其包含的文件和子文件夹都压缩
unzip -d /opt/tmp /home/myhome.zip # 将myhome.zip解压到/opt/tmp目录下-d
,指定解压目录 -
tar 指令
打包指令,用于处理
.tar.gz
后缀的文件-c
,产生.tar
打包文件-v
,显示处理过程信息-f
,指定打包压缩后的文件名-z
,打包同时压缩-x
,解包.tar
文件1
2
3
4tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt # 打包压缩多个文件
tar -zcvf myhome.tar.gz /home/ # 将/home 的文件夹 压缩成 myhome.tar.gz
tar -zxvf pc.tar.gz # 解压到当前目录
tar -zxvf /home/myhome.tar.gz -C /opt/tmp # 解压到/opt/tmp目录-C
,指定解压目录
Linux 磁盘挂载情况以及占用空间查看
-
使用 lsblk 或 lsblk -f 查看当前主机的磁盘挂载情况
1
lsblk -f
-
du -h 指令
查询指定目录下磁盘的占用情况,默认为当前目录
-h
——human格式显示-a
——包含文件和目录--max-depth=1
——查询占用情况时使用的子目录深度,一般设定1即可-c
——列出各文件明细的同时,增加汇总情况1
du -hac --max-depth=1 /my_task # 查看my_task目录中一级子目录的磁盘占用情况
-
磁盘情况实用指令
1
2
3
4
5ls -l /opt | grep "^-" | wc -l # 统计/opt文件夹下文件的个数
ls -lR /opt | grep "^-" | wc -l # 统计/opt文件夹下文件的个数,包括子文件夹里的
ls -l /opt | grep "^d" | wc -l # 统计/opt文件夹下目录的个数
ls -lR /opt | grep "^d" | wc -l # 统计/opt文件夹下目录的个数,包括子目录里的
tree /home/my_task # 以树状图的形式显示my_task下的目录结构
Linux 进程管理
普通进程管理
-
ps -aux 指令
显示当前运行进程的所有信息,其中
PID
表示进程号,PPID
表示其父进程号1
ps -aux
-
-A
列出所有的进程 -
-w
显示加宽可以显示较多的资讯 -
-au
显示较详细的资讯 -
-aux
显示所有包含其他使用者的行程
-
-
ps -ef 指令
以全格式显示当前所有的进程的信息,包括其父进程;
-e
表示显示所有进程,-f
表示全格式显示 -
top 指令
实时显示主机当前进程信息,默认以CPU使用率从高到低排序
-d
——动态更新间隔时间,默认是3秒-i
——不显示闲置或者僵死进程-p
——只监控指定pid的进程1
top -p 1079 -d 1 # 只监控1079进程的变化情况,每隔一秒更新
top交互指令:
P
——以CPU使用率排名,默认此项M
——以内存使用率排名N
——以PID序号排序u
——+ tom 只查询tom用户相关的进程k
——+ 11421 终止pid为11421的进程q
——退出top -
kill 和 killall 指令
终止某个进程
1
2
3kill 11421 # 终止pid号为11421的进程
kill -9 11421 # 强制终止pid号为11421的进程
killall gedit # 终止所有名字为gedit的进程 -
pstree 指令
以树状图的结构显示进程信息
-p
,显示进程的pid;-u
,指定查看属于某个用户的进程
服务进程管理
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld, sshd 防火墙等),因此又可称为守护进程。
-
通过
service
管理服务1
2service 服务名 [start | stop | restart | reload | status]
service sshd start # 开启sshd服务 -
通过
systemctl
管理服务1
2
3
4
5
6
7
8systemctl [start | stop | restart | status] 服务名
systemctl start sshd
systemctl list-unit-files # 查看服务是否开机自启
systemctl list-unit-files | grep sshd # 查看sshd服务
systemctl enable sshd # 设置服务开机启动
systemctl disable sshd
systemctl is-enabled sshd # 查询某个服务是否是自启动
Shell 介绍
Shell是一个命令行解释器,可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
Shell 脚本格式要求:
- 脚本以
#!/bin/bash
开头 - 脚本需要有可执行权限
如果脚本.sh
文件没有可执行权限也可以通过sh my_shell.sh
进行执行。
Shell 变量
命名规则和一般脚本语言的规则一致,变量由字母、数字、下划线组成,但是不能以数字开头;Shell中的变量有系统变量和自定义变量之分,其中系统变量包括$HOME、$PWD、$SHELL、$USER
等等。
-
定义普通变量
1
2
3
4#!/bin/bash
A=100 # 定义变量A
echo A=$A # 输出A变量的值
echo "A=$A" # 同上 -
撤销普通变量
1
2
3#!/bin/bash
A=100 # 定义变量A
unset A # 撤销变量A -
定义静态变量
1
2
3#!/bin/bash
readonly B=10
# unset B # 静态变量不能被撤销 -
使用环境变量
1
2
3
4
5
6
7
8
9
10#!/bin/bash
echo "local_path=$PWD"
# shell 多行注释 :<<! 注释内容 !
:<<!
C=`date`
D=$(date)
echo "C=$C"
echo "D=$D"
! -
定义环境变量,供所有Shell脚本使用
1
2export A=100 # 定义A为环境变量(临时添加),在另一个.sh脚本中也能使用到A
unset A # 撤销环境变量进入
/etc/profile
文件或者.bashrc
文件,在文件末尾加入export A=100
,并执行source /etc/profile
或者source .bashrc
则环境变量立即生效,并永久存在。
Shell 位置参数变量和预定义变量
位置参数变量用于获取执行.sh
脚本时,附加的一些额外参数信息,预定义变量用于一些查询描述。
$n
,n可以为0-9是个数字,或者用${12}
来表示两位数字。$0
表示执行命令本身,$1
表示.sh
命令后接的第一个参数,$2
表示命令后接的第二个参数,以此类推。$*
,一次性获取命令后的所有参数,把所有参数看成一个整体$@
,一次性获取命令后的所有参数,把每个参数区别对待$#
,获取命令行后参数的个数$$
,获取当前进程的PID号$!
,后台运行的最后一个进程的PID号$?
,判定上一条指令是否执行成功,如果成功,则返回0,返回非0则表示上条指令执行不成功。
示例:
1 |
|
Shell 运算符和条件语句
运算符
基本表达式:$[运算式]
;运算符号:+ - * / %
,加减乘除和取余
示例:
1 |
|
条件语句
基本语法:[ condition ]
,注condition前后有空格,如果非空则返回true
1 |
|
-
if
判断语法格式:
1
2
3
4
5
6
7if [ condition ]
then
coding
elif [ condition ]
then
coding
fi -
常用判断字符
- 字符串比较:
=
- 两个整数比较:
-lt -le -eq -gt -ge -ne
- 按照文件权限判断:
-r -w -x
- 按照文件类型判断:
-f -e -d
,-f
和-d
,表示文件存在且是一个文件或者目录
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#!/bin/bash
if [ "ok" = "ok" ]
then
echo "equal"
fi
if [ 23 -ge 22 ]
then
echo "大于"
fi
if [ -f ./hello.txt ]
then
echo "存在"
fi
if [ -d ./hello.txt ]
then
echo "存在"
else
echo "不存在"
fi输出:
1
2
3
4equal
大于
存在
不存在 - 字符串比较:
-
case
判断语法格式:
1
2
3
4
5
6
7
8
9
10
11case $变量 in
"情况1")
coding
;;
"情况2")
coding
;;
*) # 其它情况
coding
;;
esac示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#!/bin/bash
case $1 in
"1")
echo "a"
;;
"2")
echo "b"
;;
"3")
echo "c"
;;
*)
echo "d"
;;
esac
# 执行 sh test.sh 1
# 输出 a
循环
-
for 循环
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#!/bin/bash
for i in "$*"
do
echo "num is $i"
done
for i in "$@"
do
echo "num is $i"
done
# 输入: sh test.sh 10 20 30
# 输出:
# num is 10 20 30
# num is 10
# num is 20
# num is 30
SUM=0
for(( i=1; i<=$1; i++))
do
SUM=$[$SUM+$i]
done
echo "sum is $SUM" -
while 循环
示例:
1
2
3
4
5
6
7
8
9#!/bin/bash
SUM=0
i=0
while [ $i -le $1]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum is $SUM"
控制台交互式输入
指令read
,参数-p
,提示语句,-t
,读取参数时的等待时间(秒)。-t
参数在Ubuntu里面貌似会报错。
示例:
1 |
|
函数相关
-
系统函数
-
basename
——返回文件名;1
basename /home/hello.txt # 打印hello.txt
-
dirname
——返回除去文件名后剩下的绝对路径1
dirnaem /home/hello.txt # 打印/home
-
-
自定义函数
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#!/bin/bash
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
:<<!
输出:
这个函数会对输入的两个数字进行相加运算...
输入第一个数字:
1
输入第二个数字:
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 !
!apt相关指令
sudo apt-get update
** 更新源**sudo apt-get install package
安装包sudo apt-get remove package
删除包sudo apt-cache search package
搜索软件包sudo apt-cache show package
获取包的相关信息:大小、说明、版本sudo apt-get install package --reinstall
重新安装包sudo apt-get -f install
修复安装sudo apt-get remove package --purge
删除包,包括配置文件等sudo apt-get build-dep package
安装相关的编译环境sudo apt-get upgrade
更新已安装的包sudo apt-get source package
下载该包的源代码