当前位置:   article > 正文

linux各种命令手册_linux命令手册

linux命令手册

1 编程命令

命令含义
man 3 clock_gettime查看clock_gttime函数用的哪个头文件#inlcude "time.h",可换其他API
mount -t nfs -o nolock 10.13.150.244:/nfs /mnt/nfs将window server上的nfs映射挂载到/mnt/nfs下
mount -t nfs -o nolock 192.168.4.28:/nfs /mnt/nfs将window server上的nfs映射挂载到/mnt/nfs下

2 运维命令

命令含义
curl http://members.3322.org/dyndns/getip获取外网ip方式
curl ifconfig.me获取外网ip方式

3 常见命令

命令含义
clear清屏
watch nvidia-smi
nvidia-smi -l 11s刷新nvidia-smi信息
reboot重启
ifconfig查看ip
hostname主机名
service iptables status查看防火墙状态
mkdir folder/创建文件夹folder
cd folder/打开文件夹
cd ..回到上级目录
cd ~回到当前用户目录
cd /回到系统根目录
pwd [来源]查看当前目录具体路径
mv [来源] [目标]重命名或移动文件
mv -n [来源][目标]不覆盖重复的文件
mv -f [来源][目标]无条件覆盖已经存在的文件
cp [来源] [目标]复制文件/文件夹
cp -R [来源] [目标]递归到文件夹的子层目录复制
rm -rf [文件夹]删除文件/文件夹
sudo mount -a重新挂载所有分区
df -h查看硬盘挂载点和大小
du -lh查看当前文件夹的所有所占大小
df -h /var/lib/docker查看某目录的挂载点
ls -h显示当前文件夹各文件大小
getconf LONG_BIT查看系统是32位还是64位
vim /etc/ssh/sshd_configssh的配置文件
/etc/init.d/ssh restart重启服务
/etc/init.d/docker restrat重启docker
/etc/init.d/netwoking restrat重启网络服务
/etc/init.d/lightdm stop关闭桌面
systemctl stop docker关闭docker服务
history查看当前用户的所有历史命令

4 高级命令

命令含义
chown -R root 目录change owner,改变拥有者为root(用户账号名)
chgrp -R root 目录change group,改变拥有组为root(用户账号名)
chmod -R 755 目录改变目录的权限,增加执行权限
**`cat /proc//cmdlinesed -e"s/\x00/ /g"; echo`**
tree -L 3 -d打印层级目录结构
【统计数量】【文件个数】【文件数量】

ls -lh -S查看文件大小,升序
**` ls -lgrep “^-”
**`ls -lRgrep “^-”
**`find . -name “*” -type fwc -l `**
*`find ./ -type dwc –lls -l
**`ls -lRgrep “^d”
【查找和排序】

set -euxo pipefail用于shell前,有利于脚本错误就退出
find . -iname "*.wav" > wav.flist查找所有wav音频并保存完整路径到wav.flist
grep -i "wav/train" wav.flist >trian.flist在wav.flist中过滤出来wav/train的完整路径
find . -name word_oov.counts -exec ls -lh {} \;查找文件,显示文件具体大小
**`find . -name words.txt -exec ls -lh {} ;sort -nr -k 5`**
export CUDA_VISIBLE_DEVICES=0,1设置GPU可见设备
dos2unix demo.txt将window换行符切换到linux格式
wc -l `find . -name "key_groupby.txt"` 查找文件,统计每个文件行数
wc -l `find . -name *text_seg_check.txt` 查找文件,统计每个文件行数
wc -l `find . -name .*pred.txt`查找文件,统计每个文件行数
find . -name "hzl*.zip"查找文件
**`find . -regex “.*origin.*wav”wc -l`**
tail -f `find . -name *seg_log_1.txt` 查找文件,查看文件后面5行
mv /*/*.wav data_wav将/*/*下的所有wav文件移动到顶部

5 查找命令

命令含义
**`find . -name “*”xargs grep “hello”`**
**`find . -name “*”xargs grep -v “hello”`**
**`find . -name “*” -type fxargs grep “hello”`**
grep -i "hao" wav.scpgrep查找文件(-i忽略大小写)
**`cat wav.scpgrep -i “hao”`**
**`find . -name “*” -type fxargs grep “hello”
grep -v 抢劫 /data1/text.txt从文本里查找【不包含】【抢劫】的行
**`find . -name “*.h”xargs egrep “include”
【高级查找和排序】

**`find . -name “*.a”xargs -i cp {} lib`**
**`find . -name “all_results”xargs grep “precision”
【批量删除】

**`find . -name “*.wav”xargs rm -rf`**
for x in *.wav; do rm $x; done
【批量移动】

**`find . -regextype “posix-egrep” -regex ".*0[0-9]{2}.wav.*100.wav"
【以什么开头查找】

grep -i "^Test" demo.log > demo.txt查找以Test开头的所有数据

5.1 awk高级语法

可参考一些语音awk命令解释日志 Awk 命令学习总结、AWk命令系列学习(linux shell)

命令含义
BEGIN{}BEGIN模块在awk处理任何输入文件行之前执行,用于修改变量
END{}END模块动作是在整个文件处理完毕之后被执行
awk ‘/li/ { print $0 }’ demo.txt查找并输出含li的每一行
$0表示整行
$1表示第1列
$2表示第2列
$NF表示最后一列值
NF表示总列数
print可以打印出换行,printf没有换行【printf("\n")=print ""】
awk中以#作为单行注释
awk ‘length($0) > 80’ demo.txt查找并输出长度大于80的每一行
awk ‘{ if (length($0) > max) max = length($0) }END { print max }’ demo.txt查找并输出长度最长的行
**`awk ‘{ if($0 ~ /京/) print $0; }’ a.txthead`**
awk /REG/{action}/REG/为正则表达式,可以将$0中,满足条件记录 送入到:action进行处理.
awk -F [ ,\t]对于使用多个分隔符,先用空格分割,再用其他分割符分割
awk -f demo.awk data.txt运行awk脚本,data.txt是处理对象
gsub( Eregex, Repl, [ Input ] )正则替换直接更改Input值 如gsub(/[0-9]+/,“!”,info) 替换为!,[Input]不填默认$0
截取字符串substr(info,4,10)
sub( Eregex, Repl, [ Input ] )同上直接更改Input值
match( String, Eregex)正则查找,找到返回位置(从1开始编号),未找到返回-1
RSTART 特殊变量设置为返回值
RLENGTH 特殊变量设置为匹配的字符串的长度
match("123456",/[0-9]+/)?"ok":"no found"
split( Input, Arr, [Eregex] )将 Input用指定正则分割为数组 Arr
(下标从1开始)Arr[1], Arr[2], . . ., Arr[n]
并返回 n 变量的值
若未给Eregex参数,用当前字段分隔符(FS特殊变量)来分割即split(info,A," ")
【运算】

awk '{printf("%s,",$1);for(i=2;i<=NF;i++) printf("%s ", $i);print $NF}}' awk 遍历
**`cat dataawk ‘BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print “Max=”, max}’`**
**`cat dataawk '{sub(/1/,“”); sub(/[ ]$/,“”); print $0}`**
【scp】

**`find folder -iname “*.wav”egrep “[0-9]{10}”
【vlookup】

# awk ' NR==FNR{seen[$1]=$2; next} { if ( !( $1 in seen)) print $1; } ' all.scp b.txt > no.txt判断数据【b.txt】 是在 【all.scp】中存在, 将不存在的打印
->awk BEGIN 和 END

【调用方式】awk -f file.awk data.txt

#!/bin/ awk -f
#文件命为file.awk
#运行前【不会读文本行】
BEGIN {
	math = 0
	english = 0
	computer = 0
	printf "NAME NO . MATH ENGLISH COMPUTER TOTAL\n"
	printf "----------------------------------------------------\n"
}
#运行中【一行一行载入文本】
{
	math+=$3
	english+=$4
	computer+=$5
	printf "%-6s %-6s %4d %8d %8d %8dln", $1, $2, $3, $4,$5, $3+$4+$5
}
#运行后【不会读文本行】
END {
	printf "----------------------------------------------------\n"
	printf "TOTAL :%10d %8d %8d n", math,english, computer
	printf "AVERAGE:%10.2f %8.2f %8.2fln", math/NR, english/NR, computer/NR
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
->按照第1列升序【sort-n按照数字,-r降序】并将第1列(指定列)后的空格换为csv的逗号【默认按照空格隔开】
cat demo.txt|sort -k 1 | \
awk '{printf("%s,",$1);for(i=2;i<=NF;i++) printf("%s ", $i);print $NF}}' > demo.txt 
  • 1
  • 2
->实现excel中的vlookup【假设a.txt和b.txt都是逗号分隔符】
# a.txt以csv的逗号隔开
北京,0004
南京,0003
东京,0006
# b.txt以csv的逗号隔开
1,北京
2,东京
3,临汾
4,南京
5,天津
awk -v path=a.txt -F ',' '
BEGIN { while((getline<path) >0){
    seen[$1]=$2; # 修改key,value
    #print $1,seen[$1] # 这是为了调试
}}
{#这里开始遍历b.txt
    for(i=1;i<=NF;i++) { printf("%s,",$i); }
    if($2 in seen) printf("%s", seen[$2]); # 修改key,value
    else printf("none");
    printf("\n");
}' b.txt | head -n 10

# 【新写法】NF==FNR用来判断当前是读入第一个文件【执行第一个{}】还是第二个文件【执行第二个{}】
awk -F ',' '
NR==FNR{seen[$1]=$2;next}
{
    for(i=1;i<=NF;i++) { printf("%s,",$i); }
    if($2 in seen) printf("%s", seen[$2]); else printf("none");
    printf("\n");
}' a.txt b.txt | head -n 10

1,北京,0004
2,东京,0006
3,临汾,none
4,南京,0003
5,天津,none
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
->实现excel中的vlookup【假设a.txt和b.txt都是空格分隔符】
# a.txt以空格隔开
北京 0004
南京 0003
东京 0006
# b.txt以空格隔开
1 北京
2 东京
3 临汾
4 南京
5 天津
awk 'NR==FNR{seen[$1]=$2;next}
{ 
    if($2 in seen) printf("%s %s", $0, seen[$2]);
    else printf("%s none", $0);
    printf("\n");
}' a.txt b.txt | head -n 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
->实现excel中的vlookup【假设a.txt和b.txt都是TAB分隔符】
# a.txt以TAB隔开
北京	0004
南京	0003
东京	0006
# b.txt以空格隔开
1	北京
2	东京
3	临汾
4	南京
5	天津
awk -F '\t' 'NR==FNR{seen[$1]=$2;next}
{ 
    if($2 in seen) printf("%s %s", $0, seen[$2]);
    else printf("%s none", $0);
    printf("\n");
}' a.txt b.txt | head -n 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

5.2 批量输出绝对路径下的所有音频并更名

# find 后面紧跟绝对路径才会输出绝对路径
wav_paths=`find /data1/data16k/aishell1/wav/dev -name "*.wav" | grep -i "dev"`
#echo $wav_paths
for x in ${wav_paths};do
    echo "do something"
    #将绝对路径$x如/data1/data16k/aishell1/wav/dev/S0736/BAC009S0736W0411.wav
    #文件名前面加上目录名(说话人)S0736-BAC009S0736W0411.wav
    #$(dirname $x)为/data1/data16k/aishell1/wav/dev/S0736
    #$(basename $(dirname $x))为S0736
    #$(basename $x)为BAC009S0736W0411.wav
    #更改后的文件名S0736后面加上后缀test
    mkdir -p $(dirname $x)test
    cp $x $(dirname $x)test/$(basename $(dirname $x))test-$(basename $x)
    echo $x;
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

5.3 批量移动和改文件夹产生新数据集

wav_paths=`find /data1/speechResource/data16k/DEMO16k_train -name "*.wav"|grep -i "wav"`
for x in ${wav_paths};do
    #$(dirname $x)为/data1/speechResource/data16k/DEMO16k_train/wav/HAO
	dir_root=$(dirname $x)
    base_name=$(basename $x)
    #HAO-demo.wav会替换为HAOtest-demo.wav
    base_name_new=`echo ${base_name//-/test-}`
    #DEMO16k_train/HAO会替换为DEMO16k_test/HAOtest
	target_root=`echo ${dir_root//train/test}test`
	mkdir -p ${target_root}
	cp $x ${target_root}/${base_name_new}
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

6 vim命令

命令含义
split -l 250000 /data1/wavs.scp -d -a 4 wavs_ 将wavs.scp按每25000行为一个小文件切割(以wavs_为前缀名)
:%s/vivian/sky/g在vim中执行:替换所有行中的vivian为sky
sed -i 's/原字符串/替换字符串/g' filename在命令行中执行:替换文件中的所有匹配项
:行号 跳转到指定行
:set nu 或 :set number 显示行号
【sed操作】

sed 's/原字符串/替换字符串/'只替换每行的第一个
sed 's/原字符串/替换字符串/g'替换全部(g参数)
sed -i 's/原字符串/替换字符串/g'直接修改原始文件,结果不是输出到管道流
sed 's/\/data2\/demo/\/data1\/hand/g'路径的/要加反斜杠\
【grep操作】(正则请用egrep,grep需要加\反转?{})

grep -i -n "a\{0,2\}" demo.txt-i忽略大小写,-n输出行号,\用于正则反转,grep无法直接支持正则
sed 's/原字符串/替换字符串/g'替换全部(g参数)
sed -i 's/原字符串/替换字符串/g'直接修改原始文件,结果不是输出到管道流
sed 's/\/data2\/demo/\/data1\/hand/g'路径的/要加反斜杠\
sed -i '1d' demo.txt
sed -i 'nd' demo.txt
sed -i '$d' demo.txt
删除第1行
删除第n行
删除最后一行
【切割文本文件】
sed -n ‘1,200000p’ demo.txt > demo_01.txt
sed -n ‘200001,400000p’ demo.txt > demo_02.txt
sed -n ‘400001,$p’ demo.txt > demo_03.txt
手动切割
split -l 200000 demo.txt按照每20w行自动切割(-b 10M按大小)
【egrep】
**` egrep "456789" test.txt`**
*:任意次
?:匹配0或1次
+:匹配至少1次
{m}:匹配m次
{m,n}:匹配m~n次
{m,}:匹配至少m次
{0,n}:匹配至多n次
egrep的次数匹配
^:行首
$:行尾
<,\b:词首
>,\b:词尾
egrep的位置锚定
.:任意单个字符
[ ]:指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
egrep的字符匹配
**`(?<=9598
**`(?<!9598
  • 【vim提示visual模式不能鼠标复制粘贴】
vim ~/.vimrc
# 增加如下内容
if has('mouse')
        set mouse-=a
endif
  • 1
  • 2
  • 3
  • 4
  • 5

7 解压缩命令

# linux下本身提供了zip和unzip程序
# ubuntu安装方法
sudo apt-get install p7zip-full unrar p7zip p7zip-rar rar unrar
# centos安装方法
yum install zip unzip p7zip p7zip-plugins
yum -y install rar unrar #需要配置源,自行搜索
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

【发现7z a压缩和解压命令太长了,可以用alias配置到~/.bashrc里,7zz(zip), 7zu(unzip)】
ubuntu(centos)环境变量设置
【配置以下快捷命令】
alias 7zz='7z a'
alias 7zx='7z x'

命令含义
【批量解压】

for x in *.tar.gz; do tar zxvf $x; done
unzip "*.zip" 或 unzip \*.zip
for x in *.zip; do unzip $x; done
【基本解压】

tar -zxvf ab.tar.gz解压到当前目录
tar -zxvf -C /home/cc解压到指定目录
unzip test.zip -d /root/test将test.zip解压到/root/test目录
7z x data.7z解压文件,需要安装p7zip-full p7zip
7z x data.7z -o./data解压文件 7zx data.7z
rar x test.rar解压文件,需要安装unrar库
tar -zcvf ab/tar.gz /home/aa将文件夹aa打包
zip -r test.zip test将test文件夹压缩为test.zip
7z a test.7z /root/anjos/*压缩文件 7zz test.7z /root/anjos/*
7z a Mytest.7z /root/anjos压缩文件 7zz Mytest.7z /root/anjos
gzip -c ali.1> alig.1.gz保留源文件式压缩,将alig.1文件压缩为alig.1.gz
gunzip -c ali.1.gz > ali.1保留源文件式解压,将ali.1.gz解压为ali.1
【加密压缩】

7z a -p test.7z /data会弹出让输加密密码, 7zx时会让输出解压密码
【快速压缩】

**`tar -cvf - folderpigz -k -p 40 > folder.tar.gz`**
tar --use-compress-program=pigz -cvpf XXX.tar.gz XXX快速压缩(yum install pigz)pigz官网
【快速解压】

**`pigz -dc -k folder.tar.gzpv
tar --use-compress-program=pigz -xvpf folder.tar.gz快速解压(yum install pigz)
time $cmd测速

8 传输文件命令

命令含义
scp -rvz --progerss /data/* admin@10.10.5.10:/data从当前主机位置复制文件到远程主机指定目录下
scp -P 11111 data.zip admin@10.10.5.10:/data【指定端口】从当前主机位置复制文件到远程主机指定目录下
rsync -avz --progress hzl kaldi@10.10.5.10:/data1将当前主机的hzl复制到远程主机指定目录下
rsync -avz --progress -e 'ssh -p 2288' hzl kaldi@10.10.5.10:/data1【指定端口】将当前主机的hzl复制到远程主机指定目录下

9 docker命令

【切记】安装好docker和nvidia-docker后要重启哦,不然启动的容器会报无法找到special GPU
Docker Hub
nvidia/cuda:10.2-cudnn7-devel-centos7 镜像地址

# 创建一个镜像
sudo docker run --gpus all --name anjos -d -it -p 5000:22 \
-v /data1:/data1 -v /data:/data \
nvidia/cuda:10.2-cudnn7-devel-centos7 /bin/bash
# 启动
sudo docker start anjos
# 进入(用id也可以)
sudo docker exec -it anjos bash
# 删除镜像
sudo docker rmi imageid
# 删除容器
sudo docker rm containerid
# 查看所有容器
sudo docker ps -a
# 查看所有已经成功启动的容器
sudo docker ps
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

10 时间相关

10.1 统计时间差(秒级)

start_time=`date +%s`
end_time=`date +%s`
cost_time=$[ end_time - start_time ]
echo "耗时 = $cost_time senconds"
  • 1
  • 2
  • 3
  • 4

10.2 日期遍历

#!bin/bash
beg='2020-01-01'
end='2020-06-30'
begTime=`date -d "$beg" +%s`
endTime=`date -d "$end" +%s`
echo "[beg end]=[$beg $end]=[${begTime} ${endTime}]"
while [[ $begTime -le $endTime ]]
do
	echo " current beg=${beg} end=${end}"
	cmd="doing something"
	#T+1更新到beg
	beg=`date -d "${beg} 1 day" +%Y-%m-%d`
	begTime=`date -d "${beg}" +%s`
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

11 tmux命令

可以很好的解决当ssh断开的时候程序死掉的问题

yum -y install tmux
  • 1

请见2.5 ubuntu(centos)环境变量设置,设置了快捷命令方式

命令简写含义
control+b 唤醒tmux命令前缀
tmux lstl列出所有会话
tmux new -s 1t 1创建名称为1的会话
tmux detachtd 1断开会话(后台运行),control+b,然后按d也可以
tmux a -t 1ta 1进入会话
tmux kill-session -t 1tk 1杀死会话,或者control+d直接杀死
control+b,再按s,进行会话切换会话切换
nohup p -u demo.py > nohup.txt 2>& 1 &后台运行

12 git命令

命令含义
git remote set-url origin https://10.10.40.244/whaozl.git仓库重新定义新链接
git config credential.helper store记住密码
git config [--global] user.name "[name]"设置提交的用户信息
git config [--global] user.email "[email address]"设置提交的用户信息
git config --list显示当前git配置
【提交】

git clone [url] 下载项目
git add [dir]或多个[file]添加文件或目录到缓存区,也可以添加.当前目录
git rm [dir]或多个[file]删除文件或目录到缓存区,也可以添加.当前目录
git commit -m [message]提交缓存区到仓库
【远程】

git pull [remote] [branch]取回远程仓库的变化,并与本地分支合并
git push [remote] [branch]上传本地指定分支到远程仓库
git remote -v显示所有远程仓库
git push [remote] --all推送所有分支到远程仓库
【重置】【谨慎操作,先备份】
git reset --hard重置到最近的commit
git clean -df清除没有被track的文件
【分支】

git branch -a列出所有分支(本地,远程,-r是远程,不加后缀是本地)
git branch [branch-name]新建分支
git checkout -b [branch]切换到指定分支
git push origin --delete [branch-name]删除远程分支
git branch [branch-name]新建分支
【标签】

git tag列出所有tag
git tag [tag-name] [commit]新建tag到当前commit或指定commit
git tag-d [tag]删除本地tag
git push origin :refs/tags/[tagName]删除远程tag
git push origin --tags提交所有tag到远程
git push origin [tag]提交指定tag到远程
【忽略】

!/node_modules/layer/在已忽略文件夹中不忽略其某个子文件夹
/node_modules/*忽略文件夹后面一定要加*,不然失效
!/node_modules/layer/layer.js在已忽略文件夹中不忽略其某个文件
【添加密钥】

ssh-agent bash解决Could not open a connection to your authentication agent
ssh-add /d/paper/.ssh/hihaozl_rsa添加密钥,在C:\Program Files\Git\etc\profile配置快速启动命令,这样不用每次都启动

【任何提交要先git add .后方可git commit -m 然后再git push】

git config --global user.name "anjos"
git config --global user.email whaozl@163.com
# 记住密码
git config credential.helper store

# 这里修改了Makefile这个文件
git add word/Makefile
git commit -m "修改Makefile"
git push
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

12.1 远程分支重新命名,更改远程分支head指针

1 【查看所有分支】
git branch -a

2【重新命名】本地分支(没有推送到远程的)

a:【重命名本地分支名】(远程分支对应的本地分支名)
git branch -m oldName newName

b: 【删除远程分支】
git push --delete origin oldName

c:上传新命名的本地分支
git push origin newName

d:把修改后的本地分支与远程分支关联
git branch --set-upstream-to origin/newName
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
在这里插入图片描述

13 A机器和B机器ssh免密设置

  • Step1: A机器操作——产生公钥和私钥
    一直敲回车即可(切记无需设置什么-t rsa -C ‘abc@qq.com’),然后在~/.ssh下生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)文件
ssh-keygen
  • 1
  • Step2: A机器操作——复制公钥到B机器
# 也可以将10.10.10.5配置到/etc/hosts中起一个别名
ssh-copy-id kaldi@10.10.10.5
# 指定端口指定公钥方式
ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 22222 kaldi@10.10.10.5'
  • 1
  • 2
  • 3
  • 4
  • Step3:A机器操作——免密登录B机器
# 指定端口方式(如果默认无需加-p)
ssh zhangming@10.10.10.5 -p 22222
  • 1
  • 2
  • 【警告】A机器免密登录B机器——仍需密码
#查B机器日志原因:Authentication refused:bad ownership or modes for file
tail /var/log/secure -n 20
#【原因】ssh禁止home目录和~/.ssh目录对组有写权限
chmod -R g-w /home/kaldi
chmod -R 700 /home/kaldi/.ssh
chmod -R 600 /home/kaldi/.ssh/authorized_keys
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

14 gcc相关

# 编译、链接两步
g++ -I./haolib -std=c++11 -g -c hao-test.cc -o hao-test.o
g++ hao-test.o -L./haolib -lhao -lpthread -o hao-test

# 编译、链接一步
g++ -std=c++11 -g -o hao-test hao-test.cc -L./haolib -lhao -lpthread
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

20 java

(1) java8 steam Map值转化

Map<String, Integer> result = map.entrySet().stream()
                  .collect( 
                          Collectors.toMap(Map.Entry::getKey,
                             entry -> entry.getValue().size())));
  • 1
  • 2
  • 3
  • 4

21 python

Reference

linux使用awk实现excel中的vlookup行数匹配效果
AWK高级编程 转载
Linux Shell 高级编程技巧1----深入讨论(awk、<<)
shell 强大的awk
Linux Shell常用技巧(五) awk编程
awk之NR==FNR问题


  1. ↩︎

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/879417
推荐阅读
相关标签
  

闽ICP备14008679号