文章目录
一 linux高级命令
1.安装软件
(1)ubuntu deb
(2)redhat rpm
软件包的格式:
sl _3.03 -17 build2_amd64 .deb
软件名 主版本号 修订版本号 架构(64位) 后缀
sudo dpkg -i 软件名
sudo dpkg -l //列举ubuntu上安装的所有软件
sudo dpkg -L 软件名 //列举这个软件相关的所有路径(帮助文档,man手册,软件安装的位置信息等)
sudo dpkg -s sl //查看软件的安装的状态(详细)
在线安装apt-get,如果软件有依赖程序,这些程序会被一并安装上去
选择软件源:
software & updates -> download from-->选择软件源
sudo apt-get update //更新源
/etc/apt/source.list //记录源的路径
/var/lib/apt/lists //这个服务器上的各个安装包的信息的目录
下载安装
sudo apt-get install 软件名
sudo apt-get remove 软件名 //卸载
sudo apt-get source 软件名 //下载软件的源码
sudo apt-get download 软件名 //下载软件,不进行安装(当前目录下)
sudo apt-get clean //清除目录下 /var/cache/apt/archives的安装包
2.压缩命令
(1)压缩的对象是文件
ubuntu上压缩文件的格式:.gz .bz2 .xz
gzip/gunzip --->xxx.gz
bzip2/bunzip2 --->xxx.bz2
xz/unxz --->xxx.xz
压缩率:.xz > .gz > .bz2
压缩速率:.xz < .gz < .bz2c
如何使用?
gzip +文件名
注意:压缩和解压缩源文件被替换
(2)归档的对象是目录(打包、拆包)
将一个目录归档成一个文件,或者将这个归档后的文件重新释放变成一个目录都是用如下命令:
tar 命令
-c:创建归档文件
-x: 释放归档文件
-z: 压缩成gzip格式
-j: 压缩成bzip2格式
-J: 压缩成xz格式
-v: 显示过程
-f: 后面跟的是文件的名字
1 归档
tar -cvf hello.tar hello --->将hello打包成hello.tar
tar -xvf hello.tar --->将hello.tar拆成hello目录
2.打包并压缩
tar -czf hello.tar.gz hello
tar -cjvf hello.tar.bzip2 hello
3 解压缩
tar -xjvf hello.tar.bzip2 //只能解压缩.bzip2格式
tar -xvf 压缩包 //万能拆包命名
4 在拆包和解压缩的时候指定路径
tar -xvf -C 压缩包
3 文件相关
(1)文件查看
ls
cat(-n:显示行号)
//查看当前ubuntu的版本号
cat /etc/issue
vim—>使用vim配置自动补全一些信息
vim /home/jsetc/.vim/snippets/c.snippets
hdr + tab -->文件介绍
funh + Tab 函数的注释
Inc + Tab 补全头文件
main + Tab 补全main函数
head:显示前些行的命令
head 文件名 默认显示文件的前10行
head -line 文件名 显示前line行
tail:显示后些行命名
tail 文件名 显示文件末尾的10行
tail -line 文件名 显示后line(行号)行
more/less 文件名 查看文件,但是在工作中不用
file 文件名 查看文件的格式
file a.out
ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=9567f9a28e66f4d7ec4baf31cfbf68d0410f0ae6, stripped
练习:
/etc/passwd 保存用户信息的文件
/ect/shadow 保存用户密码的文件
使用上述的任意命令,显示/etc/passwd文件的第41行的内容
|:管道符 --》将一个命令的结果作为后一个命令的输入
cat -n /etc/passwd |tail -4|head -1
(2)文件的追加
>:重定向
>>:追加
echo "字符串" 将字符串在终端显示
echo -n "字符串" 将字符串在终端显示不换行
(3) 文件的统计
wc 文件名
hello worldjsetc@linux:~/jsetc/214+215/day9$ wc 1.c
2 6 37 1.c
行号 单词的个数 字符的个数
wc -l 1.c //行号
2 1.c
wc -w 1.c //单词的个数
6 1.c
wc -c 1.c //字符的个数
37 1.c
(4) 文件内容的搜索
grep "想要搜索的字符串" 路径/文件名 参数
-n:显示行号
-R:递归搜索
-w:搜索的是单词
-i:忽略大小写
"^main":搜索以main开头的行
"main$":搜索以main开头的行
"^main$":搜索行只有main
(5) 文件的查找
find:查看文件
find 路径 -name 文件的名字
find ~ n -name 1.c
二 shell
(1) shell是什么?
shell:就是命令行解析器
(1)sh
(2)csh
(3)ksh
(4)bash ->ubuntu上使用
(2) 什么是shell脚本
shell脚本就是将一对命令个特有的控制语句放在.sh结尾的文件中,这个文件就被叫做shell脚本
(3) shell脚本的使用
-
1.文件的命名(结尾是.sh) vim 01test.sh 2.脚本的第一行 #!/bin/bash: 标识解析此脚本的shell是bash 3. 脚本文件是不需要编译的,直接由命令行解析器解析 4. 执行脚本 ./01test.sh (脚本需要有可执行权限)-->chomd a+x 01test.sh bash 01test.sh source 01test.sh 5.三种执行方式的区别 1)./执行脚本的时候需要可执行权限,而bash和source都不需要可执行权限 2)./和bash解析脚本的时候会新开子终端,在子终端中解析,将解析的结果返回到当前终端,source是直接在当前终端解析。
练习:脚本实现
1.在自己的用户主目录下新建两个子目录 subdir1 subdir2
2.将/etc/passwd文件拷贝到subdir1,将/etc/group拷贝subdir2中
3.将subdir2重命名位subdir
4.对subdir1进行打包并压缩成xz格式
5.将打包后的xz格式文件拷贝到subdir目录下
6.解压subdir目录下的压缩格式文件
7.查看subdir目录下的所有文件
(4)shell脚本中的变量
1.变量不需要定义
2.变量没有对应的类型
3.变量赋值的时候直接写=(等号前后不能有空格)
4.在shell脚本中,所有的变量被赋的值都认为是字符串
5.赋值的区别如下
var1=123 -->字符串之间不能有空格
var1='123 456' -->可以有空格
var2="123 $var1" -->可以有空格,可以调用新的变量
6.变量的引用
$var1 ${var1}
7.使用echo来打印变量
echo $var1
8.通过位置变量可以进行命令行的传递参数
$0 //脚本的名字
$1 $2....$9 ${10}...${n} //参数对应位置的字符串
$@或$* //命令行传递的所有的参数(脚本名除外)
$# //命令行参数的个数
9.
unset 变量名 //清除变量的值
readonly 变量 //标识这个变量是只读的
练习
通过位置变量向脚本中传入两个字符串分别赋值给var1和var2,然后将这两个变量的值进行交换后输出。
(5)shell脚本中的数组
shell脚本只有一维数组,没有多维数组
数组没有成员个数的限制
1. 数组的格式如下:
arr=(1 2 3 4 "www.baidu.com")
arr=([0]=11 [5]=wer)
2. 数组成员访问方法
${arr[0]} ${arr[n]} #访问数组中的某一个成员
${arr[@]} 或者 ${arr[*]} #访问数组中所有的成员
${
#arr[@]} 或者 ${
#arr[*]} #数组中成员的个数
3.数组成员的追加
arr=(${arr[@]} "www.jsetc.com") #在数组的尾部进行追加
arr[6]="www.github.com"
#!/bin/bash
arr=(11 22 33 44 55 "www.baidu.com")
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}
echo ${arr[3]}
echo ${arr[4]}
echo ${arr[5]}
echo ${arr[@]}
echo ${arr[*]}
echo ${
#arr[*]}
arr=(${arr[*]} "www.github.com")
echo ${arr[@]}
arr[7]=hello
echo ${arr[@]}
arr[8]=world
echo ${arr[@]}
len=${
#arr[*]}
echo $len
echo "last member size = ${
#arr[$len-1]}"
练习:
通过命令行输入一些字符串,将这些字符串赋值给数组,然后求数组成员的个数,打印数组所有的成员,将数组的第一个成员的值改为“hello world” ,打印数组最后一个成员的字节个数。
#!/bin/bash
arr=($@)
len=${
#arr[@]}
echo $len
arr[0]="hello world"
echo ${arr[@]}
echo "last member size = ${
#arr[$len-1]}"
(6) shell的运算
shell的运算符
算术运算符:
+ -
* / %
** 幂运算
++ --
! && ||
< <= > >=
<< >>
~ | & ^
= += -= ...
shell中的变量被赋的值都是字符串,所以它不能够进行算术运算,如果向执行算术运算必须使用特殊的标识来完成。
(()) 整数运算
$[] 整数运算
expr 整数运算,字符串的运算
[1] (())如何使用
(($va1 + $var2))
((va1+ var2)) #在(())内部变量可以有$,也可以没有$符号,在运算符前后可以加空格,也可以没有空格
sum=$((var++)) #如果要将一个表达式的结果赋值给变量,需要在(())前加$符号
tt=$((表达式1,表达式2,表达式3,...))#所有的表达式都会参与运算最后一个表达式的结果赋值给tt变量
在(())中可以做复杂的运算
for((i = 0; i < 100;i++))
{
((sum+=i))
}
echo $sum
#!/bin/bash
var1=123
var2=456
sum=$((var1 + var2))
echo $sum
((var1++))
echo $var1
tt=$((var1++,++var2,9**2,var1++))
echo $tt
echo $var1
echo $var2
sum=0
for((i = 0;i <=100;i++))
{
((sum += i))
}
echo $sum
练习:
通过命令行输入数组,对数组的成员求和
[2] $[ ]如何使用
var1=12
ret=$[var1++]
echo $[var1++] #s[]一定需要有变量去承接结果,如果不使用变量去接收结果,就必须使用echo输出
ret=$[var2 + var3] #在$[]里面,可以有空格,也可以没有空格,可以有$,也可以没有$
#在$[]中不允许做复杂的运算,比如for循环
ret=$[var1++,var2++,3**5]
echo $ret #最后一个表达式的结果解释整个表达式的结果
#!/bin/bash
var1=12
var2=13
expr $var1 + $var2
sum=`expr $var1 \* $var1`
echo $sum
#mul=`expr 6 \** 3`
#echo $mul
var3=`ls`
echo $var3
linux@linux:~/day9$ cat 10-运算2.sh
#!/bin/bash
var1=12
ret=$[var1++]
echo $[var1++]
var2=13
var3=15
ret=$[var2 + var3]
echo $ret
:<<hello
echo "hello world"
hello
ret=$[var1++,var2++,3**5]
echo $ret
[3] expr的使用
var1=12
var2=13
expr $var1 + $var2
[1]expr在运算完之后结果会自动显示
[2]expr在使用的变量的时候,变量前一定要有$符号
[3]运输符前后要加空格,如果不加空格,会出错
sum=`expr $var1 + $var2`
[4]如果要将expr的运算的结果给新的变量,需要使用置换
mul=`expr 6 \* 3`
[5]expr在进行*运算的时候,如果不使用转义符号,它认为是通配符好,不能进行乘法运算
注:var1=`ls`
var1=$(ls)
#!/bin/bash
var1=12
var2=13
expr $var1 + $var2
sum=`expr $var1 \* $var1`
echo $sum
#mul=`expr 6 \** 3`
#echo $mul
var3=`ls`
echo $var3
三 通讯录
项目要求
1.通过makefile管理代码
2.各个子功能:
a:添加用户(连续添加)
b:查看用户(按照姓名的首字母排序)
c:搜索用户(两种方式:id,用户名)
d:删除用户信息
e:修改用户信息
f:退出
3.自己封装字符串处理函数
4.分文件编写
5.2022.7.28号验收