作者:matrix
发布时间:2021-10-07
分类:command Linux
线上代码有时候会需要部署到内网或者防火墙后面的本地服务器环境,这个时候发布代码或者调试都会造成不便。
使用环境
测试环境为 mac vscode
windows版本的操作相差不大。
vscode作为ide编辑器,也作为文件管理工具来上传下载服务器文件。需要安装Remote - SSH插件完成这些功能。
目的
本地环境可以直接编辑操作远程服务器中的文件,当然这非常危险和忌讳!
修改文件前你需要做备份然后灾难还原 😀
路径也很清晰,通过中转来访问:
localhost -> jump -> target-service
本地电脑连接中转服务器,再通过中转服务器连接后端的target-service完成操作。
配置ssh
插件安装之后按F1
键打开命令行,找到remote-ssh相关文件配置命令。

或者可以直接修改~/.ssh/config
文件
配置
# 中转服务器
Host jump-box
HostName 118.X.X.11
User root
# IdentityFile ~/.ssh/jumpbox
# 需要连接的目标服务器 即后端的非暴露地址
# Target machine with private IP address
Host target-box
HostName 192.168.1.11
User root
# IdentityFile ~/.ssh/target
ProxyCommand ssh -q -W %h:%p jump-box
说明:
如果服务器有设置密钥登录,IdentityFile
参数用于设置私钥文件地址。
连接
配置完成之后,点击左侧的remote - ssh
插件的选项页面,就能看到配置的服务器。包含jump-box
,target-box
。

之后打开连接,点击右侧的文件夹📁图标打开新窗口,vscode会进行连接请求。若是密码登录请求则会让你输入密码,依次连接jump-box
,target-box
服务器,且最终停留在target-box服务器上,可以在线编辑操作非常方便。
vscode连接成功后,左下角会有绿色连接提示。
文件操作
和其他编辑器的基本功能都是一样,代码文件直接编辑保存,之后会自动上传到服务器。
如果想上传文件需要在vscode中找到要上传的文件或目录,点击右键复制。之后服务器的vscode窗口中点击右键粘贴。

参考:
https://code.visualstudio.com/blogs/2019/10/03/remote-ssh-tips-and-tricks
http://kb.ictbanking.net/article.php?id=639
https://code.visualstudio.com/docs/remote/ssh
https://kenzoluo.github.io/2020/03/13/VScode%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E7%9A%84%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/
https://xirikm.net/2019/619-1
作者:matrix
发布时间:2020-10-28
分类:command Linux
mac上使用ssh命令隧道转发访问内网会出现经常断连的情况,每次都需要重启窗口执行命令,没有windows上xshell上隧道设置来的简单好用。当然,后面我发现Termius.app支持端口转发后,依然觉得autossh的方式香~
换用autossh来代替ssh,只需要添加-M参数用于设定监听的本地端口,本地不被占用的都可以。
autossh安装
autossh就用来解决断线重连的问题。
测试环境为macos
autossh安装:brew install autossh
要自动免密码登录目前知道两个方法:
方法1 密钥登录
无密码密钥登录,配合autossh可以稳定使用。
方法2 autossh+expect
这里主要介绍自动输入密码的方式,可以解决各种场景的问题。
使用autossh+expect
的方式用脚本操作,支持ssh登录密码、密钥密码都可配置输入,所以这个是真正能解决很多自动化处理的问题。
autossh.sh文件
#!/bin/bash
# macos下测试使用
# 执行之后在窗口中ctrl+c终止连接进程
PASS='XXXXX' #ssh登录密码
CMD=$@
BASE_CMD='/usr/local/bin/autossh' # autossh 执行路径
trap 'ps aux|grep "$BASE_CMD $CMD" |grep -v grep | awk "{print \$2}" | xargs kill &>/dev/null && echo "stop done.\n"' 2 # ctrl + c 按键后执行命令终止子进程
VAR=$(expect -c "
spawn $BASE_CMD $CMD
match_max 100000;
while (1) {
# 匹配关键字password,之后发送密码
expect \"*?password:*\" {send -- \"$PASS\r\"}
# 下面的方式执行失败
#set connectedFlag 0;
# set timeout 60;
# expect {
# '?sh: Error*'
# { puts 'CONNECTION_ERROR'; exit; }
# '*yes/no*'
# { send 'yes\r'; exp_continue; }
# '*?assword:*' {
# # send '$PASS\r'; set timeout 4;
# send -- \"$PASS\r\"
# expect '*?assword:*' { puts 'WRONG_PASSWORD'; exit; }
# set connectedFlag 1;
# }
# # if no password
# '*~*'
# { send 'echo hello\r'; set connectedFlag 1; }
# }
}
")
echo "==============="
echo "$VAR"
tail -f /dev/null # 前台挂起主进程
注意:
密码中出现脚本元字符$
需要转义处理\$
如果ssh命令指定密钥登录提示输入密码passphrase,一样的操作需要匹配关键字passphrase
然后发送密码和回车符即可。
脚本中自动输入密码的实现方式也有其他,比如sshpass
使用
bash ./autossh.sh -M 1234 -p 22 -L 127.0.0.1:8088:182.18.1.2:8088 root@SERVER_HOST
说明:
-M 1234 :autossh的参数用于监听ssh是否断线。如果启动多个隧道命令,此端口不能重复使用,随意更换即可。
127.0.0.1:8088:182.18.1.2:8088,连接服务器后将服务器182.18.1.2:8088转发到本地127.0.0.1:8088
ctrl + c 按键终止
参考:
http://www.ouvps.com/?p=790
http://www.ouvps.com/?p=792
autossh参数参考:
http://www.freeoa.net/osuport/netmanage/autossh-useage-refer_2831.html
http://www.freeoa.net/osuport/netmanage/ssh-automatic-login-config_285.html
https://cloud.tencent.com/developer/ask/89349
https://blog.csdn.net/csdn_changsha/article/details/103631673
https://blog.mimvp.com/article/10072.html
https://www.cnblogs.com/hongdada/p/13711688.html
作者:matrix
发布时间:2019-11-06
分类:command Linux

awk用于unix的文本处理,经常出现和使用。读取每一行文本进行格式化输出。
测试环境 Macos
awk简单操作
默认使用空格进行字符串分割
echo '1 2 3' |awk '{print $0}' # 1 2 3
echo '1 2 3' |awk '{print $3}' # 3
echo -e "1\n2\n3" |awk '/[23]/' #正则条件查找
echo -e "abc\n1a2\n33" |awk '/a/' #正则条件查找字母a
awk '{print $3}' file_path #指定文件
ls -alh|awk '/^d/' #输出目录
# drwxr-xr-x 3 panc staff 96B 7 16 23:32 pt-program
echo '1-2-3' |awk -F '-' '{print $2}' #指定分割符号 - 输出 2
$0
表示当前行
$1
表示第一个分割的字段
awk命令后面跟操作的语句字符串''
包裹,每个语句段落用花括号{}
包裹,语句段落中用分号;
分隔语句。
echo -e '1 2 3\n4 5 6' |awk '{print $0;print("-end-")}'
echo -e '1 2 3\n4 5 6' |awk '{print $0;}{print("-end-")}'
#上面输出结果相同
#1 2 3
#-end-
#4 5 6
#-end-
echo -e '1 2 3\n4 5 6' |awk '{print $1,$3}'
#输出
#1 3
#4 6
使用内置变量
NF
表示当前行有多少个分割字段
echo '1-2-3' |awk -F '-' '{print $(NF)}' # 3 获取最后一个分割字符
echo '1-2-3' |awk -F '-' '{print $(NF-1)}' # 2 获取倒数第二个分割字符
其他变量
NR
表示当前处理的是第几行
BEGIN预处理
在执行处理之前提前设置一些信息
比如之前的-F
参数可以使用BEGIN来设置
echo -e "a-b-c" |awk 'BEGIN{FS="-"} /^a/{print $0}' #设置分割符为-
echo -e "a-b-c" |awk 'BEGIN{FS="-";print "this title::"} {print $0}' #设置输出的首行标题
echo -e "1122\n3344" |awk 'BEGIN{FIELDWIDTHS="2 2";} {print $1,$2}' #固定字段宽度 (mac os中测试失败)
#输出
#11 22
#33 44
内置变量
FS字段分隔符
FIELDWIDTHS指定字段宽度
ORS指定输出的行分隔符
if逻辑处理
awk还可以支持函数和复杂的逻辑处理,完全可以在里面定义函数 调用 判断
例子:
显示红色error
绿色seccess
白色log
echo -e 'success\nerror\nsuccess\nloginfo' | awk \
'{
if (/error/) {
print "\033[91m" $0 "\033[0m"
} else if (/success/){
print "\033[32m" $0 "\033[0m";
}else{
print $0
}
next;
}'
上面语句有换行的段落方便阅览。一行简写也是可以
例子:
判断值大小
echo -e '12\n14\n232\n90' |awk '{if($0>=90) print $0}' #输出>=90的数据
#232
#90
for循环
使用for循环计算求和
echo '5' |awk '{ \
total = 0
for (var = 1; var < $0; var++)
{
total += var
}
print "total:",total
}'
Built-In Functions函数使用
awk中语义中支持函数的使用
echo -e 'H htjim\nDot\ncom\n009' |awk '{print toupper($0)}'#转换为大写
内置函数
toupper 转换为大写
tolower 转换为小写
rand 随机数
其他函数参考手册:
https://www.gnu.org/software/gawk/manual/html_node/Built_002din.html#Built_002din
自定义函数
自定义彩色文字输出函数awk内部执行调用
echo -e 'success\nerror\nsuccess\nloginfo' | awk \
'
function red(s) {
printf "\033[1;31m" s "\033[0m "
}
function green(s) {
printf "\033[1;32m" s "\033[0m "
}
function blue(s) {
printf "\033[1;34m" s "\033[0m "
}
{
if (/error/) {
print red($0)
} else if (/success/){
print green($0)
}else{
print blue($0)
}
}'
其他例子
结合tail -f log
显示红色报错提示
tail -f test.log | awk '{
if (/success/) {
print "\033[91m" $0 "\033[0m"
} else {
print "\033[32m" $0 "\033[0m";
}
next;
}';
next
用于直接跳到下一行文本进行执行 有点continue
的意思
参考:
https://likegeeks.com/awk-command/
http://www.ruanyifeng.com/blog/2018/11/awk.html
https://www.cnblogs.com/Linuxprobe/p/5745381.html
作者:matrix
发布时间:2019-10-19
分类:command Linux
今天看到2>&1
和>/dev/null 2>&1
有点相似但又完全不同,一直都是CV方式来使用 仅知道后者用于禁止所有输出信息。
简单整理笔记
基本操作符号和数字描述符号
>
用于输出覆盖内容,>>
用于输出追加内容
<
用于输入,<<
用于设置输入结束符号
<<end
:表示当输入end
的时候结束输入操作
/dev/null
表示Linux中的空设备,也当是数据黑洞,无限吞噬。
类型 |
文件描述符 |
默认情况 |
对应文件句柄位置 |
标准输入(standard input) |
0 |
从键盘获得输入 |
/proc/self/fd/0 |
标准输出(standard output) |
1 |
输出到屏幕(即控制台) |
/proc/self/fd/1 |
错误输出(error output) |
2 |
输出到屏幕(即控制台) |
/proc/self/fd/2 |
输出内容重定向
command >/dev/null 2>&1
这样执行就不会有任何信息显示和保存
补充命令之后:
command 1>/dev/null 2>&1
说明:
>/dev/null
等同于1>/dev/null
意思是 当前控制台的信息输出到空设备。
2>&1
使用&
符号将2重定向绑定到1,意思是将错误信息指向控制台,而这个时候的控制台又指向了空设备。
如果去掉&
符号的2>1
会导致错误信息输出到文件名为1
里面。
linux执行命令时会按顺序从左到右读取来确定0,1,2这三个输入输出的位置。
command 2>&1 >/dev/null
把两个重定向的位置写反之后就是完全不同的意思。
等同于command 2>&1 1>/dev/null
linux执行命令到2>&1
会将错误输出指向1即控制台,到这里就会完成错误输出(2)的位置确定。也就不会更改了。
执行到1>/dev/null
会将标准输出(1)指向空设备,而此时的错误输出(2)已经确定位置了就不会发生更改。
所以最终错误信息显示到控制台,正常信息不会看到。
参考:
https://blog.csdn.net/zhaominpro/article/details/82630528
https://www.cnblogs.com/ultranms/p/9353157.html
https://blog.csdn.net/wz947324/article/details/80005224
作者:matrix
发布时间:2019-09-20
分类:Linux
线上centos服务器有很长时间没有连,今天安装证书无故失败,数据库也不能连接。。。一系列的问题
查找占用情况
$ df -h #查看磁盘占用情况
$ du -h --max-depth=1 ./ #查看当前目录的文件/目录占用大小
然后就是手动一层一层的找到最大的那个目录。 😂
最后找到一个隐藏杀手:/var/spool/postfix/maildrop/
。这个目录下面存在3000W个小文件,占用33GB。主要它还不是tmp之类的目录,没遇见过真是很难查找。
究其原因是crontab任务日志发送到所有者的邮箱导致的问题
解决方案
编辑crontab
顶部首行写上 MAILTO=""
,这样就会把邮箱信息赋空,也就不会发送了。

如果有非root用户的crontab任务也需要在顶部声明MAILTO=""
.
默认crontab -e
是编辑的当前登录的用户定时任务配置,若是以root
登录则为/var/spool/cron/root
同理www
用户的定时任务文件就是/var/spool/cron/www
其次就是每条cron任务的最后把输出信息赋空 >/dev/null 2>&1
* * * * * /root/do.sh >/dev/null 2>&1
p.s.
记下以后排查的顺序
- web程序日志
- nginx/apache日志
- tmp
- crontab 错误邮件发送日志
/var/spool/postfix/maildrop
- /var/log 类型的log目录
/var/log/journal 启动目录的文件很多
...
参考:
https://www.jianshu.com/p/a0aa43707476
https://my.oschina.net/qimhkaiyuan/blog/1631028
作者:matrix
发布时间:2019-09-18
分类:Linux
环境:
阿里云centos + dnspod.cn
acme.sh项目:https://github.com/Neilpang/acme.sh
安装
$ curl https://get.acme.sh | sh

出现Install success!
安装成功。
dns验证方式-获取域名dns token
这里使用域名解析服务商的token来进行域名拥有验证
在dnspod.cn上操作申请获取ID和token。
ssh执行命令设置变量,便于后面脚本读取。
$ export DP_Id="000000"
$ export DP_Key="26****************************ed"
阿里云dns:
$ export Ali_Id="000000"
$ export Ali_Key="26****************************ed"
阿里云dns获取api和key:https://usercenter.console.aliyun.com/#/manage/ak 进去申请AccessKey ID与Access Key Secret就好。
其他域名解析商的api token操作:
https://github.com/Neilpang/acme.sh/wiki/dnsapi
申请泛域名证书
为域名hhtjim.com
申请证书。
$ source .bashrc #执行资源更新 确保acme.sh别名可用
$ acme.sh --issue --dns dns_dp -d hhtjim.com -d *.hhtjim.com
说明:
dns_dp 为dnspod ,如果是阿里云dns则为 dns_ali
前面-d参数指定根域名,后面-d指定子级泛域名
.hhtjim.com的证书只能支持通配符当前级别的域名,也就是xxx.hhtjim.com
如果要三级子域名就需要单独申请:.xxx.hhtjim.com,参数为-d xxx.hhtjim.com -d *.xxx.hhtjim.com
执行之后等待几分钟出现绿色文字提示key,cer证书所在位置就酸完成了。

The domain key is here: /root/.acme.sh/hhtjim.com/hhtjim.com.key
Your cert is in /root/.acme.sh/hhtjim.com/hhtjim.com.cer
Your cert key is in /root/.acme.sh/hhtjim.com/hhtjim.com.key
The intermediate CA cert is in /root/.acme.sh/hhtjim.com/ca.cer
And the full chain certs is there: /root/.acme.sh/hhtjim.com/fullchain.cer
证书生成完成,使用的时候把证书移动到nginx配置相关目录。
nginx证书使用
server {
listen 443;
server_name www.hhtjim.com;
root /htdocs/www.hhtjim.com;
index index.html index.htm index.php;
ssl on;
ssl_certificate /certificate_file_PATH/hhtjim.com/fullchain.cer;
ssl_certificate_key /certificate_file_PATH/hhtjim.com/hhtjim.com.key;
...
ssl_certificate和ssl_certificate_key对应fullchain.cer和域名.key文件即可。
以后的所有子域名都可以使用这个路径的证书。
证书更新
脚本会自行写入crontab
36 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
每天定时检测过期再更新。
参考:
https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E
https://lnmp.org/faq/letsencrypt-wildcard-ssl.html
https://juejin.im/post/5b6542ed51882519d3468d6d
作者:matrix
发布时间:2019-07-26
分类:Linux
现在应要求需要再服务器端环境安装matlab以进行更好测试达到理想之效果。
测试环境:本地客户端macOS,服务器centOS 需要20GB空余
下载matlab
https://pan.baidu.com/s/1wijZCXIWsNXgz0yYYBXHnQ#提取e8b2
刚开始用mac三方百度客户端进行下载,没有校验文件md5和基本信息就直接对z01,z02进行解压拿到iso镜像文件挂载没问题。浪费时间一上午进行安装出现输入输出错误原因就是iso不完整。
文件哈希:
$ md5sum R2017b_glnxa64.iso
0bbe62e90ba9aaf357c72ef93e81753c R2017b_glnxa64.iso
若是本地上传到服务器最好使用rsync
附加参数-rP --append
来进行断点续传,要不然中断之后重新上传简直。。。
开始安装
需要系统有20GB
的剩余空间(包含iso文件,mnt挂载空间,程序安装空间)才可安装,我已经尝试过很多遍了😂😂😂
- 挂载镜像文件到
/mnt
$ mount -t iso9660 -o loop R2017b_glnxa64.iso文件路径 /mnt
如果挂载有问题可以考虑直接对iso进行解压缩:
$ sudo yum install p7zip p7zip-plugins
$ 7z x ubuntu-16.10-server-amd64.iso
- 执行安装
若之前安装中断或者失败需要清空之前的安装数据,否则会报错。
删除之前安装的文件:rm -rf /usr/local/MATLAB
还有安装matlab之前java环境不是必须安装,matlab包里面会自带jre。
$ cd /mnt
$ sudo ./install -fileInstallationKey 09806-07443-53955-64350-21751-41297 -agreeToLicense yes -mode silent -activationPropertiesFile MATLABR2017b_Linux_Crack目录中的license_standalone.lic文件路径
说明:
license_standalone.lic文件路径需自行替换
09806-07443-53955-64350-21751-41297为install_key.txt
中的授权码
执行之后就等待安装,若显示要继续 请点击″是″。 要返回″否″。是否仍要继续?
这些也不用管。
最终等待界面出现End - Successful.Finished
即表示安装完成。
破解
安装完成之后执行程序/usr/local/MATLAB/R2017b/bin/matlab
显示未激活状态
错误: 激活无法继续。您可能需要执行以下任一操作:
1.设置 X11 显示,然后重新启动激活过程
2.使用静默激活功能
3.使用许可证中心激活
执行激活程序/usr/local/MATLAB/R2017b/bin/activate_matlab.sh -propertiesFile /usr/local/MATLAB/R2017b/activate.ini
也没有用。
最后拷贝破解文件解决:
进入破解文件license_standalone.lic,libmwservices.so 所在目录
sudo cp license_standalone.lic /usr/local/MATLAB/R2017b/licenses/
sudo cp libmwservices.so /usr/local/MATLAB/R2017b/bin/glnxa64/
启动matlab
设置环境变量,避免每次执行/usr/local/MATLAB/R2017b/bin/matlab
很麻烦
$ echo 'export PATH=/usr/local/MATLAB/R2017b/bin:$PATH' >> /etc/profile
$ source /etc/profile
以后输入matlab
就可以启动
卸载之前的iso:umount /mnt
若无法卸载参考https://www.cnblogs.com/sisimi/p/7700309.html来强制推出操作。
后台执行.m脚本
安装服务器版本的最终目的其实就是让其后台运行,但是后面测试的时候发现了很多坑。
比如手动执行nohup matlab -nojvm -nodesktop -nodisplay -nosplash -r test.m > ./logfile &
这样会导致日志输出结果出现大量错误warning的提示,我是直接用supervisord
来守护进程,避免手动执行nohup
操作。
如果你用nohup matlab -nodesktop -nosplash -nodisplay < test.m >logfile
这种<
形式来调用脚本那就要小心了,因为会出现更多的错误,像Undefined variable com or class com.mathworks.timer.TimerTask
都是小事情,然而我这里是提示语法逻辑错误,感觉是脚本文件加载的时候出现字符问题,原因有很多,我这里没有具体进一步测试。我建议还是不要用<
这种形式来执行.m脚本。
参考:https://blog.csdn.net/sethinking/article/details/88375995
还有一个就是执行matlab脚本目录的问题,如果像这样直接-r 'run("/root/test.m");'
执行入口脚本test.m很有可能会找不到其中依赖该目录下的自定义函数。建议-r 'cd /root;test;'
这种形式来调用。
最终这样调用:
$ matlab -nodesktop -nodisplay -nosplash -r 'cd /home/script/;main;' >> /root/matlab_log_`date +"%Y%m%d"`.log
说明:
/home/script/main.m为脚本入口
这里没有使用-nojvm参数,也没有进一步测试我的脚本依赖是否可以不启动。
>> /root/matlab_log_
date +"%Y%m%d".log
为输出日志,名称为日期年月日
报错整理
./install:行269: /bin/glnxa64/install_unix: 输入/输出错误
确保iso镜像文件的完整性,需要知道iso的文件如果缺失一部分也是可以挂载的。😂
建议在Windows端用winrar点击R2017b_glnxa64.zip
执行解压拿到R2017b_glnxa64.iso
-
archive is not a ZIP archive
那就是空间不足的问题。
-
若非首次安装出现问题确保把之前的安装的文件都清空了
删除之前安装的文件:rm -rf /usr/local/MATLAB
-
出现libXt.so。。。Creating local MVM错误
MATLAB is selecting SOFTWARE OPENGL rendering.
Unrecognized MATLAB option "version".
Fatal Internal Error: Unexpected exception: 'N5boost16exception_detail10clone_implINS0_39current_exception_std_exception_wrapperISt13runtime_errorEEEE: Bundle#2 start failed: libXt.so.6: 无法打开共享对象文件: 没有那个文件或目录' in createMVMAndCallParser phase 'Creating local MVM'
这个问题今天上午才搞定,期间安装了很多包都不起作用。MD!!!
最终执行安装yum install libXt.x86_64
才解决。
中间我也查看过libXt.so.6这个鬼玩意的确是有的,后面看到因为matlab都需要32位和64位的包,所以这鬼玩意一直报错。
也有可能再期间安装的一部分包是依赖必须的:
$ yum list installed |grep libX
libX11.i686 1.6.5-2.el7 @base
libX11.x86_64 1.6.5-2.el7 @base
libX11-common.noarch 1.6.5-2.el7 @base
libX11-devel.x86_64 1.6.5-2.el7 @base
libXau.i686 1.0.8-2.1.el7 @base
libXau.x86_64 1.0.8-2.1.el7 @base
libXau-devel.x86_64 1.0.8-2.1.el7 @base
libXdamage.x86_64 1.1.4-4.1.el7 @base
libXdamage-devel.x86_64 1.1.4-4.1.el7 @base
libXdmcp.i686 1.1.2-6.el7 @base
libXext.i686 1.3.3-3.el7 @base
libXext.x86_64 1.3.3-3.el7 @base
libXext-devel.x86_64 1.3.3-3.el7 @base
libXfixes.x86_64 5.0.3-1.el7 @base
libXfixes-devel.x86_64 5.0.3-1.el7 @base
libXft.x86_64 2.3.2-2.el7 @base
libXft-devel.x86_64 2.3.2-2.el7 @base
libXi.i686 1.7.9-1.el7 @base
libXi.x86_64 1.7.9-1.el7 @base
libXmu.i686 1.1.2-2.el7 @base
libXp.i686 1.0.2-2.1.el7 @base
libXp.x86_64 1.0.2-2.1.el7 @base
libXrender.x86_64 0.9.10-1.el7 @base
libXrender-devel.x86_64 0.9.10-1.el7 @base
libXt.i686 1.1.5-3.el7 @base
libXt.x86_64 1.1.5-3.el7 @base
libXtst.i686 1.2.3-1.el7 @base
libXtst.x86_64 1.2.3-1.el7 @base
libXxf86vm.x86_64 1.1.4-1.el7 @base
libXxf86vm-devel.x86_64 1.1.4-1.el7 @base
这里整理一份本机已安装所有libX
开头的包,自行取舍。
-
大量报错信息 Bad file descriptor 和 Warning: "Error reading character from command line"
参照上面后台执行.m脚本
修改命令行调用的方式,去除nohup。使用supervisord
工具来守护进程,亦或者不要输出日志。
参考:
https://blog.csdn.net/qq_32892383/article/details/79670871
https://ww2.mathworks.cn/matlabcentral/answers/131366-why-do-i-see-i-o-errors-when-installing-matlab-using-the-iso-image
https://ww2.mathworks.cn/matlabcentral/answers/98745-why-do-i-receive-an-error-message-archive-is-not-a-zip-archive-during-matlab-installation-on-Linux
https://www.jianshu.com/p/a10397fcfb1d
https://blog.csdn.net/Xiao_Song_PKU/article/details/82700228
https://www.cnblogs.com/yaoyaoliu/p/6798463.html
https://linux.cn/article-7992-1.html
https://blog.csdn.net/qq_39187538/article/details/88676283
https://www.cnblogs.com/sisimi/p/7700309.html
https://www.centos.org/forums/viewtopic.php?t=31436
https://ww2.mathworks.cn/matlabcentral/answers/63751-how-do-i-get-matlab-running-in-batch-mode-to-only-output-the-results-of-disp-fprintf-etc-and-no
https://ww2.mathworks.cn/matlabcentral/answers/66793-problem-running-matlab-script-to-background
作者:matrix
发布时间:2019-06-18
分类:Linux
测试环境:ubuntu
客户端连接远程ssh/git服务的时候可以在本地配置SSH config
,用于简化多参数使用操作或者修改默认的ssh命令使用的配置。
我这里需要使用gitee的ssh密钥来管理远程仓库代码,方便以后可以免密码提交/更新代码。然而本地已经存在一个~/.ssh/id_rsa
私钥,且还设置了用来保护私钥的passphrase密码。如果用之前的私钥连接gitee会造成每次都要求输入passphrase密码,亦或不能单独区分使用。
这个问题可以使用配置文件~/.ssh/config
来解决
新建新的密钥对
$ ssh-keygen -t rsa -C "user"
新建的时候设置新密钥的保存路径,避免把之前的覆盖掉
配置
config文件默认是不存在的,直接新建即可
$ vi ~/.ssh/config
使用下面配置:
# gitee账户
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rrsa_gitee
说明:
Host类型昵称,可以简化登录的输入地址,比如Host ccl
,则可以用ssh ccl
直接连接
HostName表示连接的远程主机地址
IdentityFile表示指定私钥文件路径
还有其他参数
Port指定端口
User指定用户名
这种配置可以让ssh来根据远程host地址来使用不同的私钥,设置了User还可以让ssh工具不同用户名来读取配置,也可以使用相同host地址哟~
比如都是github的不同账户,类似配置:
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/user1_rsa
User user1
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/user2_rsa
User user2
参考:
https://gitee.com/help/articles/4229
http://vra.github.io/2017/07/09/ssh-config/
https://gitee.com/help/articles/4181
https://daemon369.github.io/ssh/2015/03/21/using-ssh-config-file
PEACE~
- 1
- 2
- 3