怕什么真理无穷,进一寸有一寸的精彩
文章目录
- 系统学习Linux:Linux基础知识库
软件包管理
软件包管理
/etc/apt/sources.list
:为APT提供软件源的位置,以便系统可以正确地获取和管理软件包/var/lib/apt/list/*
:该目录下的文件存储了软件包的元数据,为APT提供了有关可用软件包的信息。这些文件使得系统可以快速地搜索、安装、更新和管理软件包,提高了软件包管理的效率和可靠性/var/cache/apt/archives
:存储了通过APT下载的软件包文件,提供了缓存功能,可以加快软件包安装和升级的速度,并使离线安装成为可能。这个目录对于优化系统的软件包管理非常有用。
-
软件包类型:
file
命令查看文件类型- 二进制软件包(deb):包含可执行文件、库文件、配置文件、man/info页面、版权声明和其他文档
- 源码包(depsrc):包含软件源代码、版本修改说明、构建指令以及编译工具等。先由 tar工具归档为.tar.gz文件,然后再打包成 .dsc文件
-
软件包的命令
-
软件包名称 软件包版本 修订版本 体系架构
-
如 sl_3.03-16_i386.deb
-
-
软件包管理工具分类
-
命令行:
dpkg-deb、dpkg、apt
- 再命令行模式下完成软件包管理任务
- dpkg
dpkg -i <package>
:安装一个在本地文件系统存在的Debian软件包dpkg -r <package>
:移除一个已经安装的软件包dpkg -P <package>
:移除已安装软件包及配置文件dpkg -L <package>
:列出安装的软件包清单dpkg -s <package>
:显示软件包安装状态
- apt
- APT工作原理:在Ubuntu系统中,使用软件源配置文件
/etc/apt/sources.list
列出最合适访问的镜像站点地址,为提高效率,需为这些资源列个清单,以便本地主机查询 - 刷新软件源:
apt-get update
- 管理软件包
apt-get 子命令 [选项] pkg
子命令 描述 选项 描述 update 下载更新软件包列表信息 -d 仅下载软件包,而不安装或解压 upgrade 将系统中所有的软件包升级到最新版本 -f 修复系统中存在的软件包依赖性问题 install 下载所需软件包并进行安装配置 -m 当发现缺少关联软件包时,仍试图继续执行 remove 卸载软件包 -q 将输出作为日志保留,不获取命令执行进度 autoremove 将不满足依赖关系的软件包自动卸载 –purge 与remove子命令一起使用,完全卸载软件包 source 下载源码包 –reinstall 与install子命令一起使用,重新安装软件包 build-dep 为源码包构建所需的编译环境 -b 在下载完源码包后,编译生成相应的软件包 dist-upgrade 发布版本级 -s 不做实际操作,只是模拟命令执行结果 dselect-upgrade 根据dselect的选择进行软件包升级 -y 对所有询问都作肯定的回答,apt-get不再进行任何提示 clean 删除缓存区中所有已下载的包文件 -u 获取已升级的软件包列表 autoclean 删除缓存区中老版本的已下载的包文件 -h 获取帮助信息 check 检查系统中依赖关系的完整性 -v 获取apt-get版本号 - 查询软件包信息:
apt-cache
apt-cache 子命令 [选项] pkg
子命令 描述 showpkg 获取二进制软件包的常规描述 showsrc 获取源码包的详细描述信息 show 获取二进制软件包的详细描述信息 stats 获取软件源的基本统计信息 search 根据正则表达式检索软件包 depends 获取该软件包的依赖信息 rdepends 获取所有依赖于该软件包的软件包 pkgnames 列出所有已安装软件包的名字 policy 获取软件包当前的安装状态 -
文件窗口界面:
dselect、aptitude、tasksel
- 在文件窗口模式中,使用窗口和菜单可以完成软件包管理任务
-
图形界面:
synaptic
- 在X-Window图形桌面环境中运行,具有更好的交互性、可读性、易用性等特点
Shell命令
Shell基本命令
- Shell命令格式
-
三要素:命令名称(必须)、选项(可选)、参数(可选)
-
Command [-Options] Argument1 Argument2
-
注意:
- Shell 提示符:$(超级用户),#(其他用户)
- Shell命令或程序严格区分大小写
- 一条命令的三要素之间空格隔开
- 若将多条命令在一行书写,用分号(;)将各命令隔开
- 如果一条命令不能在一行写完,在行尾使用反斜杠(\)标明此条命令未结束
- Shell命令行操作
- 连续按两下 TAB键或 ESC键,用于命令补全;按下一次 TAB键。用于文件名补全
命令 | 描述 |
---|---|
sudo shutdown -h now(+45) "That is all,game over" | 立即关机(45min后关机),双引号内为关机提示 |
sudo shutdown -r now(+60) | 立即重启(60min后重启) |
history [numberline] | 显示历史命令(默认保留500条) |
Shell中的特殊字符
- Shell 中的通配符
通配符 | 含义 | 实例 |
---|---|---|
星号(*) | 匹配任意长度的字符串 | file_*.txt: file_wang.txt,file_Lee.txt |
问号(?) | 匹配一个长度的字符 | file_?.txt: file_1.txt,file_2.txt |
方括号([…]) | 匹配其中指定的一个字符 | file_[otr].txt: file_o.txt,file_r.txt |
方括号([-]) | 匹配指定的一个字符范围 | file_[a-z].txt: file_a.txt,file_c.txt |
方括号([ ^…]) | 匹配除括号内指定的字符 | file_[ ^abc].txt: file_d.txt,file_e.txt |
- Shell 中的管道
- 管道:可以把一系列命令连接起来,将第一个命令的输出作为第二个命令的输入,以此类推
- 如:ls /usr/bin | wc -w; 将ls命令的输出直接作为wc命令的输入,得到/usr/bin目录下文件的个数
- 输入输出重定向
- 输入/输出重定向是改变Shell命令或程序默认的标准输入/输出目标。重新定向到新的目标
- linux中默认的标准输入定义为键盘,标准输出定义为终端窗口
- 用户可以为当前操作改变输入/输出,迫使某个特定命令的输入/输出来源为外部文件
重定向符 | 含义 | 实例 |
---|---|---|
> file | 将 file文件重定向为输出源,新建模式 | ls /usr > Lsoutput.txt ,将ls /usr的执行结果,写到Lsoutput.txt文件中,若有同名文件将被删除 |
>> file | 将 file文件重定向为输出源,追加模式 | ls /usr >> Lsoutput.txt,将ls /usr的执行结果,追加到Lsoutput.txt文件已有内容后 |
< file | 将 file文件重定向为输入源 | wc < file1,将file1中的内容作为输入传给wc命令 |
2 > 或 & > | 将由命令产生的错误信息输入到文件中 | ls noexistingfile.txt 2 > err.log,使用ls命令,查看一个不存在的文件时,将系统错误提示保存在err.log文件中 |
- 命令置换
- 将一个命令的输出作为另一个命令的参数
- command1 `command2`
- 如:ls `pwd`:pwd的运行结果作为ls命令的参数,最终命令执行结果是显示当前目录的文件内容
Shell基本系统维护命令
- man、passwd、su、echo 命令的用法
man
:man commandname;找到特定的联机帮助页,并提供简短的命令说明(按Q键退出)passwd
:passwd username;给已有账户重新修改用户密码(超级用户root可以修改所有其他用户密码,而普通用户只能修改自己的用户密码)su
:su [-c | -m -] username;临时改变用户身份,具有其他用户的权限- -c:表示执行一个命令后就结束;-m:表示仍保留环境变量不变;- :表示转换用户身份,同时使用该用户的环境
echo
:echo [-n] information:用于在标准输出(显示器)上显示一段文字,一般起到提示作用
- date、clear、df、du 命令的用法
-
date
:date [-d|-s|-u] datestr:用于显示和设置日期和时间 -
clear
:用于清除屏幕上的信息 -
df
:df [-a|-T|-h|-k] Filesystem:用于查看磁盘空间的使用情况- -a:显示所有物理文件系统的使用情况,包括虚拟文件系统
- -T:显示物理文件系统的文件格式类型
- -l:仅列出本地文件系统
- -h:物理文件系统大小按兆字节为单位显示
- -k:物理文件系统大小按千字节为单位显示
-
du
:列出目录和文件所使用的磁盘块数,每块占512各字节- -a:仅列出空闲的文件数
- -h:列出磁盘的使用情况(KB)
- -s:列出总的空闲空间(KB)
Linux用户管理
- 用户管理相关文件
/etc/passwd
文件:是系统能够识别的用户清单。用户登录时系统查询这个文件,确定用户的UID并验证用户口令- 登录名、经过加密的口令、UID、默认的GID、个人信息、主目录、登录shell
/etc/group
文件:包含UNIX组的名称和每个组中成员列表- 组名、加密的口令、GID号、成员列表(彼此用逗号隔开)
/etc/adduser.conf
配置文件- FIRST_UID=1000, LAST_UID=29999, USERS_GID=100, DHOME=/home, DSHELL=/bin/bash, SKEL=/etc/skel
/etc/skel
目录:被/user/sbin/useradd使用,把想要新用户拥有的配置文件从/etc/skel目录拷贝- 常用的文件:.bash_profile, .bashrc, .bash_logout, .dircolors, .inputrc, .vimrc
- 用户管理相关命令
-
adduser <username>
:添加用户 -
passwd
:修改用户口令- passwd [-k] [-l] [u] [-f] [-d] [-S] username
- 如:passwd username
-
usermod
:修改用户属性- usermod [-u uid [-o]] [-g group] [-G groupup,…] [-d home [-m]] [-s shell] [-c comment] [-l new_name] [-f inactive] [-e expire] [-p passwd] [-L|-U] name
- 如用户oldname改名为newname,注意要同时更改家目录:usermod -d /home/newname -m -l newname oldname
-
deluser
:删除用户- deluser
- deluser --remove-home user1,删除用户user1的同时删除用户的工作目录
-
addgroup
:添加用户组,addgroup groupname -
delgroup
:删除用户组,delgroup groupname
进程管理相关命令
- 使用命令查看进程
ps
命令:显示进程(process)的动态- ps [options]
- ps -elf (普通使用标准)、ps -aux (BSD标准)
进程的状态标志 | 描述 |
---|---|
D | 不可中断的禁止 |
R | 正在执行中 |
S | 阻塞状态 |
T | 暂停执行 |
Z | 不存在但暂时无法消除,僵尸进程 |
< | 高优先级的进程 |
N | 低优先级的进程 |
L | 有内存分页分配并锁在内存中 |
top
命令:监视进程,能不断更新进程状态pstree
命令:以树形方式显示进程之间的关系
- 使用kill命令终止进程
- kill [-signal] PID
- 默认情况下,kill命令向指令进程发出信号15,正常情况下,将杀死那些不捕捉或不忽略这个信号的进程
文件系统类型和结构
- 文件系统:用于组织和管理计算机存储设备上的大量文件,并提供用户交互接口
- 磁盘文件系统:本地主机中实际可以访问到的文件系统
- 网络文件系统:可以远程访问的文件系统
- 专有/虚拟文件系统:不驻留在磁盘上的文件系统
Ext4
是Linux系统广泛使用的一种文件格式,最大特点是日志文件系统- sata硬盘的设备名称是"/dev/sda"
- IDE硬盘的设备名称是"/dev/hda"
- 交换分区:将内存中的内容写入硬盘或从硬盘中读出,称为内存交换
目录名 | 描述 | 目录名 | 描述 |
---|---|---|---|
/ | Linux文件根目录 | /media | Ubuntu系统自动挂载CD-ROM、软驱、USB存储后,存放临时读入文件 |
/bin | 存放系统中最常用的可执行文件(二进制) | /mnt | 该目录通常用于作为被挂载的文件系统的挂载点 |
/boot | 存放Linux内核和系统启动文件,包括Grub、lilo启动器程序 | /opt | 作为可选文件和程序的存放目录,主要被第三方开发者用来简易地安装和卸载他们的软件包 |
/dev | 存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB、tty等 | /proc | 存放所有标志位文件的进程,它们是通过进程号或其他的系统动态信息进行标识,例如cpuinfo文件存放CPU当前工作状态的数据 |
/etc | 存放系统的所有配置文件,例如passwd存放用户账户信息,hostname存放主机名等 | /root | 根用户(超级用户)的主目录 |
/home | 用户主目录的默认位置 | /sbin | 存放更多的可执行文件(二进制),包括系统管理、目录查询等关键命令文件 |
/initrd | 存放启动时挂载initrd.img映像文件的目录,以及载入所需设备模块的目录 | /srv | 服务目录,存放本地服务的相关文件 |
/lib | 存放共享的库文件,包含许多被/bin和/sbin中程序使用的库文件 | /sys | 系统目录,存放系统硬件信息的相关文件 |
/lost+found | 存放由fsck放置的零散文件 | /tmn | 存放用户和程序的临时文件,所有用户对该目录都有读写权限 |
/usr
:用于存放系统用户直接相关的文件和目录,例如应用程序及支持它们的库文件,以及罗列了/usr中部分重要的目录
目录名 | 描述 | 目录名 | 描述 |
---|---|---|---|
/usr/X11R6 | X Window 系统 | /usr/share | 存放使用手册等共享文件的目录 |
/usr/bin | 用户和管理员的标准命令 | /usr/share/dict | 存放词表的目录 |
/usr/include | c/c++等各种开发语言环境的标准include文件 | /usr/share/man | 系统使用目录 |
/usr/lib | 应用程序及程序包的连续库 | /usr/share/misc | 一般数据 |
/usr/local | 系统管理员安装的应用程序目录 | /usr/share/sgml | SGML数据 |
/usr/local/share | 系统管理员安装的共享文件 | /usr/share/xml | XML数据 |
/usr/sbin | 用户和管理员的标准命令 |
/var
:通常用于存放长度可变的文件,例如日志文件和打印机文件
目录名 | 描述 | 目录名 | 描述 |
---|---|---|---|
/var/cache | 应用程序缓存目录 | /var/mail | 电子邮件 |
/var/crash | 系统错误信息 | /var/opt | /opt目录的变量数据 |
/var/games | 游戏数据 | /var/run | 进程的标示数据 |
/var/lib | 各种状态数据 | /var/spool | 存放电子邮件,打印任务等的队列目录 |
/var/lock | 文件锁定记录 | /var/tmp | 临时文件目录 |
/var/log | 日志记录 |
- Linux文件系统与Windows文件系统比较
Linux文件系统 | Windows文件系统 | |
---|---|---|
文件格式 | 主要文件格式:EXT2, EXT3, RerserFS, ISO9660, vfat等 | 主要文件格式:FAT16, FAT32, NTFS等 |
存储结构 | 逻辑结构犹如一颗倒置的树,每个硬件设备视为一个文件,置于树形的文件系统层次结构中 | 逻辑结构犹如多颗树,将硬盘划分为若个分区,与存储设备一起,使用驱动器分盘符标识 |
与硬盘分区的关系 | 分区在目录结构中 | 目录结构在分区中 |
文件命名 | Linux文件系统中严格区分大小写,区分文件类型不依赖文件后缀,可以使用程序file命令判断文件类型 | windows文件系统中不区分大小写,使用文件后缀来标识文件类型 |
路径分隔符 | Linux使用斜杠“/”分隔目录名,绝对路径都是以根目录(/)作为起点 | Windows使用反斜杠“\”分割目录名,绝对路径都是以驱动器盘符作为起点 |
文件与目录权限 | Linux最初的定位是多用户的操作系统,因而有完善文件授权机制,所有的文件和目录都有相应的访问权限 | Windows最初的定位是单用户的操作系统,内建系统时没有文件权限的概念,后期的Windows逐渐增加了这方面的功能 |
文件系统的相关命令
pwd, ls, cd, touch, cp, mv, rm, cat, head, tail, mkdir, rmdir
- file、ln命令
file
命令:file [filename] ;判定一个文件的类型ln
命令:ln [-s] target link_name; 其中选项“-s”为创建软链接,缺省情况下创建硬链接- 硬链接:利用Linux中每个文件分配的物理编号(inode)建立链接
- 软链接:利用文件的路径名建立链接,通常建立软链接使用绝对路径
- 文件的归档和压缩
- 归档文件:将一组文件或目录保存在一个文件中
- 压缩文件:将一组文件或目录保存一个文件中,并按照某种存储格式保存在磁盘上,所占磁盘空间比其中所有文件总和要少
gzip
:是Linux中最流行的压缩工具,具有很好的移植性,可在很多不同架构的系统中使用bzip2
:在性能上优于gzip,提供了最大限度的压缩比率zip
:若需经常在Linux和微软Windows间交换文件,建议使用zip
压缩工具 | 解压工具 | 文件扩展名 |
---|---|---|
gzip | gunzip | .gz |
bzip2 | bunzip2 | .bz2 |
zip | unzip | .zip |
-
gzip 与 gunzip 命令
-
gzip [-l|-d|-num] filename
-
与zip明显区别在于只能压缩一个文件,无法将多个文件压缩问一个文件
-
-l:查看压缩文件内的信息,包括文件数、大小、压缩比等参数,并不进行文件解压
-
-d:将文件解压,功能与gunzip相同
-
-num:指定压缩比率,num为1~9个等级
-
gunzip [-f] file.gz
-
-f:解压文件时,对覆盖同名文件不做提示
-
-
tar
命令- 可实现在合并归档的同时进行压缩
tar [选项] tarfile filelist
-tvf
:查看归档文件中的详细内容;-xjf/-xzf
:完成tar文件的释放
选项 | 描述 | 选项 | 描述 |
---|---|---|---|
-t | 显示归档文件中的内容 | -v | 显示归档和释放的过程信号 |
-x | 释放归档文件 | -f | 用户指定归档文件的文件名,否则使用默认名称 |
-u | 更新归档文件 | -j | 由tar生成归档,然后由bzip2压缩 |
-c | 创建一个新的归档文件 | -z | 由tar生成归档,然后由gzip压缩 |
Shell脚本编程
变量
- Shell脚本的基础知识
- Shell脚本的本质:解释型语言,Shell命令的有序集合
- Shell编程的基本过程:建立shell文件,赋予shell文件执行权限,执行shell文件
- Shell变量
- 允许用户建立变量存储数据,但不支持数据类型,将任何赋给变量的值都解释为一串字符
- Bourne Shell有四种变量
-
用户自定义变量
- 定义:COUNT=1
- 取消定义:unset COUNT
-
位置变量即命令行参数
- $0:与键入的命令行一样,包含脚本文件名
- $1,$2,…,$9:分布包含第一个到第九个命令行参数
- $#:包含命令行参数的个数
- $@:包含所有命令行参数:“$1,$2,…,$9”
- $?:包含前一个命令的退出状态
- $*:包含命令行参数:“$1,$2,…,$9”
- $$:包含正在执行进程的ID号
-
预定义变量
-
环境变量
- HOME:/etc/passwd文件中列出的用户主目录
- IFS:Internal Field Separator,默认为空格,tab及换行符
- PATH:shell搜索路径
- PS1, PS2:默认提示符($)及换行符提示符(>)
- TERM:终端类型,常用的有vt100,ansi,vt200,xterm等
功能语句
- shell语句包含三类:说明性语句、功能性语句和结构性语句
- 说明性语句:以#号开始到改行结束,不被解释执行
- 功能性语句:任意的shell命令、用户程序或其他shell程序
- 结构性语句:条件测试语句、多路分支语句、、循环语句、循环控制语句等
-
说明性语句
#! /bin/sh
:告诉OS用哪种类型的shell来解释执行该程序
-
常用功能性语句
-
read
:read var1 var2 var3 -
expr
:算术运算命令,用于进行简单的整数运算,包括加(+)、减(-)、乘(\*),整除(/)和求模(%)等操作#!bin/bash read -p "input two number" val1 val2 num=`expr $val1 + $val1 \* $val2` echo num
- 测试语句
-
test
语句:可测试三种对象:字符串、整数、文件属性 -
条件成立时,命令返回值为真(0),否者返回值为假(非0)
-
字符串测试:
test "$answer" = "yes"
:变量answer的值是否为字符串 yestest s1 = s2
:测试两个字符串内容是否完全一样test s1!=s2"
:测试两个字符串内容是否有差异test -z s1"
:测试s1字符串的长度是否为0test -n s1"
:测试s1字符串的长度是否不为0
-
整数测试
test $num -eq 18
:变量num的值是否为整数18test a -eq b"
:测试测试a与b是否相等- -ne(不等于)、-gt(大于)、-ge(大于等于)、-lt(小于)、-le(小于等于)
-
文件测试
test -d tmp
:测试tmp是否为一个目录
选项 | 描述 | 选项 | 描述 |
---|---|---|---|
-d name | name是否为一个目录 | -w name | name文件是否存在且可写 |
-e name | 文件是否存在 | -x name | name文件是否存在且可执行 |
-f name | name是否为普通文件 | -s name | name文件是否存在且其长度不为0 |
-L name | 是否为符号链接 | f1 -nt f2 | 文件f1是否比文件f2更新 |
-r name | name文件是否存在且可读 | f1 -ot f2 | 文件f1是否比文件f2更旧 |
- test命令是使用
方式1:test $name -ep $1; echo $?
方式2: if test -f $filename // if [ -f $filename ] 注意:中括号前后要有空格
then
......
fi
分支语句
- 条件语句
- 结构性语句:条件测试语句(两路分支)、多路分支语句、循环语句、循环控制语句和后台执行语句等
if 表达式1
then 命令表1
elif 表达式2
then 命令表2
else 命令表3
fi
- 多路分支语句
case 字符串变量 in //case语句只能检测字符串变量
模式1) //以右括号结束
命令表1
;;
模式2|模式3) //一次可以匹配多个模式用“|”分开
命令表2
;;
模式n) //模式n常写为字符*表示所有其他模式
命令表n
;;
esac
循环语句
for
的用法
for 变量名 in 单词表 // for ((val=1; val <= 5; val=$val + 1))
do
命令表
done
while
的用法
while 命令或表达式 //while (($NUM < 10))
do
命令表
done
- while语句的退出状态为命令表终被执行的最后一条命令的退出状态
- 循环控制语句
- break
- continue
函数
- Shell函数调用
- 函数变量作用域
fun1()
{
命令表
}
fun1 //函数调用
fun2()
{
A=$1 //为全局变量,整个文件均可用
local B=$2 //局部变量,函数内才可调用
NUM=`expr $A+$B`
#echo "NUM=$NUM"
return $NUM
}
fun2 4 5 //带参数调用
echo "\$?=$?"