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(个人软件包档案)
1.3 比较
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
ubuntu20.04 下载 linux源码和编译简单测试模块
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
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
5、问题
Using nested virtualization in KVM
6、命令
6.1 export
Linux Shell脚本攻略-Bash函数的技巧+将一个命令的输出发送给另一个命令+在不按回车键的情况下读入n个字符
6.2 nm
nm -D --defined-only /lib/x86_64-linux-gnu/libc.so
这里的参数解释如下:
- -D 或 --dynamic:显示动态符号,对于共享库来说,这些是可外部访问的接口。
- –defined-only:只显示定义的符号,不显示未定义的符号。
6.3 vim 操作
- 复制单个字符或单词:
- 将光标移动到要复制的字符或单词上。
- 按下y键,表示复制(yank)。
- 将光标移动到要粘贴的位置。
- 按下p键,表示粘贴(paste)。
- 复制整行:
- 将光标移动到要复制的行上。
- 按下yy键,表示复制当前行。
- 将光标移动到要粘贴的位置。
- 按下p键,表示粘贴。
- 复制多行:
- 将光标移动到要复制的起始行上。
- 按下V键,表示进入可视模式(Visual mode)。
- 使用上下方向键或j、k键选择要复制的行数。
- 按下y键,表示复制选中的多行。
- 将光标移动到要粘贴的位置。
- 按下p键,表示粘贴。
- 复制选中的文本块:
- 将光标移动到要复制的起始位置。
按下Ctrl+v键,表示进入块可视模式(Visual block mode)。
使用上下左右方向键选择要复制的文本块。
按下y键,表示复制选中的文本块。
将光标移动到要粘贴的位置。
- 按下p键,表示粘贴。
5.除了上述基本的复制粘贴操作外,Vim还提供了其他一些有用的复制粘贴命令,例如:
- dd:剪切当前行。
- D:剪切光标位置到行尾的内容。
- x:剪切当前光标所在位置的字符。
- x:剪切当前光标所在位置的字符。
- :n1,n2y:复制指定行范围内的内容。
- :n1,n2d:剪切指定行范围内的内容。
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
RPATH RUNPATH 和 LD_LIBRARY_PATH
查看
readelf -d my_program | grep -E 'RPATH|RUNPATH'
7.1 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 清华源
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脚本中定位函数错误在代码中的位置
#!/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 ,并打印出所有执行的命令及其参数。