deb软件包管理
dpkg相关命令
dpkg -i 安装一个本地Debian软件包
dpkg -r 移除一个已经安装的软件包
dpkg -P 移除已经安装的软件包及其配置
dpkg -L 列出已安软件
dpkg -s 显示软件包安装状态
apt
镜像站点源地址:/etc/apt/source.list
修改源地址:
vi /etc/apt/source.list
#1. 搜索包
sudo apt-cache search package
#2.获取包的相关信息,如说明,大小,版本。
sudo apt-cache show package
#3.了解包的依赖
sudo apt-cache depends package
#4.查看该包被那些包依赖
sudo apt-get rdepends package
#5.安装包
sudo apt-get install package
#6. 安装制定版本的包
sudo apt-get install package=version
#7.重新安装包
sudo apt-get install package --reinstall
#8.修复安装(启动APT自动安装依赖关系的一个功能键,更新完源之后,如果APT还不能自行解决依赖关系,就可以执行一下这个命令)
sudo apt-get -f install
#下载该包的源代码
9.sudo apt-get source package
#10.删除包
sudo apt-get remove package
#11.删除包,包括删除配置文件等
sudo apt-get remove package --purge
#12.更新apt软件源数据库
sudo apt-get update
#13.更新已安装的软件包
sudo apt-get upgrade
#14.升级系统
sudo apt-get dist-upgrade
#15.使用dselect升级
sudo apt-get dselect-upgrade
#16.安装相关的编译环境
sudo apt-get build-dep package
#17.清理无用的包
sudo apt-get clean & sudo apt-get autoclean
#18.检查是否有损坏的依赖
sudo apt-get check
SHELL
一种命令行解释器
Bourne Shell(sh):C Shell、Korn Shell
Bourne Again Shell(bash)
shell命令包含三个要素:Command [-Options] Argument1 Argument2 …;命令三要素之间空格隔开,多个命令在一行书写用分号;隔开,一行写不完用反斜杠\表明命令未结束,反斜杠代表下一行
查看历史命令:history
设置历史命令保存大小为500条:echo $HISTSIZE=500
一、shell中特殊字符
1.通配符
通配符用于模式匹配,如字符串查找、文件名匹配与搜索等,如果需要模糊匹配文件名或目录名,就要用到通配符
ls -l
通配符 | 说明 | 例子 |
---|---|---|
* | 匹配0或任意个字符 | file_*.txt匹配file_1.txt(✓)、file_su.txt(✓)、file3_jap(×) |
? | 匹配一个任意字符 | file_?.txt匹配file_1.txt(✓)、file_2x.txt(×)、file3_3.txt(×) |
[-] | 匹配中括号的字符。例如[a-b],匹配小写字母,只会匹配集合中的一个 | |
[…] | 匹配指定的一个字符范围 | file_[1ab].匹配file_1.txt(✓)、file_c.txt(×)、file_b.txt(✓) |
[^opb] | 匹配除了中括号的一个字符。例如[^0-9],匹配除了数字的字符,只会匹配集合中的一个 |
2.管道
管道可以把一些列的命令连接起来,第一个命令的输出可以作为第二个命令的输入,通过管道的传递作用实现命令之间相互通信。使用"|"符号形成一个管道
ls /usr/lib/ | grep creat
表示在/usr/lib/目录下列出所有文件和文件夹,并使用grep命令进行过滤,只显示包含"creat"关键字的结果
3.输入输出重定向
输入输出重定向是改变shell命令或程序的标准输入输出目标,重新定向到新的目标。linux中默认输入定义为键盘输出定义为终端窗口。用户可以为当前操作改变输入输出迫使某个特定命令的输入或输出来源为外部文件
command >file 以覆盖的方式,把 command 的正确输出结果输出到 file 文件中,如ls /usr/bin/ >file1就是把ls出来的内容不输出终端而是输出保存到file1文件中;
command >>file 以追加的方式,把 command 的正确输出结果输出到 file1 文件中,如ls /usr/bin/ >>file1内容相比之前的file1内容又增加了一遍ls内容,相当于原来file1的两倍内容;
command <file 从标准输入(键盘)中读取数据,直到遇见分界符 END 才停止(分界符可以是任意的字符串,用户自己定义);
command 2> 或 &> 将由命令产生的错误信息输入到文件中,如ls noexistingfile.txt 2>err.log,使用了ls命令查看一个不存在的文件时将错误信息发行到err.log中
4.命令替换
命令替换就是将一个命令的输出作为另一个命令的参数。格式为:command1 command2
其中,命令command2的输出作为命令command1的参数。
如:ls -l ls testdir/
:表示首先执行ls testdir/命令,列出testdir目录中的所有文件和文件夹的名称。然后将这些名称作为参数传递给ls -l命令,再次执行ls -l命令并显示指定文件和文件夹的详细信息
如echo "Today is date"输出Today is date ,但echo "Today is date
"输出Today is Mon Oct 30 14:25:23 PST 2023
另一种格式是$(),如echo "Today is $(date)"可以达到上面一样效果
二、shell基本系统维护命令
1.man命令
man命令可以找到特定的联机帮助页也就是查找手册,格式为man command,例如man 3 printf :查库函数,man 2 open :查系统调用,man -a open :会将系统中与open相关的都列出来
2.passwd命令
passwd可以为已有账户重新修改用户口令,格式:passwd username
改其他用户如usr1:sudo passwd usr1
3.su命令
su命令用于临时改变用户身份,具有其他用户的权限,一般语法格式为:su [-c | -m - ] username,选项“-c”表示执行一个命令后就结束;-m表示仍保留环境变量不变;-表示转换用户身份时,同时使用该用户的环境。
4.echo命令
echo命令用于在标准输出上显示一段文字,延期到提示作用,一般语法格式为:echo [-n] information
5.clear命令
清除屏幕上的信息,或者ctrl+l
6.df命令
查看磁盘空间的使用情况,如df -h,-T显示物理文件系统的文件格式类型;-h物理文件系统大小按兆字节为单位显示
7.du命令
列出目录和文件所使用的磁盘块数,每块占512个字节。如du -h /etc,会列出/etc下所有文件所占内存
-a :仅列出空闲的文件数
-h :列出磁盘的使用情况(KB)
-s :列出总的空闲空间(KB)
三、shell用户管理命令
1.adduser 添加用户命令
格式:adduser 新增的用户名
sudo adduser testuser1 #接下来就是输入新用户密码
2.deluser 删除用户
格式:deluser 需要被删除的用户名
sudo deluser --remove-home testuser1
3.addgroup 添加用户组
格式:addgroup 新增的用户组,在linux中一个用户可以属于多个组
sudo addgroup group1
4.delgroup 删除用户组
格式:delgroup 需要被删除的用户组
sudo delgroup group1
5.usermod 修改用户属性
格式:usermod -d /home/newname -m -l newname oldname
-d跟新的家目录,-m表示用户不存在就强制执行,-l后跟新用户名
sudo usermod -d /home/test_user1 -m -l user_test1 testuser1
四、shell进程管理命令
1.ps指令
当程序在系统中运行时,它被称为进程( process)。要想监测这些进程,可以使用 ps 命令。格式:ps [option],如-A列出所有进程,-w加宽显示,-au详细资讯,-aux显示所有其他使用者的进程
ps aux | grep a.out
利用管道查看关心的进程a.out的进程情况
进程的状态标志:
(1)R运行状态(runing):并不意味着进程一定在运行中,也可以在运行队列里;
(2)S睡眠状态(sleeping):进程在等待事件完成;(浅度睡眠,可以被唤醒)
(3)D磁盘睡眠状态(Disk sleep):不可中断睡眠(深度睡眠,不可以被唤醒,通常在磁盘写入时发生)
(4)T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止进程,可以发送SIGCONT信号让进程继续运行
(5)X死亡状态(dead):该状态是返回状态,在任务列表中看不到;
(6)Z僵尸状态(zombie):子进程退出,父进程还在运行,但是父进程没有读到子进程的退出状态,子进程进入僵尸状态;
(7)t追踪停止状态(trancing stop)
2.top命令
top 是一个强大的工具,它能提供运行系统的动态实时视图
3.pstree命令
将所有进程以树状图显示
4.kill命令
终止进程,kill [-signal] PID,如kill -15 PID就是终止进程,-18终止挂起的一个进程,-9告诉内核强制终止进程
五、文件系统相关指令
pwd ls cd touch cp mv rm cat head tail等
1.file命令
file [filename],能够判断文件类型
2.mkdir命令
3.ln命令
ln [-s] target link_name,链接文件可以理解为指向另一个文件或目录的快捷方式,类似于Windows系统中的快捷方式。在Linux中,链接文件分为两种类型:硬链接(Hard Link)和符号链接(Symbolic Link,也称软链接)
-s 创建符号链接。默认情况下,ln命令创建的是硬链接,使用-s参数可以创建符号链接。
-f 强制创建链接,如果被链接的文件已存在,则删除原文件再创建链接。
-i 创建链接前进行交互式确认,如果被链接的文件已存在,则提示用户是否覆盖。
-v 显示创建链接的详细过程。
4.压缩文件
压缩gzip和解压gunzip
tar命令
六、网络配置
Linux网络的基本配置和网络接口的初始化都是通过一组配置文件,可执行脚本和命令来控制的,实现网络配置就是修改系统中众多的网络配置文件如/tec/interfaces、/etc/hosts、/etc/resolv.conf等
1.ping命令
2.nslookup命令
可以查看当前系统使用DNS服务器的IP地址
七、shell变量
shell允许用户建立变量存储数据,但不支持数据类型,将任何赋给变量的值都解释为一串字符
bash有四种变量
-用户自定义变量:注意调用时应加上$符号,如count=1 echo $count
-位置变量即命令行参数:$n : n为数字,$0代表脚本本身,$1~$9代表第1~9参数,10以上的参数需要用大括号包含,如:${10},
$@:命令行所有参数,但每个参数区别对待;$*:命令行所有参数,所有参数视为一个整;$#:参数总个数;$$:脚本运行的当前进程ID号
-预定义变量:预定义变量即Shell已经定义的变量,用户可根据Shell的定义直接使用这些变量,无需自己定义
-环境变量:如PATH等
八、功能语句
1.说明性语句(注释)
以#号开始到该行结束,不被解释执行,注意#!/bin/sh 和 #!/bin/bash 都是脚本文件的开头,用来指定脚本文件的解释器,而不是注释
2.功能性语句:
任意的shell命令、用户程序或其它shell程序,如:
-read语句用于读取输入内容
-expr语句包括简单的加减乘除整除求模等整数运算操作
-test语句用于条件判断、循环语句判断,可用于三种对象:字符串、整数和文件属性。
如字符串测试s1=s2测试两字符串内容是否完全相同,a -eq b测试a与b是否相等
-
3.结构性语句:
条件测试语句、多路分支语句、循环语句、循环控制语句等
- #:表示注释,除了脚本文件的#!/bin/bash
- read:用于从标准输入或者文件中读取输入,并将其赋值给一个变量,read [选项] 变量名
- test:可用于比较,如两值是否相等n1 -eq n2
- expr:表达式求值
- 字符串测试、整数测试、文件测试…
- 分支语句if…then…fi、if…then…else…fi
- 多路分支语句:case…esac
#!/bin/bash
echo -n "please choose (yes|no)?"
read R
case $R in
yes | YES | y | Y)
echo "yes"
;;
no)
echo "no"
;;
*)
echo "wrong"
;;
esac
#!/bin/bash
echo -n "plz input score:"
read s
if [ $s -lt 0 -o $s -gt 100 ]
then
echo "not a correct score"
exit
fi
G = expr $s / 10`
case $G in
9 | 10)
echo "$s A"
;;
6 | 7 | 8)
echo "$s B"
;;
*)
echo "$s C"
;;
esac
- 循环语句for
#!/bin/bash
# for i in 1 3 5 7 9
# for i in `ls /etc`
for i in `seq 1 2 10` # 列出1-10,间隔为2
# for ((i in 1 ; i <= 10 ; i++))
do
echo "i = $i"
done
#!/bin/bash
sum = 0
for i in `seq 1 100`
do
sum expr $sum + $i
done
enco $sum
- 循环语句while:while…do…done
#!/bin/bash
i =0
while [ $i -lt 5 ]
do
i = expr $i + 1`
echo -n = "input score : "
read s
case expr $s / 10 in
10 | 9)
echo "a"
::
6 | 7 | 8)
echo "b"
::
*0
echo "c"
;;
esac
echo "$i"
done
#!/bin/bash
i = 0
echo -n "input number:"
read s
while [ $i -lt $s ]
do
i = expr $i + 1
> FILE$s
done
- 循环控制语句
break和continue
break n :跳出n层
continue :转到最近n层循环语句的下一轮循环上
#!/bin/bash
if [ $# -ne 5` ]
then
echo "arugment 5"
exit
fi
for i
do
if [ `expr $i % 2` -eq 1 ]
then
echo "$i"
done
九、函数调用
方式一 :
value_name = `function_name [arg1 arg2 …]`
函数的所有标准变量输出都传递给主程序的变量
grep_user(){
R = `grep "$1" /etc/passwd | wc -l`
echo $R
return $R
}
echo -n "input usrname : "
read user
grep_user $user
RET = $?
if [ $RET -eq 1 ]
then
echo "$user exist"
else
echo "$user not exist"
fi
方式二 :
function_name [arg1 arg2 … ]
echo $?
获取程序返回状态
grep_user(){
R = `grep "$1" /etc/passwd | wc -l`
echo $R
}
echo -n "input usrname : "
read user
RET = grep_user $user
if [ $RET -eq 1 ]
then
echo "$user exist"
else
echo "$user not exist"
fi
函数变量作用域
全局作用域:在脚本的任何地方都可以访问该变量
局部作用域:只能在声明变量的作用域内访问
参考
(1)Shell入门之位置变量https://blog.csdn.net/qq_37189082/article/details/121831431
参考:
(1)关于Linux 进程你要知道的事https://www.linuxprobe.com/you-need-know-process.html