1. 管道符的用法
查找当前目录下所有txt文件并统计行数
# 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l
在/etc目录下查找包含"network"的文件并统计数量
# 使用find命令查找文件,并通过grep查找包含特定字符串的文件,最后统计文件数量 find /etc -type f -exec grep -l "network" {} \; | wc -l
2. 更改Ubuntu自带的软件源
备份原软件源文件
# 使用sudo提升权限,复制文件到备份位置 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
使用vim打开软件源文件
sudo提升权限,使用vim编辑器打开软件源文件 sudo vim /etc/apt/sources.list
替换为清华源地址
# 修改文件内容,替换为清华源地址 # 清华源地址示例:deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
更新软件源
# 更新软件包列表以应用新的源配置 sudo apt-get update
3. 在线下载软件的指令
下载并安装
# 安装指定软件包 sudo apt-get install software-name
下载安装包
# 下载指定软件包但不安装 sudo apt-get download software-name
卸载(完全卸载)
# 卸载软件包及其配置文件 sudo apt-get remove software-name --purge
4. 软件包的命名规范
示例解释
sl_5.02-1_amd64.deb # sl: 软件名 # 5.02-1: 版本号 # amd64: 架构 # deb: 扩展名,表示Debian/Ubuntu格式的软件包
5. 离线安装(dpkg)
# 使用dpkg安装本地deb包 sudo dpkg -i package-name.deb
# 卸载软件包(保留配置文件) sudo dpkg -r package-name # 卸载软件包及其配置文件 sudo dpkg -P package-name
6. 通配符
匹配一个字符
# ?匹配单个字符,如a?.txt匹配a1.txt、a2.txt等 ls a?.txt
匹配一个或多个字符
# *匹配任意数量的字符,如*.txt匹配所有扩展名为txt的文件 ls *.txt
匹配指定范围字符
# []匹配指定范围内的字符,如[a-z].txt匹配以小写字母开头的txt文件 ls [a-z].txt
7. find以文件名为条件进行查找
# 在指定路径下查找文件名为file-name的文件 find /path -name "file-name"
8. a.out的文件类型(file)
# 使用file命令查看文件类型 file a.out
9. grep
# 在文件中查找包含特定字符串的行 grep "string" file-name
10. cut
# 使用cut命令按分隔符提取字段 cut -d delimiter -f field file-name
11. 软链接文件和硬链接文件的创建、注意事项
软链接
# 创建软链接,源文件可以不在同一文件系统 ln -s source-file target-link # 注意事项:软链接指向的是源文件的路径,如果源文件移动或删除,链接将失效
硬链接
# 创建硬链接,源文件必须在同一文件系统 ln source-file target-link # 注意事项:硬链接指向的是源文件的inode,即使源文件删除,硬链接仍然有效
12. 关机和重启的指令
关机
# 立即关机 sudo shutdown -h now # 或者使用poweroff命令 sudo poweroff
重启
# 立即重启 sudo shutdown -r now # 或者使用reboot命令 sudo reboot
13. 权限的操作chmod(字母和八进制)、chown
修改所属组和其他用户权限
字母表示法
# 给所属组添加写权限,给其他用户添加读权限 chmod g+w,o+r 1.c
八进制表示法
# 设置文件权限为664 (rw-rw-r--) chmod 664 1.c
修改文件所有者和所属组
# 修改文件所有者和所属组 sudo chown user:group file-name
14. 磁盘的操作:从连接到虚拟机到挂载的全过程
查看磁盘设备
# 列出所有磁盘设备 sudo fdisk -l
对磁盘进行分区
# 使用fdisk工具对磁盘进行分区 sudo fdisk /dev/sdb
格式化分区
# 将分区格式化为ext4文件系统 sudo mkfs.ext4 /dev/sdb1
创建挂载点
# 创建挂载点目录 sudo mkdir /mnt/newdisk
挂载磁盘
# 将分区挂载到指定目录 sudo mount /dev/sdb1 /mnt/newdisk
15. tar指令(打包并压缩、拆包并解压缩)
打包并压缩
tar.gz格式
# 打包并压缩为tar.gz格式 tar -zcvf archive.tar.gz file1 file2 directory1
tar.bz2格式
# 打包并压缩为tar.bz2格式 tar -jcvf archive.tar.bz2 file1 file2 directory1
拆包并解压缩
tar.gz格式
# 解压tar.gz文件 tar -zxvf archive.tar.gz
tar.bz2格式
# 解压tar.bz2文件 tar -jxvf archive.tar.bz2
16. 压缩工具的对比
gzip vs bzip2 vs xz
- gzip:速度快,压缩比适中。
- bzip2:压缩比更高,速度较慢。
- xz:压缩比最高,速度最慢。
17. 用户操作
修改sudoers文件
# 使用visudo安全地编辑sudoers文件 sudo visudo # 添加或修改用户权限,例如允许user执行某些命令而无需密码 user ALL=(ALL) NOPASSWD:ALL
修改用户信息(修改用户的家目录)
# 修改用户的家目录 sudo usermod -d /new/home/directory username
18. 内核的五大功能
- 进程管理:负责创建、调度和销毁进程。
- 内存管理:管理物理内存和虚拟内存。
- 文件系统管理:提供文件系统的接口。
- 设备管理:管理硬件设备。
- 网络管理:处理网络通信。
19. C语言的外部参数
int argc, const char *argv[]
#include <stdio.h>
int main(int argc, const char *argv[])
{
// argc表示命令行参数的数量,argv是参数数组
printf("Number of arguments: %d\n", argc);
for (int i = 0; i < argc; i++)
{
printf("Argument %d: %s\n", i, argv[i]);
}
return 0;
}
示例解释
// argv[0]是程序名称,argv[1]及之后是命令行参数
printf("%d\t%c\n", *(argv[1]+2)-*argv[2], *(argv[0]+2));
// *(argv[1]+2)表示argv[1]的第三个字符,*argv[2]表示argv[2]的第一个字符
// 计算两个字符的ASCII差值,并打印结果
argv指向说明
argv[0]指向程序名称。
argv[1]及之后指向命令行参数。
字符指针数组元素取值解释
*(argv[1]+2)表示argv[1]的第三个字符。
*argv[2]表示argv[2]的第一个字符。
argv指向说明
argv[0]
指向程序名称。argv[1]
及之后指向命令行参数。
字符指针数组元素取值解释
*(argv[1]+2)
表示argv[1]的第三个字符。*argv[2]
表示argv[2]的第一个字符。
20. shell变量
# 定义变量 variable_name=value
21. 访问变量的方式
# 使用echo命令访问变量 echo $variable_name
22. 命令置换符的使用
# 将命令输出赋值给变量 result=$(command)
23. 数组
什么是稀疏数组
- 稀疏数组是指数组中大部分元素为空或零,只有少量元素有实际值。
获取所有外部参数和数组中所有元素
# 获取所有外部参数 "$@" # 获取数组中所有元素 "${array[@]}"
获取外部参数个数和数组中元素个数
# 获取外部参数个数 "$#" # 获取数组中元素个数 "${#array[@]}"
24. 修改PATH的三种方式
终端生效
# 修改当前终端的PATH环境变量 PATH=$PATH:/new/path
单个用户生效
# 修改单个用户的PATH环境变量 echo "PATH=\$PATH:/new/path" >> ~/.bashrc source ~/.bashrc
所有用户生效
# 修改所有用户的PATH环境变量 sudo echo "PATH=\$PATH:/new/path" >> /etc/profile sudo source /etc/profile
25. #!/bin/bash
#!/bin/bash # shebang行,指定bash解释器
26. (( ))
书写
((expression))
获取运算结果
((a=5+3)) echo $a
支持幂运算
((result=2**3)) echo $result
27. expr(指令)
按位与和按位或示例
expr 5 & 3 expr 5 \| 3
关系运算示例
expr 5 \> 3 expr 5 \< 3 expr 5 != 3
字符串运算示例
# 匹配运算
expr match "hello" 'h\([a-z]*\)'
# 截取子串
expr substr "hello" 2 3
# 查找返回下标
expr index "hello" "e"
# 求长度
expr length "hello"
28. shell中if的格式
if [ condition ]; then
# do something
elif [ another_condition ]; then
# do something else
else
# do something else
fi
29. test指令
整数判断示例
if [ 5 -gt 3 ]; then echo "5 is greater than 3" fi
字符串判断示例
if [ "hello" = "hello" ]; then echo "Strings are equal" fi
文件判断示例
if [ -f "file.txt" ]; then echo "File exists" fi
30. while循环
test表达式示例
while [ condition ]; do # do something done
31. for循环
C风格格式示例
for ((i=0; i<5; i++)); do echo $i done
另一种格式示例
for i in 1 2 3 4 5; do echo $i done
字符串列表示例
for var in string1 string2 string3; do echo $var done
32. case···in
格式示例
case $var in
value1)
# do something
;;
value2)
# do something else
;;
*)
# default case
;;
esac
;; *)解释
;;
表示结束一个case分支。*)
表示默认分支,当没有匹配到任何case时执行。
常量值可以重复示例
case $var in value1|value2) # do something ;; *) # default case ;; esac
33. select···in
打印选项示例
select var in option1 option2 option3; do echo "You selected $var" break done
和case···in结合示例
select var in option1 option2 option3; do
case $var in
option1)
echo "Selected option1"
;;
option2)
echo "Selected option2"
;;
option3)
echo "Selected option3"
;;
*)
echo "Invalid option"
;;
esac
break
done
34. continue n
for i in 1 2 3 4 5; do if [ $i -eq 3 ]; then continue 1 fi echo $i done
35. 函数
定义格式
function_name() { # function body }
参数获取
function_name() { local arg1=$1 local arg2=$2 # use arguments }
返回值接收
function_name() { echo "return value" } result=$(function_name) echo $result
修饰变量的关键字
local
:定义局部变量。global
:默认全局变量。
36. Makefile
是什么
- Makefile是一个描述编译规则的文件,用于自动化编译过程。
由什么构成
- 目标(target)、依赖(dependencies)、命令(commands)。
一条规则的特点
- 目标通常是生成的文件,依赖是生成目标所需的文件,命令是生成目标的具体步骤。
Makefile重新编译文件的依据
- Make根据文件的时间戳来决定是否需要重新编译。
伪目标的作用
- 伪目标不会生成实际文件,通常用于执行特定任务,如清理、安装等。
四版Makefile
- GNU Makefile、BSD Makefile、CMakeLists.txt、Rakefile等。
37. gdb调试
流程
- 启动gdb、加载程序、设置断点、运行程序、检查变量、继续执行。
gdb调试core文件有什么作用
- core文件记录了程序崩溃时的状态,gdb可以通过core文件分析程序崩溃的原因。