Linux 知识

简介: Linux 知识

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 换源

Ubuntu设置清华源

Ubuntu 软件仓库镜像使用帮助

添加 PPA 源, PPA 全称为 Personal Package Archives(个人软件包档案)

add-apt-repository命令详解

1.3 比较

一文搞清apt与apt-get的异同

apt-get命令详解(超详细)


apt 与 dpkg 区别

apt和dpkg包管理器

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

ubuntu安装/查看已安装包的方法

# 升级该单个软件包
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 #重新配置

ubuntu下载deb包及其所有依赖包 - 知乎

# 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")

linux使用apt命令下载软件和依赖包

# 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 解决方案

ubuntu系统查看内核,升级内核,删除内核,切换内核

3、pkg-config

pkg-config用法详解

4、调试glibc

如何调试glibc

硬核:如何调试glibc

glibc的编译、安装和调试

glibc 知:通用调试技术

5、问题

使用ssh登入不执行.bashrc解决方法

Using nested virtualization in KVM

6、命令

6.1 export

Linux命令之导出变量和函数export

Linux Shell脚本攻略-Bash函数的技巧+将一个命令的输出发送给另一个命令+在不按回车键的情况下读入n个字符

6.2 nm

Linux nm命令详解

nm -D --defined-only /lib/x86_64-linux-gnu/libc.so

这里的参数解释如下:

  • -D 或 --dynamic:显示动态符号,对于共享库来说,这些是可外部访问的接口。
  • –defined-only:只显示定义的符号,不显示未定义的符号。

6.3 vim 操作

vim复制粘贴怎么操作

  1. 复制单个字符或单词:
  1. 将光标移动到要复制的字符或单词上。
  2. 按下y键,表示复制(yank)。
  3. 将光标移动到要粘贴的位置。
  4. 按下p键,表示粘贴(paste)。
  1. 复制整行:
  1. 将光标移动到要复制的行上。
  2. 按下yy键,表示复制当前行。
  3. 将光标移动到要粘贴的位置。
  4. 按下p键,表示粘贴。
  1. 复制多行:
  1. 将光标移动到要复制的起始行上。
  2. 按下V键,表示进入可视模式(Visual mode)。
  3. 使用上下方向键或j、k键选择要复制的行数。
  4. 按下y键,表示复制选中的多行。
  5. 将光标移动到要粘贴的位置。
  6. 按下p键,表示粘贴。
  1. 复制选中的文本块:
  1. 将光标移动到要复制的起始位置。

按下Ctrl+v键,表示进入块可视模式(Visual block mode)。

使用上下左右方向键选择要复制的文本块。

按下y键,表示复制选中的文本块。

将光标移动到要粘贴的位置。

  1. 按下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

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软件包列表

GNU软件包列表

GNU FTP

GIMP FTP

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 制作启动盘

快速制作移动版的Ubuntu系统

    我们首先准备一个容量不小于 4GB 的闪存盘,然后打开 https://ubuntu.com/download/desktop 链接(清华源镜像历史版本)下载 ISO 格式的安装文件,再到 http://rufus.ie/ 下载 Rufus 启动盘制作工具备用。

ubuntu-22.04-desktop-amd64 清华源

ubuntu-22.04 华为源

华为镜像地址

10.2 设置 U盘启动

戴尔笔记本U盘启动快捷键:简单操作教程

1、按下电源键开机,同时按下F12键进入启动菜单。

   

2、使用方向键选择“Boot Sequence”(启动顺序)选项,并按下回车键。

   

3、在启动顺序菜单中,使用方向键选择“USB Storage Device”(USB存储设备)选项,并按下回车键。

   

4、保存设置并退出,按照屏幕提示操作即可完成U盘启动。

10.3 安装

史上最全最新Ubuntu安装及ssh安装教程(图文)

# 更新系统包
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 问题

解决Ubuntu笔记本电脑自动打开飞行模式的问题

# 笔记本电脑上设置了合上盖子不休眠
sudo vim /etc/systemd/logind.conf

# 将里面的
#HandleLidSwitch=suspend
# 改为
HandleLidSwitch=lock
# lock指的是合上盖子锁屏,ignore指的是合上盖子不采取任何操作

10.5 安装 open-vm-tools

安装 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 调试

  1. 在 Bash 脚本中进行调试的一种方法是使用 set -x 来打印出接下来执行的命令。这可以帮助你理解代码的执行流程和变量的状态。

例如:

#!/bin/bash
# 打印出接下来执行的命令
set -x
 
# 示例变量
name="World"
 
# 打印消息
echo "Hello, $name!"


  当你运行这个脚本时,你会看到每个命令及其输出都被打印出来。这对于调试循环、条件语句和函数非常有用。

  1. 另外,你可以使用 bash -x 命令直接调试一个脚本,而不必在脚本内部设置 set -x 。例如:
bash -x your_script.sh


  这将会以调试模式运行 your_script.sh ,并打印出所有执行的命令及其参数。

Linux shell编程学习笔记29:shell自带的 脚本调试 选项

目录
相关文章
|
6月前
|
资源调度 JavaScript 网络协议
Linux
Linux
35 7
|
6月前
|
存储 Web App开发 监控
|
Java Linux 应用服务中间件
|
Linux
Linux问题汇总
Linux问题汇总
214 0
Linux问题汇总
|
Ubuntu Linux Shell
|
安全 Linux 数据安全/隐私保护
|
大数据 测试技术 应用服务中间件
linux你会什么就决定你的工资水平
新手必会用深黄色(8-15k)标记,老鸟必会深黄色+浅蓝色(15-25K)标记 ============================================== 操作系统:Centos,Ubuntu,Redhat,suse,Freebsd 网站服务:nginx,a...
1176 0
|
Linux Ubuntu
linux less
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。
1078 0
|
Linux
linux|管道符号
|管道符是什么:把前一个命令的输出结果输出给下一个命令使用。 为什么有管道符:对结果进行过滤。 使用方法: image.png 总结: image.png
972 0