这篇文档主要记录一些在Ubuntu使用过程中遇到的问题,然后就是各种google后的解决方案~
20170304 - Matlab中文显示乱码
Q:在英文环境下安装的Matlab,打开包含有中文字符的文件时将乱码显示
A:由于linux下的Matlab是用Java编写的,因此切入点就是Java的中文显示
确定Matlab的JRE目录位置
/matlab/sys/java/jre/glnx86/jre 请根据自己的安装目录和版本确定JRE的目录;
$ cd /(matlab 目录)/sys/java/jre/glnx86/jre/lib/fonts/;
建立目录fallback: $ mkdir fallback,可能需要超级用户权限执行
把字体复制或链接到fallback目录
linux下的系统字体位于/usr/share/fonts文件夹下,可将相应的中文字体复制到fallback文件夹下
- sudo cp xxx.ttc path/to/matlab/fonts/fallback/
进入fallback目录,执行 mkfontscale 命令;
将上一步生成的文件添加到 lib/fonts/fonts.dir文件中,可用以下命令完成,当然也可以用编辑器复制粘贴:
为了使fonts.dir可写,需要用chmod
$ sudo chmod 766 fonts.dir
$ cat fallback/fonts.scale >> fonts.dir (注意fonts.dir应该设为可写)
把fallback下的字体加上可读属性:$ chmod a+r fallback/*
至此Matlab的Java环境中文支持安装完了,接下来配置Matlab;
进入Matlab,选择 菜单 File>>Preferences>>Fonts ,text fonts去掉Use system default,选择文泉驿字体一种就行了;
如果没有相应的字体,请把fallback下的字体加上可读属性:$ chmod a+r fallback/*
另:文泉驿字体安装
|
|
安装完成后可以去系统字体文件夹中的truetype文件夹中查找相应的ttc文件
参考:
20170304 - Gedit中文显示乱码
Q:在windows下编写的文件放到Ubuntu中无法用gedit正确显示中文
A:主要还是编码的问题,增加gedit的编码方式
代码解决方式
1gsettings set org.gnome.gedit.preferences.encodings candidate-encodings "['GB18030','UTF-8','CURRENT','ISO-8859-15','UTF-16']"图形界面解决方式
终端:
dconf-editor
若是运行说找不到该命令,则需要安装运行
sudo apt-get install dconf-tools
展开/org/gnome/gedit/preferences/encodings
在candidate-encodings中加入
'GB18030','UTF-8','CURRENT','ISO-8859-15','UTF-16'
参考:
20170307 - Linux下应用程序的安装
Q:Linux系统有许多程序不像windows中那样,双击运行就可以安装,需要自己输入命令执行安装过程
A:除了*.deb
的安装包可以直接双击安装外,还要二进制形式的安装和源码形式的安装。
以二进制形式安装:
以二进制方式发布的程序,安装相对简单,一般只要解压缩后设置好环境变量即可,以Gaussian09为例:
将压缩包复制到某个地方,如/opt
解压缩:
tar -xvf gaussian09.tar.gz
设置环境变量:修改~/.bashrc,添加:
12345##Add␣for␣g09export g09root="/opt"export GAUSS_SCRDIR="/tmp". $g09root/g09/bsd/g09.profile##End␣for␣g09刷新环境设置:
. ˜/.bashrc
或重新登录下。
以源码形式安装:
源代码发布的程序安装相对复杂,需了解所采用的编译环境,并对配置等做相应修改(主要修改编译命令、库、头文件等编译参数):
- 查看主页等帮助
- 解压缩:
tar -xvf appsrc.tar.gz
- 进入解压缩的目录查看是否有README、INSTALL和doc等类似文件和目录,有的话先查看
- 有configure文件的话,可以
./confugure -h
看看帮助及选项 - 生成配置:
./confugure [OPTION]... [VAR=VALUE]
- 修改生成的Makefile等文件
- 编译:make
- 安装:make install
注意:
每种软件的具体安装步骤不一定相同,务必要看对应说明
一些在configure、Makefile中常见变量:
1234567891011121314--prefix:安装到的目录前缀CC:编译C源文件的编译器命令CLAGS:C程序编译参数CPP:预处理参数CXX:编译C++源文件的编译器命令CXXFLAGS:C++程序编译参数F77:编译Fortran77源文件的编译器命令F90:编译Fortran90及以后源文件的编译器命令FC:编译Fortran源文件的编译器命令FFLAGS:Fortran编译参数INCLUDE:头文件参数LIB:库文件参数LINK:链接参数OFLAG:优化参数
参考:
20170307 - Linux Shell中的点命令与source命令
Q:Linux中的点命令是什么,与source命令又是什么关系,它们与其他的可执行程序之间又是声明关系
A:点命令就是source命令,但是其与./cmd.sh
不同
格式:
source FileName
source命令是bash中的内建命令,它等同于点命令(.),用于读取和在当前shell环境中执行FILENAME中的命令,执行完毕之后退出码为该文件中的最后一个命令的退出码。FILENAME可以没有执行权限。有时候我们修改了/etc/profile里面的内容,如增加了环境变量,那么要立即生效的话,就必须使用source命令或者点命令在当前shell中执行一下;
123# 以下命令等效source ~/.bashrc. ~/.bashrc另:
source还有另外一种格式:
source filename [arguments]
作用: Read and execute commands from FILENAME and return. The pathnames in $PATH are used to find the directory containing FILENAME. If any ARGUMENTS are supplied, they become the positional parameters when FILENAME is executed.【目前只在intel编译器安装过程中看到过此命令格式】
比较:
1234567# a.sh#! /bin/basha="hi"# 以下两个命令执行结果不同source a.sh && echo $a./a.sh && echo $a- 用source命令执行,脚本中的命令是在本shell中读入然后执行的,因而执行echo命令时变量a是有值的;
- 直接执行脚本,会另起shell进程,而启动这个进行的时候,它会建立自己的进程环境,然后在这个进程结束的时候,它所建立的环境也随之被销毁。
- 在当前shell中执行和在子shell中执行的区别是,后者定义的变量和函数在执行结束后就消失了,而前者却可以保留下来。
./xxx.sh
和sh xxx.sh
都是在当前shell的子shell中执行的,子shell中的变量不会影响父shell,而source是把文件中的命令都读出来一个个执行,所有的变量其实就是在父shell中设置的。
参考:
20170313 - Markdown图片居中显示
Q:如何实现Typora中图片在导出时的居中显示?
A:
在需要居中的图片上下添加如下代码
123<div align=center>![]()</div>修改CSS文件(暂时还没找到相应的解决方法)
20170327 - 远程服务器免密登录
Q:对于需要频繁登录的Linux服务器,如何实现免密直接登录(类似于git中ssh的设置)?
A:
首选方法——
ssh-copy-id
前提:确保本地Linux系统以及服务器上的Linux系统的个人home目录下有文件夹
.ssh
,如果不存在,需要分别在本地和服务器上运行以下命令123456# -t 表示的是加密类型# rsa 表示加密方式,它也是默认的加密方式,因此可以省略,直接键入ssh-keygenssh-keygen -t rsa# 默认的RSA长度是2048位,我们可以加长,命令如下ssh-keygen -b 4096 -t rsa注:
- 之后需要输入保存的路径,以及是否加密id_rsa文件,可以自定义,一般直接enter键到底即可,即保存在默认路径下,且不设置id_rsa文件的密码
- 更多的ssh-keygen 基本用法可以参见Here
采用
ssh-copy-id
将公钥上传到Linux服务器中1ssh-copy-id username@remote-server注:
- 之后需要输入一次远程服务器用户的登录密码
- 输入远程用户的密码后,SSH公钥就会自动上传了。SSH公钥保存在远程Linux服务器的.ssh/authorized_keys文件中。
- 如果需要将多台本地实现免密登录,只需重复该命令即可,其每运行一次,就会将相应的本地公钥
id_rsa.pub
复制到服务器的.ssh/authorized_keys
文件中 - 上传完成后,SSH登录就不需要再次输入密码了.但是首次使用SSH Key登录时需要输入一次SSH密钥的加密密码.(只需要输入一次,将来会自动登录,不再需要输入密钥的密码.)
- 使用scp命令来传送文件时也不需要输入密码.
复制粘贴
1cat id_dsa.pub >> ~/.ssh/authorized_keys实际也可以直接采用复制本地公钥到服务器上的
.ssh/authorized_keys
文件来实现添加alias
实现命令快速登陆在home目录下的配置文件中(一般为
.bashrc
添加alias,实现简化登录12345678# 打开配置文件vim ~/.bashrc# 添加如下语句alias to-101='ssh username@hostip'# source. ~/.bashrc之后就可以在终端中直接输入
to-101
实现快速登录无法登录的一般原因
客户端的私钥和公钥文件位置必须位于
~/.ssh
下。确保双方 ~/.ssh 目录,父目录,公钥私钥,
authorized_keys
文件的权限对当前用户至少要有执行权限,对其他用户最多只能有执行权限。- 以我的设置为例,对
~/.ssh/authorized_keys
的权限是600
- 以我的设置为例,对
- **注意git登录,要求对公钥和私钥以及config文件,其他用户不能有任何权限。**
- 服务器端
~/.ssh/authorized_keys
文件名确保没错
参考:
20170519 - shell脚本中export变量生效
- 问题:在shell脚本中,若要使用
export
命令, 如果直接运行./abc.sh
,之后使用echo
命令查看相应变量还是处于未赋值状态 - 原因:参见该部分内容 [20170307 - Linux Shell中的点命令与source命令]
- 解决方法:使用
source
或是.
命令