Linux Bash常用命令记录

1. 标准输出和错误重定向

./main >> log.txt 2>&1
  • ./main 指的是命令行执行的程序指令
  • >> 指的是追加写入文件,如果要覆盖写入的话使用>
  • log.txt 指的是重定向的文件,不在控制台输出显示,直接输出到该文件之中
  • 2>&1 指的是标准输出和标准错误都输出到文件,如果不加这个限制,只有标准输出会定向输出到文件,警告和错误提示仍然输出到控制台显示。

 

2. 截取字符串

在 BashScript 中,pattern 是 glob 风格的

 ${var/pattern/substr}  :首次。查找 var 所表示的字符串中,第一次被 pattern 所匹配到的字符串,以 substr 替换之。

 ${var//pattern/substr}  :全部。查找 var 所表示的字符串中,所有能被 pattern 所匹配到的字符串,以 substr 替换之。

 ${var/#pattern/substr}  :行首。查找 var 所表示的字符串中,行首被pattern所匹配到的字符串,以 substr 替换之。

 ${var/%pattern/substr}  :行尾。查找 var 所表示的字符串中,行尾被pattern所匹配到的字符串,以 substr 替换之。

 

3. 获取可用处理单元数量

3.1 检测可供当前进程使用的处理单元数量命令如下:

$ nproc

3.2 展示所有已经安装的处理单元数量命令如下

$ nproc --all

3.3 多进程编译

$ make -j `nproc`

 

4. apt 安装指定版本的软件或依赖库

```bash $ sudo apt-get install = ```

 

5. 修改用户登录密码

$ passwd user_name
(Current) passwd:

(New) passwd:

(Retype new) passwd:

 

6. 查找文件信息

find / \( -path /sys -o -path /snap -o -path /media -o -path /data \
-o -path /tmp -o -path /home -o -path /proc -o -path /var \) -prune -o -name caffe -print

find 是 unix/linux 系统中强大的查找文件指令,要素过多,慢慢学习。

第二个参数是限定查找路径,第三个\( \)用于排除某些不想搜索的文件夹,-o 相当于 & 用来连接不同的排除路径,与此同时在该参数后面需要加 -prune 参数。

再接着后面的第五个参数 -name 指定待搜索文件名。第六个参数 -print 表示将查找反馈信息输出到标准屏幕上。

 

7. 程序运行时的内存优化

numactl runs processes with a specific NUMA scheduling or memory placement
policy. The policy is set for command and inherited by all of its children.
In addition it can set persistent policy for shared memory segments or files.
--cpunodebind=nodes, -N nodes
     Only execute process on the CPUs of nodes. Note that nodes may consist of multiple CPUs.

-l
Do always local allocation on the current node.

 

8. 查看 GPU 信息

最简单的命令是官方推荐

nvidia-smi

如果想要一直监视 GPU 运行及负载状况,添加参数小写字母 l 

nvidia-smi -l

如果只想看 GPU 的型号和 UUID 信息,添加参数大写字母 L

nvidia-smi -L

要查看指定的 GPU 详细硬件信息,使用 -q -i index参数

nvidia-smi -q -i 0

在运行某程序时指定要使用的 GPU 可以在命令行设置

CUDA_VISIBLE_DEVICES=0,1

查看CUDA Toolkit等信息
nvcc -V 或者 cat /usr/local/cuda/version.txt

 

9. wget 下载文件

基本语法结构

wget [option] [URL]

直接下载单个文件

注意这里单个文件的链接一定要是最终文件的页面,不包含任何其他的网页格式。

例如如果是github上的文件,不能是这样的,这是文件所在的网页而不是文件内容页 https://github.com/opencv/opencv/blob/master/COPYRIGHT

而要是这样的才行 https://raw.githubusercontent.com/opencv/opencv/master/COPYRIGHT

rawcontent下载下来才是真正的文件内容,否则会包含网页格式的html内容。

wget http://www.linuxde.net/testfile.zip

下载并另存为自定义的文件名

这是因为 wget 默认会以最后一个符合/的后面的字符来命令,对于动态链接的下载通常文件名会不正确,所以我们要对文件重定义名称。

wget -O mytest.zip http://www.linuxde.net/testfile.zip

使用wget断点续传

使用wget -c重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。

需要继续中断的下载时可以使用-c参数。

wget -c http://www.linuxde.net/testfile.zip

下载多个文件

当我们需要下载多个文件时,一个一个进行下载比较麻烦,这是可以使用文件列表的形式。

首先保存一份文件下载链接列表

cat > filelist.txt
url1
url2
url3
...

然后使用-i参数和这个文件列表进行下载

wget -i filelist.txt

 

10. 为用户目录添加软件运行或者动态库链接路径

打开 .bashrc

lph@cv:~$ vim .bashrc

然后在最后直接添加

export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/usr/local/cuda/include:/usr/local/cuda-11.1/samples/common/inc"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
export PATH="$PATH:/usr/local/cuda-11.1/nsight-compute-2020.2.0:/usr/local/cuda/bin"

如上所示,分别表示添加头文件搜索路径,动态库链接路径,以及软件运行路径。

添加完成后使用 source 使其生效

lph@cv:~$ source .bashrc

这样就ok了

 

11. VIM 指令

输入  :  进入指令模式

11.1 替换字符串

在文件全局范围内搜索并替换

:%s/old_str/new_str/gc

其中后面的参数 g 指在全局范围内替换,c 指替换之前需要用户确认方能执行。

在当前行搜索并替换

:s/old_str/new_str/c

11.2 删除符合筛选条件的行

:g/^$/d
:g/^str$/d

行首或者行中的空格用  \s  来指代

...

 

12. 其他

计算 str 的长度

${#str}

 

条件判断

if TEST-COMMAND1
then
    STATEMENTS1
elif TEST-COMMAND2
then
    STATEMENTS2
else
    STATEMENTS3
fi

 


参考资料

[1] Ubuntu通过apt-get安装指定版本和查询指定软件有多少个版本 https://www.cnblogs.com/EasonJim/p/7144017.html

[2] find命令 https://man.linuxde.net/find

[3] wget命令 https://man.linuxde.net/wget

[4] Bash For Loop Examples https://www.cyberciti.biz/faq/bash-for-loop/

posted @ 2020-06-25 00:04  coffee_tea_or_me  阅读(247)  评论(0编辑  收藏  举报