Skip to content

linux 常用命令

Kun Wang edited this page Jan 18, 2024 · 14 revisions

常用环境变量

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:绝对路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:绝对路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:绝对路径
export PATH=$PATH:绝对路径

ssh无法登录一例

单个用户无法ssh 除了key要配对之外,要检查用户目录和.ssh目录以及里面文件的权限,如果用户组对用户目录和ssh目录有写权限,那么sshd将不会信任authorized_keys里面的内容

查看硬盘io状态

iostat -d -x -k 1 10

emacs无法使用一例

打开emacs提示

emacs: error while loading shared libraries: libotf.so.0: cannot open shared object file: No such file or directory

首先

locate libotf.so.0

发现这个库是存在的

/usr/lib64/compat-openmpi/lib/libotf.so.0
/usr/lib64/compat-openmpi/lib/libotf.so.0.0.1
/usr/lib64/compat-openmpi-psm/lib/libotf.so.0
/usr/lib64/compat-openmpi-psm/lib/libotf.so.0.0.1

所以修改环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/compat-openmpi/lib

It works!

让内网服务器可以连接外网

服务器A可以连接外网
服务器B和A在同样的内网

如果想让B去连接外网,首先要在服务器A上面开启端口转发

sysctl -a |grep 'net.ipv4.ip_forward'

如果值为1,那么说明端口转发已经打开,否则需要编辑/etc/sysctl.conf 在里面找到net.ipv4.ip_forward并且修改为

net.ipv4.ip_forward = 1

然后sysctl -p开启端口转发

其次在机器A上用iptables开启转发

iptables -t nat -A POSTROUTING -o eth1 -s 10.10.10.101 -j MASQUERADE

其中10.10.10.10.101是服务器B的内网地址,eth1是服务器A的内网网口

随后要在机器B上将其内网的网关修改为服务器A的内网地址
例如找到文件/etc/sysconfig/network-scripts/ifcfg-eth3
添加

GATEWAY=10.10.10.252
DNS1="114.114.114.114"

其中DNS1为解析域名的dns

最后重启机器B的网络

service network restart

parallel 在多个节点上并行跑程序

parallel -j 8 --sshloginfile nodefile --workdir $PWD < 01.raxml.pl.sh
# 会在每个节点上并行跑8个,nodefile格式如下:
user@node1
user@node2

linux 改变语言

export LANG="en_US.UTF-8"
export LANG="zh_CN.UTF-8"

nfs无法启动的故障

如果存储节点的某个挂载的分区掉了,那么nfs在启动的时候可能会卡住,即使是重启了整个存储节点,也无法启动nfs
这个时候需要在/etc/exports里面把对应的分区给注释掉,然后再重启存储节点

fedora扩展root硬盘

安装的时候没有注意,让默认/下面的空间很小,如果有一些程序需要用到/里面空间的话(例如mysql),就会空间不足
如下是一个扩展/root的方法,前提是硬盘是Linux LVM(可以用fdisk -l查看)

lvextend -L500G /dev/mapper/fedora-root
xfs_growfs /dev/mapper/fedora-root

findmnt --target /tmp # 查看tmp大小
mount -o remount,size=400G,noatime /tmp # 增加tmpfs的大小

需要安装的系统程序

ncurses-static # samtools 1.5需要
gnuplot # psmc需要
java-1.8.0-openjdk
boost-static # busco需要
dh-autoreconf # autogen
java-1.8.0-openjdk
java-1.8.0-openjdk-devel
gsl gsl-devel eigen3-devel blas-devel lapack-devel atlas-static
cmake
autoconf
automake
libtool

windows装机后必备软件

everything
7-zip
jre
mega
notepad++
office
adobe illustrator
endnote
xftp
xshell
foxit reader
chrome
firefox
visual code studio
R

比较好用的python发行版

anaconda2

设置硬盘配额

可以使用quota这个软件进行配置

gemma无法编译一例

报错提示如下

fatal error: Eigen/Dense: No such file or directory

需要安装eigen3-devel,然后把

#include <Eigen/Dense>

修改为

#include <eigen3/Eigen/Dense>

pindel编译错误一例

出现错误error: call of overloaded ‘abs(int)’ is ambiguous 需要在bddata.cpp代码里面加入一个库

#include <cmath>

如何在不解压的情况下处理gz文件

有些软件不能处理gz文件,比如platanus,同时也不能接收多个文件的管道,这时候可以用下面这个方法
首先是用mkfifo生成一个有名字的管道,然后把这个有名字的管道给这些不太好用的软件,这种也可以用来做python的一些处理
mkfifo file1.fifo
mkfifo file2.fifo
gunzip -c file1.gz > file1.fifo &
gunzip -c file2.gz > file2.fifo &

lftp上传数据

lftp 用户名:密码@ftp地址:传送端口
mput *gz

命令为:
lftp sra:[email protected]

如果是sftp的话
lftp sftp://bentc37:[email protected]:22
lftp sftp://用户名:密码@ftp地址:端口

查看文件和目录的uid和gid

ls -nd xxx
  • linux修改用户组
groupadd groupname
chgrp -R groupname /mnt/diskname
usermod -a -G groupname user
# 关键在于,添加用户组之后,需要退出重新登录才能生效

添加新存储

/etc/fstab
添加
10.10.10.210:/mnt/diskname /mnt/diskname nfs rsize=32768,wsize=32768 0 0

chgrp -R planck /mnt/diskname

mkdir /mnt/diskname
mount -a
groupadd groupname
usermod -a -G groupname user01
usermod -a -G groupname user02

sshd控制登入用户

在/etc/ssh/sshd_config中加入
AllowUsers root user01 user02
然后重启sshd
systemctl restart sshd
  • "packet_write_wait: Connection to port 22: Broken pipe"报错的解决办法
I have tried this in /etc/ssh/ssh_config for Linux and Mac:

ClientAliveInterval 20
ClientAliveCountMax 20

linux下home和end按键的替代

shift < 和 shift >

查看mount硬盘关联的程序

这个错误“umount.nfs: /run/tmp1: device is busy”

fuser -m -v -i -k /run/tmp1 # 谨慎使用

zshrc报错

zsh: corrupt history file /home/share/users/user01//.zsh_history


mv .zsh_history .zsh_history_bad
strings .zsh_history_bad > .zsh_history
fc -R .zsh_history

genewise编译过程中遇到的问题

undefined reference to `isnumber'
需要修改models/phasemodel.c
将文件23行的isnumber改成isdigit

win10屏幕变成黑白

ctrl+win+c #坑爹

dnf 换源

1.备份
mv /etc/yum.repos.d/fedora.repo /etc/yum.repos.d/fedora.repo.backup
mv /etc/yum.repos.d/fedora-updates.repo /etc/yum.repos.d/fedora-updates.repo.backup
2.下载新的fedora.repo和fedora-updates.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/fedora.repo http://mirrors.aliyun.com/repo/fedora.repo
wget -O /etc/yum.repos.d/fedora-updates.repo http://mirrors.aliyun.com/repo/fedora-updates.repo
3.运行sudo dnf makecache生成缓存(Fedora从22版本弃用yum换成dnf,yum命令还可以用,只是每次使用系统都会提醒换成dnf。)

centos7修改默认内核

  1. 查看默认的内核
grub2-editenv list
  1. 查看所有内核
cat /boot/grub2/grub.cfg | grep menuentry
  1. 替换内核(这儿只能使用上面命令输出中双引号 “ ” 或者单引号 ‘ ‘ 中的内容)
grub2-set-default 'xxx'
  1. 最后查看一下启动内核
grub2-editenv list

http://blog.51cto.com/hugyou/1793094

centos安装epel

去这个地方寻找epel-release的地址https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/ 首先 rpm -vih https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm 然后 yum clean all && yum makecache

ssh 的"debug1: Exit status -1"错误

ssh-localhost-exits-with-debug1-exit-status-1 运行

chown root:root /var/empty
chmod 755 /var/empty
chmod 711 /var/empty/sshd

普通用户使用docker

groupadd docker
gpasswd -a wangkun docker
systemctl restart docker

然后退出重新登录账号

cpu优化为性能模式

cpupower -c all frequency-set -g performance
cpupower monitor -i 1  通过这个查看频率

python自动补全

修改环境变量.bashrc或.zshrc:

PYTHONSTARTUP='/home/users/xx/.pythonstartup'
export PYTHONSTARTUP

写入.pythonstartup文件

try:
    import readline
except ImportError:
    print " readline not available"
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

pbs提交任务不运行

用了一下showbf -v这个命令
发现

ERROR:    cannot send request to server localhost:42559 (server may not be running)
ERROR:    cannot request service (status)

在网上搜了一下,是maui没有启动的问题

/etc/init.d/maui.d start

启动一下就好了

pbs修改用户核心数限制

在/opt里面找到maui.cfg
修改MAXPROC参数
然后重启maui

pbs将节点下架offline

pbsnodes -o node4 #下架
pbsnodes -c node4 #上架

ssh登录过慢的解决办法

修改/etc/ssh/sshd_config
将GSSAPIAuthentication修改为no
再加上UseDNS no这一行

linux对磁盘读写测速

time dd if=test.log bs=8k count=300000 of=/dev/null
time dd if=/dev/zero bs=8k count=300000 of=test.log

linux gnome terminal ctrl tab to next tab

gsettings set org.gnome.Terminal.Legacy.Keybindings:/org/gnome/terminal/legacy/keybindings/ next-tab '<Primary>Tab'
gsettings set org.gnome.Terminal.Legacy.Keybindings:/org/gnome/terminal/legacy/keybindings/ prev-tab '<Primary><Shift>Tab'