常用工具的配置和bash

本文全面介绍了Bash脚本的基础知识,包括变量定义、条件判断、循环控制、函数使用以及常用命令行操作。深入解析了字符串操作、数组处理、参数传递等高级技巧,并提供了丰富的示例代码。

bash介绍

shell是用和Linux(或者更准确的说,是你和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。而Bourne Again shell (bash)可以看成shell的一种,还有其他的shell如Bourne shell(sh)、C Shell(csh)。可以把bash看成是sh的升级版,C Shell类似于C语言的程序,Linux默认的就是bash。

echo: 用于向窗口输出文本

#!/bin/bash
echo "Hello World !"

其中的#!他告诉系统这个脚本使用什么解释器来执行,即选择使用哪一种Shell。

将信息输入到文件:

echo "iput your name:" > inf.txt
echo "hello world" >> inf.txt
cat inf.txt

 >写入文件,如果有这个文件则覆盖,>>是在存在的文件中追加信息

eval

常用的作用是来执行含有字符串的命令,来自

 从上面我们可以看到,当我们把cat file直接赋予myfile变量后,我们直接echo myfile的内容将不会输出我们在file文件里面的文本。然后当我们用eval命令后,就会输出我们想要的内容。这时因为eval命令不但可以置换该变量,还能执行相应的命令。在第一次扫描中进行了变量置换,第二次扫描就执行了该变量所包含的字符串里面的cat file 命令,所以就输出了我们想要的内容

变量

定义变量和Python差不多,直接变量和赋值即可,但是等号两边不能有空格,否则识别不出来。

var_name="var_value"
var_name_2="var_value_2"
echo $var_name
echo ${var_name_2}
# 不能写如下方式,等号两边有空格
var_name = "var_value"

#如果是只读变量,加上readonly
readonly only_cons
cons="constant"
# unset 删除变量,且不能删除只读变量
unset var_name
echo $var_name

使用已经定义好的变量要在前面加美元符号$,加花括号是为了帮助解释器识别变量的边界,不影响。赋值时不需要美元符号,只有读取时采用。

字符串变量的单双引号问题:

可以参考这里:

Shell 编程中单双引号异同_ks_hbu的博客-CSDN博客

your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3
# 输出
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !

字符串的操作:

string="abcd"
echo ${#string} #输出 4

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo,从第一个,持续四个
# 转义字符:这里输出"It is a test"
echo "\"It is a test\""
${string:4:-3}   #从第四个到倒数第三个
var=/dir1/dir2/file.tar.gz
basename $var        #获取文件名,输出: file.tar.gz
dirname $var            #获取目录名称,输出: /dir1/dir2
dirname $(dirname $var)   #获取上级目录的名称,输出:/dir1
echo ${var##*/}       #删除左起最后一个/及其左边的字符串,输出:file.tar.gz
echo ${var##*.}       #删除左起最后一个.及其左边的字符串,输出:gz
echo ${var #*.}     #删除左起第一个.及其左边的字符串,输出:tar.gz
echo ${var%/*}      #删除右起第一个/及右边的字符,输出:/dir1/dir2
echo ${var%%.*}   #删除右起最后一个.及右边的字符,输出:/dir1dir2/file
echo ${#var}         #等价于 echo -n $var | wc -c ,求字符串长度,输出:22
echo ${var:0:5}     #两个数字分别为起始地址和截取长度,输出:/dir1
echo ${var/dir/path}  #替换第一个dir为path,输出:/path1/dir2/file.tar.gz
echo ${var//dir/path}  #替换左右dir为path,输出:/path1/path2/file.tar.gz

${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。

看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。
#:表示从左边算起第一个
%:表示从右边算起第一个
##:表示从左边算起最后一个
%%:表示从右边算起最后一个
换句话来说,#总是表示左边算起,%总是表示右边算起。

*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。

字符串操作详细部分可参考这里 

$(cmd): 执行命令行

使用命令行,比如说$(pwd),表示着输出当前路径.,另外一方方式执行命令行就是:`    `, 这个符号就是tab键上面的那个键。

数组

数组用小括号表示,内部元素使用空格进行分开:

array_name=(value0 value1 value2 value3)

读取的时候采用方括号加索引进行

valuen=${array_name[n]}

将字符串列表转换成数组

字符串列表转换成数组只需要加()即可,所以关键是将分隔符转换成空格分隔。

方法一:借助于{str//,/}来处理
str="ONE,TWO,THREE,FOUR"
arr=(${str//,/})
echo ${arr[@]}
输出:
ONE TWO THREE FOUR

方法二:借助于tr命令来处理
str="ONE,TWO,THREE,FOUR"
arr=(`echo $str | tr ',' ' '`) 
echo ${arr[@]}
输出:
ONE TWO THREE FOUR

方法三:借助于awk命令来处理
str="ONE,TWO,THREE,FOUR"
arr=($(echo $str | awk 'BEGIN{FS=",";OFS=" "} {print $1,$2,$3,$4}'))
[echo ${str[*]}

方法四:借助于IFS来处理分隔符
str="ONE,TWO,THREE,FOUR"
IFS=","
arr=(str)
echo ${str[@]}
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
输出全部元素
echo ${array_name[*]}
或者
echo ${array_name[*]}
$0、$1、$2、$3 ....
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

打印出来的信息就是表示着传递参数的意义。分别表示:文件名称,第一个参数,第二个参数,第三个参数、、、

相关的:

$#:传递到脚本的参数个数

$*与$@相同,表示显示所有传递到脚本的参数

  • 相同点:都是引用所有参数。
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

$?:显示最后命令的退出状态,0表示没有错误,其他任何值表示有错误。

条件的测试

[  ], 中括号可用以一些条件是否成立的测试:[ $var -eq 0 ], 变量是否为0. 注意方括号两边有空格

[[ ]],双中括号是进行组合判断条件所用。在单中括号中,如果遇到多判断可以采用&&或者||,实现同样的效果,但是-a,-o不行。

[[ 3 -gt 1 && 5 -lt 8 ]]
echo $?
[[ 3 -gt 1]] && [[ 5 -lt 8 ]]
echo $?
[ 3 -gt 1 || 5 -lt 8 ]
[ 3 -gt 1 ] && [ 5 -lt 8 ]
[ 3 -gt 1 -a  5 -lt 8 ]

# 不可使用
[[ 3 -gt 1 ]] -a [[ 5 -lt 8 ]]
[ 3 -gt 1 ] -o [ 5 -lt 8 ]
[ 3 -gt 1 -o 5 -lt 8 ]

关系运算符常用的如下:

-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。=

对字符串或文件进行判断

=等于则为真
!=不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真
-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名如果文件存在且为字符型特殊文件则为真
-b 文件名如果文件存在且为块特殊文件则为真

 结合上面的关系运算符还有一些bool运算符:

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。

逻辑与算法:&& 和||分别表示and和or。

运算

在做出判断后,可能进行一些运算的话,需要添加expr,通过该命令实现一些常用的计算。

val=`expr 2 + 2`
echo "两数之和为 : $val"

`` 是Tab键上的那个符号。

运算符常用的 +、-、*、等符号,需要注意的是:

  • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
  • 另外 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" 。
val=`expr $a \* $b`
echo "a * b : $val"
echo $((2 * 3))

$((表达式)),

只要是符号C语言的运算符都可以在里面进行计算,包括三目运算,但是只能进行整型计算。

流程控制

if判断

if condition
then
    command1 
    command2
    ...
    commandN 
fi
# 。。。。。。。。。。。。。。。。
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

if判断的结尾是fi

for循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
# 。。。。。。。。
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

可以写成一行,但是需要逗号隔开

for var in item1 item2 ... itemN; do command1; command2… done;

for的结尾是done

while循环

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

这里用了let命令。是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。

#!/bin/bash
let a=5+4
let b=9-3 
echo $a $b

还有很少用的until循环,这里就不介绍。

case选择:

取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;  并且以easc结束

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

 以上训练流均可以使用类似其他编程语言中的break 和continue操作进行中断。

函数:

#!/bin/bash

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

函数的形式与代用方式大概如上代码。其参数调用直接使用$1,$2、、、等方式。

可以将常用的函数写入一个bash文件,然后在类似于main文件中加载这些函数:

可通过下列两种方式加载

#使用 . 号来引用test1.sh 文件
. ./test1.sh
# 或者使用以下包含文件代码
source ./test1.sh

test1.sh 不仅仅限于函数文件,也可以是其他的bash命令。只是说常用的命令写成函数的方式能够节省很多代码

常用命令行

cd ..是回到上一级目录

cd . 是当前目录

cd / 是回到根目录

cd ~ 回到用户主目录

top  查看电脑运行情况,CPU使用率。内存使用情况等

ln -s/home/szx/桌面/1111 (在~/11当前文件夹下,建立软连接,执行此命令会在当前文件夹下面产生1111文件夹的软链接)

nvidia-smi (查看当前GPU使用情况)
nvidia-smi -L:列出所有显卡的信息
nvidia-smi -l 2:动态显示显卡使用信息,每一秒更新一次,参数值可以自己修改
nvida-smi -lms:循环动态显示
nvidia-smi dmon:设备监视(device monitor)
nvidia-smi -i n:显示指定的显卡(如果你有多块显卡,n的值对应显卡的位置)

watch -n 0.1 nvidia-smi

不停刷新gpu使用情况

无进程占用GPU,但是显存却被占用:

fuser -v /dev/nvidia*

kill -9 PID

sudo chmod 777 改变文件夹权限,7的二进制位111,意味着读写等操作都为真。

-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限\

要修改文件夹内所有的文件和文件夹及子文件夹属性为可写可读可执行:

chmod -R 777 /upload

Linux进入root权限返回

在linux系统或者ubuntu虚拟机下

sudo -s进入root权限:退出使用exit

sudo -i 进入后退出使用logout

 查看硬盘空间使用情况:

df -h

查看当前目录下各个文件以及目录的空间占用情况:

du -sh *

统计指定文件类型数量:

find . -name "*.<type>" | wc -l

例:find . -name "*.cpp" | wc -l

查看文件属性:

ls -l filename

查看文件夹属性:

ls -ld foldername 

程序挂起

nohup  命令 &

远程连接服务器,若长时间不操作有可能会掉线。需要用nohup命令将程序挂起。例如 nohup python train.py & 

这样会在当前文件夹下有个nohup.out的文件,里面记录的是程序输出的信息

nohup train.py >output 2>&1 &    是向制定的文件output输出

列出所有进程

ps -aux  

比如,如果在命令行执行python命令,可以采用ctr + c的方式中断,但是如果用nohup挂起以后,就只能ps命令列出进程,然后用kill命令强制终止。

ps -eLf 

该命令将列出所有进程和线程的详细信息,包括线程组 ID(LWP)和父线程组 ID(PPID)

 

 top -H

 pstree -p <PID>

该命令将以层次结构的方式显示与进程 PID 相关的进程和线程,并显示它们的进程 ID 和线程组 ID。

 htop -H

该命令将列出所有线程以及它们所属的线程组 ID。

杀死线程

kill -s 9  线程号         

cat 命令

1.一次显示整个文件。
$ cat   filename
2.从键盘创建一个文件。
$ cat  >  filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件。
$cat   file1   file2  > file
cat具体命令格式为 : cat [-AbeEnstTuv] [--help] [--version] fileName
说明:把档案串连接后传到基本输出(屏幕或加 > fileName 到另一个档案)

shift + command + . 

显示/隐藏  Mac上的文件

查看xcode的版本号和build版本
$ xcodebuild -version

显示当前系统的sdk、及其版本
$ xcodebuild -showsdks

显示工程项目信息
先cd到工程目录下(有*.xcodeproj的目录,比如Q_iOS.xcodeproj),然后输入命令
$ xcodebuild -list

xcodebuild用法:
1)用ios12.0模拟器(iphonesimulator12.2)建立工程
$ xcodebuild -sdk iphonesimulator12.2

xxd的用法:

命令行 xxd --help 列出常用命令

ldd 

该命令后跟可执行文件可以打印出该执行文件链接了哪些系统库

工具

安装vim

sudo apt-get install vim (ubuntu)
yum install vim (redHat/Fedora/CentOS)

安装OpenCV:

pip install --default-timeout=1000  opencv-python

采用pip安装 OpenCV,但是通过国内网络下载较慢,有时候还会中途出现链接是白的问题。导致中途下载失败。设置default-timeout参数。

pip指定国内源安装

我们要是感觉到安装的速度有点慢,可以指定国内的源来安装某个包,例如

pip install -i https://pypi.douban.com/simple/ package_name

 国内源有

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/ 
豆瓣:http://pypi.douban.com/simple/

Mac 隐藏、显示文件切换的快捷键

command + shift + .

执行文件时,前面加 ./  的原因

原因是可执行文件的目录没有包含在环境变量PATH中,linux系统只会搜索PATH变量。而windows下却可以是因为系统会搜索PATH变量和当前目录。你可以用 echo "$PATH"查看当前的环境变量包含的目录,自带的命令文件都是在PATH 中的,所以可以直接使用。
./代表当前目录,由于自己编写的脚本就在当前目录下,而当前目录不在环境变量中,所以得输入包含完整目录的文件名。例如$ ./xx.sh 或者 $/home/xxx/xx.sh

Linux 切换交互界面 gdm lightdm

命令行键入:Sudo dpkg-reconfigure lightdm   出来弹窗选择;重启!

重启桌面 :

sudo systemctl restart gdm

sudo service gdm restart

这两种命令的效果是一样的,dgm还是lightdm看自己使用的是那种桌面,自行选择。

Linux 调出终端

ctrl+alt+F1/F2/F3/F4/F5/F6,任何一个组合即可调出真实终端,图形界面上的Terminal属于伪终端

pycharm,在from模块,显示找不到

1. 对于from模块找不到,例如from customer_file import my_file, 显示找不到,那么在customer上层的文件夹(total_file),设成sources root

具体,选中上层文件夹total_file, 右键->Mark Dircetory as -> sources root

2. 如果在服务器端,或者某种情况无法使用pycharm,可以使用如下代码改变source root的相对位置

from os.path import dirname, abspath
path = dirname(dirname(abspath(__file__)))
sys.path.append(path)

这段代码的意思是当前执行文件的前两个上级路径为source root.有几个dirname即几个上级目录 

Linux下改变gcc的默认版本

例如,安装gcc-4.8版本:sudo apt-get install gcc-4.8,

切换系统默认版本:sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100

查看版本的优先级:sudo update-alternatives --config gcc

同理,g++也是这样设置

删除以上设置:sudo update-alternatives --remove gcc /usr/bin/gcc-4.8

常用软件

vooya视频对比播放器以及查看视频信息的mediainfo,观看hdr视频的potPlayer,zeal:api离线查询软件.

可以查看后缀为.hdr的HDR图片软件:LuminanceHDR,也可以进入官网下载AppImage的形式, .AppImage的后缀文件不需要在进行相应的依赖配置.   双击即可运行软件. 如果双击无反应,点击该文件的属性,权限位置的"执行"位置点对号.  如果需要将该程序添加到程序列表.可以制作一个.desktop文件.

youtube-dl


export http_proxy=http://192.168.1.248:8118
export https_proxy=http://192.168.1.248:8118

# sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
# sudo chmod a+rx /usr/local/bin/youtube-dl
# hash -r
# sudo youtube-dl -U


youtube-dl --list-formats https://www.youtube.com/watch?v=7xiNNadEMcE | grep 3840x2160

youtube-dl -f 337 https://www.youtube.com/watch?v=7xiNNadEMcE
youtube-dl -f 303 https://www.youtube.com/watch?v=0qxP0ezqjgU

# 248          webm       1920x1080  1080p 2699k , vp9, 24fps, video only, 34.07MiB
# 335          webm       1920x1080  1080p HDR 3616k , vp9.2, 24fps, video only, 48.28MiB
# 137          mp4        1920x1080  1080p 4953k , avc1.640028, 24fps, video only, 55.43MiB

 该工具如果不好使用可以切换成

yt-dlp  其git地址为:https://github.com/yt-dlp/yt-dlp

git更新远端状态

git remote update origin --prune

git remote update origin -p

清空命令行或当前命令行:

ctrl + l 清屏
ctrl + u 清除当前命令

Linux下的GIF录制

通过命令行安装byzanz:

sudo apt-get install byzanz

录制固定的坐标:

byzanz-record --duration=10 --x=100 --y=100 --width=600 --height=600 output.gif
--duration 录制时长
--x x坐标
--y y坐标
--width 录制宽度
--height 录制高度
output.gif 录制生成文件名

录制制定窗口,在本地建立.sh脚本文件,比如byzanz-record-window.sh

#!/bin/bash

# Example: byzanz-record-window 30 -c output.gif

# Delay before starting
DELAY=5

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 5s to /tmp/recorded.gif
    D="--duration=10 /tmp/recorded.gif"
fi
XWININFO=$(xwininfo)
read X < <(awk -F: '/Absolute upper-left X/{print $2}' <<< "$XWININFO")
read Y < <(awk -F: '/Absolute upper-left Y/{print $2}' <<< "$XWININFO")
read W < <(awk -F: '/Width/{print $2}' <<< "$XWININFO")
read H < <(awk -F: '/Height/{print $2}' <<< "$XWININFO")

echo Delaying $DELAY seconds. After that, byzanz will start
for (( i=$DELAY; i>0; --i )) ; do
    echo $i
    sleep 1
done

byzanz-record --verbose --delay=0 --x=$X --y=$Y --width=$W --height=$H $D

加上执行权限:

chmod a+x byzanz-record-window.sh

开始录制:

./byzanz-record-window 5 -c output.gif

注意事项:执行该文件时,点击电脑上的想录制的窗口,开始记时,五秒后开始录制,持续十秒钟

在Ubuntu上为deepin-wine关联exe文件

通过wine可以打开window上exe文件,但是每次都是在命令行中用deepin-wine xxxxx.exe文件很是麻烦(通过apt安装的deepin-wine。可以通过一下方法进行关联:

cd /usr/share/applications 进入该文件夹下

通过:sudo touch deepin-wine.desktop  创建配置文件。

通过:sudo vim deepin-wine.desktop打开文件,并写入下列信息:

[Desktop Entry]
Name=Wine
Name[zh_CN]=Wine
GenericName=Launch by Wine
GenericName[zh_CN]=使用Wine运行
Comment=Launch by Wine
Comment[zh_CN]=使用Wine运行
MimeType=application/octet-stream
Keywords=exe;scr;
Exec=wine-stable %f
Icon=wine
Terminal=false
Type=Application
NoDisplay=false
Categories=System;Utility;
StartupNotify=false
参数名定义
Name桌面项目的名称
[zh_CN]的为中文环境下的名称
GenericName桌面项目的标准名称
[zh_CN]的为中文环境下的名称
Comment桌面项目的注释,用以填写说明信息
[zh_CN]的为中文环境下的注释
MimeType桌面项目所对应的MIME,使用分号分隔
application/octet-streamexe可执行文件对应的MIME
Keywords关键字,通常指定桌面项目的扩展名。Linux下使用的Windows可执行文件主要是exescr
Exec桌面项目运行的命令。在这里启动Wine,用Wine运行我们的目标程序。
%f为用该桌面项目打开的文件路径,%u为URI。我们使用%f,使用%u会导致Wine找不到文件。
Icon桌面项目使用的图标。由DDE管理,设置为Wine以使用Deepin为Wine项目设计的图标
Terminal设定是否使用终端模式运行。设置为false,运行命令时不会显示终端;设置为true则会在终端中执行,主要用于调试。
Type桌面项目的类型。典型的值有Application(应用程序)。
NoDisplay具体作用未知,需要查查Gnome桌面环境的文档。
Categories指定桌面项目的类别。
StartupNotify具体作用未知,需要查查Gnome桌面环境的文档。

必须使用sudo,不然在该文件夹下文件没有写入权限。

最后退出并保存就可以(vim在普通模式下,键入:wq!,强制保存)

wine 启动微信输入框的文字乱码以及黑方框

解决方法参考:这里1,这里2,这里3

Ubuntu安装中文语言包

有些带有中文路径的程序或者文件会打不开,这是需要安装支持中问的语言包:

sudo apt-get install  language-pack-zh-han*
sudo apt install $(check-language-support)

sudo vim /etc/default/locale 修改成如下内容

    LANG="zh_CN.UTF-8"
    LANGUAGE="zh_CN:zh"
    LC_NUMERIC="zh_CN"
    LC_TIME="zh_CN"
    LC_MONETARY="zh_CN"
    LC_PAPER="zh_CN"
    LC_NAME="zh_CN"
    LC_ADDRESS="zh_CN"
    LC_TELEPHONE="zh_CN"
    LC_MEASUREMENT="zh_CN"
    LC_IDENTIFICATION="zh_CN"
    LC_ALL="zh_CN.UTF-8"

sudo vim /etc/environment 

    LANG="zh_CN.UTF-8"
    LANGUAGE="zh_CN:zh"
    LC_NUMERIC="zh_CN"
    LC_TIME="zh_CN"
    LC_MONETARY="zh_CN"
    LC_PAPER="zh_CN"
    LC_NAME="zh_CN"
    LC_ADDRESS="zh_CN"
    LC_TELEPHONE="zh_CN"
    LC_MEASUREMENT="zh_CN"
    LC_IDENTIFICATION="zh_CN"
    LC_ALL="zh_CN.UTF-8"

重启电脑即可

C++转汇编:

https://godbolt.org/

进入该网站,左边写成的C++程序在右边生成对应的汇编程序。

linux 安装pycuda

使用pip安装pycuda报错 src/cpp/cuda.hpp:14:18: fatal error: cuda.h: No such file or directory

这之前或许使用了sudo pip3 install pycuda。如果不使用sudo,无法获取权限。但是使用了,cuda内部也是无法拥有root权限。解决办法:

sudo su export PATH=/usr/local/cuda-9.0/bin:/usr/local/cuda/bin:$PATH

然后再次使用
pip3 install pycuda 命令

linux 系统设置中心找不到

这有可能是在安装输入法的时候,删除了ibus导致的。

可以在terminal运行一下gnome-control-center,如果没有的话就重新安装一下

sudo apt-get install gnome-control-center

之后系统设置就回来了。但是也有可能出现里面没有任何内容,这呀给你再次执行:

sudo apt-get install ubuntu-desktop

2>&1

>/dev/null 2>&1,常见命令带有这些参数

对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null。可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.

2>&1 需要写在后面,我们可以理解为,左边是标准输出,好,现在标准输出直接输入到 /dev/null 中,而2>&1是将标准错误重定向到标准输出,所以当程序产生错误的时候,相当于错误流向左边,而左边依旧是输入到/dev/null中。

环境变量

为自己编译的软件设置成默认软件,比如说从官网下载了ffmpeg或者自己编译成功了ffmpeg。在命令行里面执行ffmpeg为默认自己编译或者下载的。假设在/usr/local/ffmpeg/bin路径下有ffmpeg执行文件

PATH=$PATH:/usr/local/ffmpeg/bin
export PATH
或者
export PATH:/usr/local/ffmpeg/bin

保存
source /etc/profile

Python test in xxx问题

pycharm运行程序时,不是 run xxx 的格式。而是 python tests in xxx 的格式。这是因为你的程序里面出现了test函数字样,在python中你就自动进入了pytest模型

一种方法是修改文件名字,另外一种方法就是:

进入到File->Settings->Tools->Python integrated Tools页面

找到Testing下的Default test runner

把Pytest设置为Unittests就可以了

GPU僵尸线程查找 

fuser -v /dev/nvidia*         发现僵尸进程
ps x |grep python|awk '{print $1}'|xargs kill        杀死所有僵尸进程
命令解读:

ps x: show all process of current user
grep python: to get process that has python in command line
awk '{print $1}': to get the related process pidxargs kill`: to kill the process
note: make sure you don’t kill other processes! do ps x |grep python first.

常用软件:

Terminus: 三平台(Mac  linux  window)

winscp : 将window上的资源传到远程linux上

cmder : linux上的命令可以在window上使用的神器

使用pem私钥连接ssh,即无秘钥ssh登录

 一般需要如下信息:

Host <配置名,比如 "k8s-master-aliyun">
HostName <主机名或 ip>
Port <ssh端口>
User <登录用户>
IdentityFile <私钥路径>

在命令窗口直接

ssh -i IdentityFile  -p Port User@HostName

比如 ssh -i ./my.pem -p 22 ubuntu@192.169.1.125

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值