【经验版】Linux相关教程(一)
# 可执行权限
chmod +x 软件包名.run
# 校验软件包安装文件的一致性和完整性
./软件包名.run --check
# 指定安装路径
./软件包名.run --install
如果用户未指定安装路径,则软件会安装到默认路径下,默认安装路径如下。
root用户:“/usr/local/Ascend”
非root用户:“${HOME}/Ascend”
其中${HOME}为当前用户目录。
# 压缩/etc/目录,压缩文件名为etc.zip
zip -vr etc.zip /etc/
# 压缩多个文件夹
# 将input1,input2, input3压缩成output.zip
zip -vr output.zip input1 input2 input3
# 删除压缩文件中的指定文件
zip -d myfile.zip smart.txt
# 追加mypasww.txt文件到压缩包中
zip -u passwd.zip mypasww.txt
# 将文件和文件夹压缩成 .zip 文件
zip -q -r compress.zip [file directory]
参数解释:
-v :可视化操作,显示压缩的执行过程,默认就是可视化
-q : 静默操作,不显示指令执行过程
-r :表示递归打包包含子目录的全部内容
-d :从压缩文件内删除指定的文件
-n :n为一个数字,压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好
-e :加密压缩文件
-u :追加文件到zip压缩包中
# 解压到当前目录
unzip xxx.zip
或者
unzip -q xxx.zip
# 解压到指定目录
unzip xxx.zip -d ./xxx
# 将文件和文件夹压缩成 .tar.gz 文件
tar -zcf xxx.tar.gz [file directory]
# 解压.tar.gz结尾的压缩包
tar -xzvf xxx.tar.gz
# 解压 .tar.gz 文件到 /hy-nas 目录
tar -C /hy-nas -xf xxx.tar.gz
# gz解压
gzip -d cmake-3.14.1.tar.gz
tar -xvf cmake-3.14.1.tar
解压 zip 或 rar 推荐使用 7z 命令
安装7z
apt-get update
apt-get install p7zip-full -y
# 如果 zip 超过 1GB 推荐使用 7z 命令解压,-o 后直接加解压缩路径
7z x compress.zip -o/hy-nas
# 解压 .rar 文件到当前目录
7z x compress.rar
如何使用curl命令下载文件
下载链接:https://d7.serctl.com/downloads8/2022-10-08-14-24-38-CopyTranslator-CopyTranslator-PaddleOCR-json.v1.2.1.7z
# 下载单个文件,文件名称与url一致
curl -O [URL]
# 下载多个文件
curl -O [URL1] -O [URL2] -O [URL3] ...
# 下载连续的多张图片
# 如果url中文件带有数字,并且有顺序,可以使用正则语法
curl ftp://ftp.example.com/file[1-30].jpg
# 使用不同的名称保存多个文件
curl -o file2.pdf www.example.com/file.pdf -o file3.pdf www.example.com/file1.pdf
# 下载文件显示进度条
curl -# -O [URL]
# 限制下载速度
# 这个值可以用字节表示,k后缀为千字节,m后缀为兆字节,g后缀为千兆字节
curl --limit-rate [value] [URL]
curl --limit-rate 1m -O [URL]
Linux wget 命令详解
wget命令是Linux系统用于从Web下载文件的命令行工具,支持 HTTP、HTTPS及FTP协议下载文件,而且wget还提供了很多选项,例如下载多个文件、后台下载,使用代理等等,使用非常方便。接下来就介绍一下wget的使用方法。
# 下载单个文件,文件名称为默认名称
wget [url]
# 下载单个文件,并重命名
wget -O redis.tar.gz https://download.redis.io/releases/redis-6.0.8.tar.gz
# 将文件下载到指定目录
wget -P /usr/software https://download.redis.io/releases/redis-6.0.8.tar.gz
# 断点续传
wget -c https://download.redis.io/releases/redis-6.0.8.tar.gz
# 在后台下载
wget -b https://download.redis.io/releases/redis-6.0.8.tar.gz
# 按照download_list.txt中的链接下载
# 每个url单独一行
wget -i download_list.txt
# 限制下载速度
# 这个值可以用字节表示,k后缀为千字节,m后缀为兆字节,g后缀为千兆字节
wget --limit-rate=1m https://download.redis.io/releases/redis-6.0.8.tar.gz
# 设置模拟浏览器下载
# 如果远程服务器阻止wget下载资源,我们可以通过-U选项模拟浏览器进行下载,例如下面模拟谷歌浏览器下载
wget -U 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.43 Safari/537.36' https://download.redis.io/releases/redis-6.0.8.tar.gz
# 增加重试次数
# 如果网络有问题或下载一个大文件有可能会下载失败,wget默认重试20次
wget --tries=40 https://download.redis.io/releases/redis-6.0.8.tar.gz
# 通过FTP下载如果要从受密码保护的FTP服务器下载文件,需要指定用户名和密码
wget --ftp-user=<username> --ftp-password=<password> url
# 创建软链接
# Ubuntu中建立软链接运用ln命令,第一个参数是要建立软链接的文件,第二个参数是软链接名称
ln -s 源地址 目的地址
ln -s /opt/Linux/root_dir /home/lp/roo_dir
# 移除软链接
rm -rf <软链接地址>
# 修改软链接
ln -snf <新目标目录> <软链接地址>
linux文件完整性校验-md5-sha256
通过md5sum 对二进制文件 libTaskDb.so
算md5值,并将值存储在 libTaskDb.so.md5
文件中,校验文件的时候,使用 md5sum -c libTaskDb.so.md5
来校验文件,校验成功,返回0,否则返回1。
# 生成校验码
md5sum -b libTaskDB.so > libTaskDB.so.md5
# 校验文件
md5sum -c libTaskDB.so.md5
# 生成校验码
sha256sum -b mindspore-lite-1.8.2-linux-x64.tar.gz > mindspore-lite-1.8.2-linux-x64.tar.gz.sha256
# 校验文件
sha256sum -c mindspore-lite-1.8.2-linux-x64.tar.gz.sha256
apt-get update
apt install iputils-ping
通过工具(如adb logcat)抓取后台日志。
功能:查看可执行文件的链接库情况。
用法:ldd file
yoyo@yoyo:/mnt/d/MyDocuments/CMakeDemo/build$ ldd test.cpython-38-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffde1d20000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5588e95000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5588e75000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5588c4d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5588b66000)
/lib64/ld-linux-x86-64.so.2 (0x00007f55890eb000)
功能:查看文件上属性。
root@root:/home/mindspore_ascend-1.8.2-linux_aarch64/lib# file libmindspore_common.so
libmindspore_common.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=a8e6f5d61eef2f8447ce237014c8f94a1d0638d5, not stripped
~/.bashrc
文件。该文件包含bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。该文件被修改后,打开新的terminal,配置才可生效。
为了避免旧的变量被新增的变量覆盖,应该写成如下格式:PATH=$PATH:xx
,每一个 PATH
之间要用 : 分隔。在LINUX系统下用 : 作为分隔,在windows中用 ; 。
执行 source ~/.bashrc
使环境变量生效。
# 环境变量
export PACKAGE_ROOT_PATH={converter_path}
# 动态链接库
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PACKAGE_ROOT_PATH}/tools/converter/lib
export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:${PATH}
# 系统的环境变量
source /etc/profile
# 当前用户的环境变量
source ~/.bashrc
linux设置环境变量
export PATH={converter_path}:${PATH}
windows设置环境变量
set PATH={converter_path}:${PATH}
删除环境变量
export -n KUBECONFIG="/etc/kubernetes/admin.conf"
# 或者
unset KUBECONFIG
参数解释:-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
列出当前的环境变量
# 列出当前的环境变量值
export -p
glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。
Ubuntu/Centos 为了稳定使用的glibc版本通常比较低。而安装有些程序需要依赖新版本。升级glibc需要慎重,因为升级失败后导致系统不能用了。原则上不推荐升级glibc。
# 查询是否缺失相应的GLIBC版本
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
strings /lib/x86_64-linux-gnu/libc-2.23.so | grep GLIBC
或者
ldd --version
yoyo@yoyo:~/MyDocuments/PyProjects/example-app/build$ strings /lib/x86_64-linux-gnu/libc-2.23.so | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_PRIVATE
GNU C Library (Ubuntu GLIBC 2.23-0ubuntu11.3) stable release version 2.23, by Roland McGrath et al.
Centos7 glibc库升级到2.23
系统默认的glibc版本是稳定版本,升级可能会带来各种问题,如果升级失败可能导致系统崩溃,请谨慎升级。
如果交叉编译程序,导致编译生成的可执行文件无法运行,提示glibc版本不支持,可降低交叉编译工具链的版本,用低版本的交叉编译工具链重新编译即可。
在遇到glibc库问题时候,可以先考虑下为什么要升级GLIBC库,能够通过其他影响性相对小的方式:
linux下的tmpfs和devtmpfs分别是什么啊?
默认的linux发行版中的内核配置都会开启tmpfs,映射到了 /dev/
下的shm目录。/dev/shm/
是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用 /dev/shm/
就可达到很好的优化效果。默认系统就会加载 /dev/shm
,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 ram,但它也可以使用您的交换分区来存储。
# 查看tmpfs
df -h
[forlinx@ok3568:~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 5.9G 1.2G 4.5G 21% /
devtmpfs 978M 0 978M 0% /dev
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 986M 460K 986M 1% /tmp
tmpfs 986M 280K 986M 1% /run
/dev/mmcblk0p7 124M 13M 106M 11% /oem
/dev/mmcblk0p8 8.4G 501M 7.6G 7% /userdata
/dev /shm/
需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果 /dev/shm/
下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1g,里头放有 100m文件,那剩余的900m仍然可为其它应用程序所使用,但它所占用的100m内存,是绝不会被系统回收重新划分的。/dev/shm
大小默认的最大一半内存大小在某些场合可能不够用,并且默认的inode数量很低一般都要调高些,这时可以用mount命令来管理它。
mount -o size=1500m -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
参数解释
size=1500m
,在2g的机器上,将最大容量调到1.5g;nr_inodes=1000000
,inode数量调到1000000,这意味着最多可存入一百万个小文件。如果需要永久修改 /dev/shm
的值,需要修改 /etc/fstab
。
tmpfs /dev/shm tmpfs defaults,size=1.5g 0 0
mount -o remount /dev/shm
/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 is not a symbolic link
# 错误原因:
缺少软连接
# 解决办法:
创建软连接
sudo ln -sf /usr/local/cuda/lib64/libcudnn.so.7.0.5 /usr/local/cuda/lib64/libcudnn.so.7
No space left on device
磁盘空间不足no space left on device 磁盘空间不足原因及排查方法
[ai@localhost 360Downloads]$ yum repolist
Error: Could not set cachedir: [Errno 28] No space left on device: '/var/tmp/dnf-ai-adixssq3'
Exception ignored in: <function MainConf.__del__ at 0x7f9a56160280>
Traceback (most recent call last):
File "/usr/lib/python3.9/site-packages/dnf/conf/config.py", line 254, in __del__
for file_name in self.tempfiles:
File "/usr/lib/python3.9/site-packages/dnf/conf/config.py", line 67, in __getattr__
option = getattr(self._config, name)
AttributeError: 'ConfigMain' object has no attribute 'tempfiles'
错误原因:
在linux中,有两个概念,block和inode
block:用于存放实际数据 df -h
inode:存放文件属性 df -i
只要这两个其中一个占满空间了,都会导致提示报错"No space left on device"磁盘空间不足。
解决办法:
查找删除垃圾文件,并删除
[ai@localhost 360Downloads]$ yum -y install epel-release
[ai@localhost 360Downloads]$ yum -y install epel-release
Error: This command has to be run with superuser privileges (under the root user on most systems).
[ai@localhost 360Downloads]$ sudo yum -y install epel-release
[sudo] password for ai:
ai is not in the sudoers file. This incident will be reported.
错误原因:
此命令必须以超级用户权限(在大多数系统上以root用户权限)运行。
解决办法:
切换root用户
bash:/build.sh:/bin/bash^M:bad interpreter:No such file or directory
bash:/build.sh:/bin/bash^M:bad interpreter:No such file or directory报错解决方法
错误原因:
build.sh文件格式为dos格式导致
解决办法:
vi build.sh
:set ff
:set fileformat=unix
:wq
一行命令解决Ubuntu不能挂载移动硬盘问题Error mounting /dev/sda1 at /media/XXXX: Command-line `mount -t “ntfs” -o
两种方法解决Ubunto不能挂载u盘问题 Error mounting /dev/sdc1 at /media/pc01/U盘: Command-line `mount -t “exfat“ -o “
错误原因:
磁盘挂载失败
解决办法:
# 查看分区
sudo fdisk -l
# 修复分区
sudo ntfsfix /dev/sda2
/usr/bin/ld: cannot find -lpangolin
[/usr/bin/ld: cannot find -l 基本原理解释与解决方法](/usr/bin/ld: cannot find -l 基本原理解释与解决方法)
问题解释:-l
是link的意思,pangolin
是库的名字。
错误原因:
ldconfig找不到libpangolin库
解决办法:
通过软链接,将libpangolin库放到 /usr/local/lib目录下
sudo ln -s /PATH/TO/libpangolin.so /usr/local/lib/libpangolin.so