
系列文章目录
Linux内核学习
Linux 知识(1)
Linux 知识(2)
文章目录
1、Apt
1.1 查看操作系统信息
使用以下命令查看本机的操作系统和位数信息:
uname -m && cat /etc/*release
输出:
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION=“Ubuntu 16.04.7 LTS”
NAME=“Ubuntu”
VERSION=“16.04.7 LTS (Xenial Xerus)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=“Ubuntu 16.04.7 LTS”
VERSION_ID=“16.04”
HOME_URL=“http://www.ubuntu.com/”
SUPPORT_URL=“http://help.ubuntu.com/”
BUG_REPORT_URL=“http://bugs.launchpad.net/ubuntu/”
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
CPU架构关系:关于i386、x86、x86_64、x64、amd64和arm64、aarch64
1.2 换源
添加 PPA 源, PPA 全称为 Personal Package Archives(个人软件包档案)
add-apt-repository命令详解
1.3 比较
一文搞清apt与apt-get的异同
apt-get命令详解(超详细)
1.4 用法
# 查询系统中属于nano的文件:
$ dpkg-query -L vim
/.
/usr
/usr/share
/usr/share/bug
/usr/share/bug/vim
/usr/share/bug/vim/script
/usr/share/bug/vim/presubj
/usr/share/doc
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/vim
/usr/bin
/usr/bin/vim.basic
/usr/share/doc/vim
# 升级该单个软件包
sudo apt install --only-upgrade package_name
# 查看系统中软件包nano的状态, 支持模糊查询:(l的意思是list)
$ dpkg -l nano
# 查看软件包nano的详细信息:
$ dpkg -s nano
# 查询系统中属于nano的文件:
$ dpkg-query -L nano
apt-cache search # ------(package 搜索包)
apt-cache show #------(package 获取包的相关信息,如说明、大小、版本等)
apt-get install # ------(package 安装包)
apt-get install # -----(package --reinstall 重新安装包)
apt-get download # -----(package 从仓库下载安装deb包,可以通过dpkg -x 包名 文件夹名切出来看下包里面的内容)
apt-get -f install # -----(强制安装, "-f = --fix-missing"当是修复安装吧...)
apt-get remove #-----(package 删除包)
apt-get remove --purge # ------(package 删除包,包括删除配置文件等)
apt-get autoremove --purge # ----(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
apt-get update #------更新源
apt-get upgrade #------更新已安装的包
apt-get dist-upgrade # ---------升级系统
apt-get dselect-upgrade #------使用 dselect 升级
apt-cache depends #-------(package 了解使用依赖)
apt-cache rdepends # ------(package 了解某个具体的依赖,当是查看该包被哪些包依赖吧...)
apt-get build-dep # ------(package 安装相关的编译环境)
apt-get source #------(package 下载该包的源代码)
apt-get clean && apt-get autoclean # --------清理下载文件的存档 && 只清理过时的包
apt-get check #-------检查是否有损坏的依赖
dpkg -S filename #-----查找filename属于哪个软件包
apt-file search filename #-----查找filename属于哪个软件包
apt-file list packagename #-----列出软件包的内容
apt-file update #--更新apt-file的数据库
dpkg --info "软件包名" #--列出软件包解包后的包名称.
dpkg -l #--列出当前系统中所有的包.可以和参数less一起使用在分屏查看. (类似于rpm -qa)
dpkg -l |grep -i "软件包名" #--查看系统中与"软件包名"相关联的包.
dpkg -s #查询已安装的包的详细信息.
dpkg -L #查询系统中已安装的软件包所安装的位置. (类似于rpm -ql)
dpkg -S #查询系统中某个文件属于哪个软件包. (类似于rpm -qf)
dpkg -I #查询deb包的详细信息,在一个软件包下载到本地之后看看用不用安装(看一下呗).
dpkg -i #手动安装软件包(这个命令并不能解决软件包之前的依赖性问题),如果在安装某一个软件包的时候遇到了软件依赖的问题,可以用apt-get -f install在解决信赖性这个问题.
dpkg -r #卸载软件包.不是完全的卸载,它的配置文件还存在.
dpkg -P #全部卸载(但是还是不能解决软件包的依赖性的问题)
dpkg -reconfigure #重新配置
# XXX 为需要下载的 deb 包
sudo apt download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends XXX | grep -v i386 | grep "^\w")
# 1.
cd /var/cache/apt/archives/
# 该目录是依赖包默认下载目录
# 2.执行
sudo apt download ntp
# ,仅下载ntp安装包
# 3.执行下面命令下载ntp依赖包
sudo apt-get install --reinstall -d `apt-cache depends ntp | grep "依赖" | cut -d: -f2 |tr -d "<>"`
apt remove vs apt purge:ubuntu软件包卸载
1.5 ubuntu获取源码
下载源码两种方式:
# 1.下载到当前目录
apt source vim
sudo apt-get source linux-$(uname -r)
# 2.下载到/usr/src下
sudo apt install linux-source-4.15.0
Ubuntu源代码及如何获取和使用Ubuntu源代码
ubuntu获取源码方式
ubuntu20.04 下载 linux源码和编译简单测试模块
Ubuntu18编译内核源码,并调整版本号
Ubuntu 14.04.2安装内核源码树以及编译
ubuntu下载源码(Ubuntu源码)
2、系统升级
sudo apt update
sudo apt upgrade
sudo do-release-upgrade
若出现:
Please install all available updates for your release before upgrading.
sudo apt update
sudo apt upgrade
# 解决相依性的问题,如果有相依性问题,需要安装/移除新的 Package,就会试着去安装/移除它.
# (所以通常 dist-upgrade 会被认为是有点风险的升级)
sudo apt dist-upgrade
sudo do-release-upgrade
Ubuntu升级到20.04
Please install all available updates for your release before upgrading
apt update ,apt upgrade 和 apt dist-upgrade 的区别
GPG error: file:/var/cudnn-local-repo-ubuntu1804-8.4.1.50 In 解决方案
3、pkg-config
4、调试glibc
如何调试glibc
硬核:如何调试glibc
glibc的编译、安装和调试
glibc 知:通用调试技术
5、问题
Using nested virtualization in KVM
6、命令
6.1 export
Linux命令之导出变量和函数export
Linux Shell脚本攻略-Bash函数的技巧+将一个命令的输出发送给另一个命令+在不按回车键的情况下读入n个字符
6.2 nm
nm -D --defined-only /lib/x86_64-linux-gnu/libc.so
这里的参数解释如下:
- -D 或 --dynamic:显示动态符号,对于共享库来说,这些是可外部访问的接口。
- –defined-only:只显示定义的符号,不显示未定义的符号。
- 基本用法
nm [选项] <文件>
# 常用选项
-a : 显示所有符号,包括调试符号
-g : 仅显示外部(全局)符号
-u : 仅显示未定义符号(需要外部提供)
-D : 显示动态符号(用于共享库)
-C : 反解析C++符号
--defined-only : 仅显示已定义的符号
--no-demangle : 禁用C++符号反解析
-l : 显示符号对应的源代码行号(需要调试信息)
-S : 显示符号大小,如数据对象大小
--size-sort : 按符号大小排序
--numeric-sort : 按符号地址排序
--no-strip-undefined : 保留所有符号,有的符号可能被优化掉
- nm 命令回显的第二列表示符号类型:
A : 绝对地址,不可更改
B : BSS段,未初始化数据
D : 数据段,初始化数据
T : 代码段,函数或可执行代码
U : 未定义符号,需要外部提供
W : 弱符号,可被覆盖
V : 弱对象符号
I : 间接引用
小写字母 : 表示局部符号,比如 t 就表示局部函数
6.3 vim 操作
-
复制单个字符或单词:
-
将光标移动到要复制的字符或单词上。
-
按下y键,表示复制(yank)。
-
将光标移动到要粘贴的位置。
-
按下p键,表示粘贴(paste)。
-
-
复制整行:
-
将光标移动到要复制的行上。
-
按下yy键,表示复制当前行。
-
将光标移动到要粘贴的位置。
-
按下p键,表示粘贴。
-
-
复制多行:
-
将光标移动到要复制的起始行上。
-
按下V键,表示进入可视模式(Visual mode)。
-
使用上下方向键或j、k键选择要复制的行数。
-
按下y键,表示复制选中的多行。
-
将光标移动到要粘贴的位置。
-
按下p键,表示粘贴。
-
-
复制选中的文本块:
-
将光标移动到要复制的起始位置。
-
按下Ctrl+v键,表示进入块可视模式(Visual block mode)。
-
使用上下左右方向键选择要复制的文本块。
-
按下y键,表示复制选中的文本块。
-
将光标移动到要粘贴的位置。
-
按下p键,表示粘贴。
-
-
除了上述基本的复制粘贴操作外,Vim还提供了其他一些有用的复制粘贴命令,例如:
-
dd:剪切当前行。
-
D:剪切光标位置到行尾的内容。
-
x:剪切当前光标所在位置的字符。
-
:n1,n2y:复制指定行范围内的内容。
-
:n1,n2d:剪切指定行范围内的内容。
-
6.4 制作 Deb 包
Linux制作一个deb包如此简单:Ubuntu的deb安装包文件的内部组成分析与使用原理
deb包构建详解
问题解决:dpkg-deb: error: package name has characters that aren‘t lowercase alphanums or ‘-+.‘
Linux dpkg和dpkg-deb常用参数使用说明
7、 编译与链接
set( CMAKE_SKIP_BUILD_RPATH FALSE) # 编译时加上RPATH
set( CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) # 编译时RPATH使用安装的RPATH
set( CMAKE_INSTALL_RPATH "./") # 安装RPATH为当前目录
set( CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # 安装的执行文件加上RPATH
【C_C++ 库的动态链接】深入理解动态链接器:RPATH, RUNPATH与$ORIGIN
CMAKE和RPATH
RPATH RUNPATH 和 LD_LIBRARY_PATH
查看
readelf -d my_program | grep -E 'RPATH|RUNPATH'
7.1 Glibc
更改引用高版本glibc的程序到引用低版本的glibc
使用指定的glibc
Linux部署程序之glibc兼容性问题
8、GNU软件包列表
9、例子
9.1 linux 查找程序
#!/bin/bash
process_name="code-server" # 替换为您要检查的进程名
if ps -ef | grep -v grep | grep $process_name > /dev/null
then
echo "$process_name is running"
else
echo "$process_name is not running"
fi
9.2 Root 操作
ubuntu下如何打开root文件夹,如何用root权限管理员权限打开文件夹,以及如何获取root权限
sudo nautilus
10、系统安装
10.1 制作启动盘
我们首先准备一个容量不小于 4GB 的闪存盘,然后打开 https://ubuntu.com/download/desktop 链接(清华源镜像历史版本)下载 ISO 格式的安装文件,再到 http://rufus.ie/ 下载 Rufus 启动盘制作工具备用。
ubuntu-22.04-desktop-amd64 清华源
ubuntu-22.04 华为源
10.2 设置 U盘启动
1、按下电源键开机,同时按下F12键进入启动菜单。
2、使用方向键选择“Boot Sequence”(启动顺序)选项,并按下回车键。
3、在启动顺序菜单中,使用方向键选择“USB Storage Device”(USB存储设备)选项,并按下回车键。
4、保存设置并退出,按照屏幕提示操作即可完成U盘启动。
10.3 安装
# 更新系统包
sudo apt-get update
# 自动下载并安装OpenSSH服务器
sudo apt-get install openssh-server
# 检查服务状态是否运行
sudo systemctl status ssh
# 配置ssh(进行相应的配置)并重启ssh服务
sudo nano /etc/ssh/sshd_config
sudo systemctl restart ssh
# 允许ssh通过防火墙
sudo ufw allow ssh
10.4 问题
# 笔记本电脑上设置了合上盖子不休眠
sudo vim /etc/systemd/logind.conf
# 将里面的
#HandleLidSwitch=suspend
# 改为
HandleLidSwitch=lock
# lock指的是合上盖子锁屏,ignore指的是合上盖子不采取任何操作
10.5 安装 open-vm-tools
# 用于安装和升级的命令是相同的。如果虚拟机具有 GUI(X11 等)
sudo apt-get install open-vm-tools-desktop
# 不带 GUI
sudo apt-get install open-vm-tools
11、bash
11.1 打印函数名和行号
使用FUNCNAME 和BASH_LINENO实现shell脚本中定位函数错误在代码中的位置
linux shell 脚本 获取当前函数名
#!/bin/bash
# $FUNCNAME[0] 得到当前函数名
# ${FUNCNAME[1]} 得到上一层函数名 如果上层没有函数调用 则为空
# ${FUNCNAME[@]} 函数名堆栈数组
echo $FUNCNAME[0]
echo $FUNCNAME[@]
echo $LINENO
Bash技巧:介绍 $0、$1、$2、$#、$@、$*、$? 的含义
$0 对应 “./test.sh” 这个值。如果执行的是 ./work/test.sh, 则对应 ./work/test.sh 这个值,而不是只返回文件名本身的部分。
$1 会获取到 a,即 $1 对应传给脚本的第一个参数。
$2 会获取到 b,即 $2 对应传给脚本的第二个参数。
$3 会获取到 c,即 $3 对应传给脚本的第三个参数。$4、$5 等参数的含义依此类推。
$# 会获取到 3,对应传入脚本的参数个数,统计的参数不包括 $0。
$@ 会获取到 “a” “b” “c”,也就是所有参数的列表,不包括 $0。
$* 也会获取到 “a” “b” “c”, 其值和 @ 相同。但 “*” 和 "@ " 有所不同。 “*” 把所有参数合并成一个字符串,而 “$@” 会得到一个字符串参数数组。
$? 可以获取到执行 ./test.sh a b c 命令后的返回值。在执行一个前台命令后,可以立即用 $? 获取到该命令的返回值。该命令可以是系统自身的命令,可以是 shell 脚本,也可以是自定义的 bash 函数。
11.2 bash 调试
- 在 Bash 脚本中进行调试的一种方法是使用 set -x 来打印出接下来执行的命令。这可以帮助你理解代码的执行流程和变量的状态。
例如:
#!/bin/bash
# 打印出接下来执行的命令
set -x
# 示例变量
name="World"
# 打印消息
echo "Hello, $name!"
当你运行这个脚本时,你会看到每个命令及其输出都被打印出来。这对于调试循环、条件语句和函数非常有用。
- 另外,你可以使用 bash -x 命令直接调试一个脚本,而不必在脚本内部设置 set -x 。例如:
bash -x your_script.sh
这将会以调试模式运行 your_script.sh ,并打印出所有执行的命令及其参数。
Linux shell编程学习笔记29:shell自带的 脚本调试 选项
☆
2万+

被折叠的 条评论
为什么被折叠?



