Linux

How to quickly find out which rpm package provides a command on Fedora Linux?

rpm -qf  `which xxx(command)`

change hostname permenantly in f32

hostnamectl set-hostname dlp.server.world

clean up memeories:
sudo sync && sudo bash -c 'echo 3 > /proc/sys/vm/drop_caches'

cannot open source file "GL/glu.h"
yum groupinstall "X Software Development"

copy files preserve permission:
cp -p

To calculate the sum of each row in file xxx.txt
awk '{for (i=1;i<=NF;i++) t+=$i;print t;t=0}' xxx.txt

change the size of current window:
:res +(-) 10

bash to create 2d wham files:

cond=0
for ((i=5;i<=245;i+=20))
do for ((j=-150;j<=150;j+=50))
do rexinfo.pl -inx 1:100 -condsel $cond run,val1,val2 -dir gbrex_va_resd_dihe_new >data.r${i}d$j
cond=`expr $cond + 1|bc`
done
done

amino1_stat.txt
awk '{if (($3 >2100) && ($1 != $2)) {print FNR ":" $0 ":" $3/6000}}' amino_stat1.txt|sort -k 3 -rn

for work in $(cat peptides.txt); do echo $word;done

awk ‘{if ($3<10000)print $0}’ tmp.txt

delete blank lines from file
awk 'NF' filenameawk 'NF' filename

only show files under current directory
find . -maxdepth 1 -type f -printf '%f\n'
for i in $(find . -maxdepth 1 -type f -printf '%f\n'); do echo $i; done

calculate the sum of one collumn

awk '{sum+=$3} END {print sum}' filename

bash:loop

zw=10

for i in $(seq 0 $zw ); do echo $i;done

read files into an array

array=(*.txt)

echo ${array[*]} 

${arr[*]} # All of the items in the array
${!arr[*]} # All of the indexes in the array
${#arr[*]} # Number of items in the array
${#arr[0]} # Length of item zero

fractions in bash

echo "scale=2;2.0/1.3"|bc

add to last line(same line, not next line)

append=xxx(contents to add)

FILE=yyy(input file)

echo "$(cat $FILE)$append" > $FILE

delete last line from a file

sed -i '$ d' filename

in perl, open a file and skip lines starts with #

while (<INP>) {

(/#/) && (next);(if /#/ is true  then next)

....

}

rsync -avz --exclude='*dcd*' sun:MD/ETHC16 .

float calculation in bash

echo "scale=4;1/2"|bc

delete some files under one directory:

 find ./  \ ( -name *ene* -o -name *out* -o -name *dcd* -o -name *log* \ ) -exec rm -rf {} \;

useradd xxx

usermod -a -G chemistry xxx(append)

usermod -g chemistry xxx(change chemistry to primary group)

force the user to change password after the first time they login:

chage -d 0 username

Rocks set path:

Sync Files across Cluster (411)

411 is used to keep files consistent across the cluster
Used for passwd/shadow/group etc
Can be used for other files also

/var/411/Files.mk
FILES_NOCOMMENT = /etc/passwd \
/etc/group \
/etc/shadow

$ rocks sync users

vi /var/411/Files.mk

add "FILES += /etc/bashrc"

then make clean;make

this will sync etc/bashrc on all compute node.

rocks reinstall compute node:

rocks set host pxeboot compute-0-0 action=install

ssh compute-0-0 "shutdown -r now"

If the boot order has not been set to pxe first, you can force a pxe boot with the local keyboard, or by calling /boot/kickstart/cluster-kickstart-pxe on the local node.

Add two  4TB hard drive on rocks cluster

use parted /dev/sdc and parted /dev/sdd to create two partitions

then pvcreate /dev/sdc1 /dev/sdd1

vgcreate vg1 /dev/sdc1 /dev/sdd1

lvcreate -L 7400G vg1 -n lv1

blkid to find out the UUID of the new volume

add "UUID=1785ad00-010e-444f-8513-88a1a27399f9 /export ext4 defaults 1 2" to /etc/fstab

Delete a logical volume:

unmount the logical volume first

lvremove /dev/vg1/lv1

then remove volume group by

vgremove vg1

How To Compile and Run NAMD (MPI Version)?

qsub -pe orte 2 mpi-ring.qsub

qconf -mrqs

{
name zwei
description "per user rule sets"
enabled TRUE
limit users zwei to slots=8
}

Before discussing what the SGE parallel environments look like, it is useful to describe the different types of parallel jobs that can be run.

Shared Memory. This is a type of parallel job that runs multiple threads or processes on a single mutli-core machine. OpenMP programs are a type of shared memory parallel program.
Distributed Memory. This type of parallel jobs runs multiple processes over mutliple processors with communication between them. This can be on a single machine but is typically thought of as going across multiple machines. There are several methods of achieving this via a message passing protocol but the most common, by far, is MPI (Message Passing Interface). There are several implementations of MPI but we have standardized on OpenMPI and MVAPICH2. These integrate very well with SGE by
natively parsing the hosts file provided by SGE
yielding process control to SGE
Hybrid Shared/Distributed Memory. This type of parallel job uses shared memory parallelism with a compute node but distributed memory parallelism across compute nodes. There are several methods for achieving this but the most common is OpenMP/MPI.

https://wiki.chipp.ch/twiki/bin/view/CmsTier3/SunGridEngine#Configure_a_parallel_environment

Customizing ssh banner message

You can also create customized greetings for users connecting to your system through ssh. Note that this message is displayed before the actual login.

Create a text file that should appear as the greetings, for example, /etc/sshgreetings.txt.

$ cat /etc/sshgreetings.txt
###############################
#                             #
#      Welcome to Machine1    #
#                             #
###############################

Then edit /etc/ssh/sshd_config as follows:

Banner /etc/sshgreetings.txt
restart ssdh : /etc/init.d/sshd restart

if you see some *.h missing, try

yum whatprovides */*.h

after fresh install of laptop, delete /home/Downloads, then

ln -s ./work/Downloads Downloads

check the path of installed packages

rpm -ql xxx

check which package provide .so files

yum provides libfreetype.so.6

control output

2>&1 >output.log means first start sending all file handle 2 stuff (standard error) to file handle 1 (standard output) then send that to the file output.log. In other words, send standard error and standard output to the log file.

2>&1 | tee output.log is the same with the 2>&1 bit, it combines standard output and standard error on to the standard output stream. It then pipes that through the tee program which will send its standard input to its standard output (like cat) and also to the file. So it combines the two streams (error and output), then outputs that to the terminal and the file.

loophbond.sh 2>&1|tee output.log &

fix /var 100% problem

rm -rf /var/log/*

在Linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。这种情况下,通过df和du命令查找的磁盘空间,
在Linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。这种情况下,通过df和du命令查找的磁盘空间,两者是无法匹配的,可能df显示磁盘100%,而du查找目录的磁盘容量占用却很小。

遇到这种情况,基本可以断定是某些大文件被某些程序占用了,并且这些大文件已经被删除了,但是对应的文件句柄没有被某些程序关闭,造成内核无法收回这些文件占用的空间。

那么,如何查找那些文件被某些程序占用呢:

1
2
3
lsof -n | grep deleted
COMMAND     PID      USER   FD      TYPE             DEVICE        SIZE       NODE NAME
dd        31708      higkoo    1w      REG                8,2 5523705856     429590 /data/filetest (deleted)
命令:lsof -n| grep deleted打印出所有针对已删除文件的读写操作,这类操作是无效的,也正是磁盘空间莫名消失的根本原因。

解决办法:kill -9 PID   ----只需把进程删掉就能释放空间

lsof `which httpd` //那个进程在使用apache的可执行文件
lsof /etc/passwd //那个进程在占用/etc/passwd
lsof /dev/hda6 //那个进程在占用hda6
lsof /dev/cdrom //那个进程在占用光驱
lsof -c sendmail //查看sendmail进程的文件使用情况
lsof -c courier -u ^zahn //显示出那些文件被以courier打头的进程打开,但是并不属于用户zahn
lsof -p 30297 //显示那些文件被pid为30297的进程打开
lsof -D /tmp 显示所有在/tmp文件夹中打开的instance和文件的进程。但是symbol文件并不在列

lsof -u1000 //查看uid是100的用户的进程的文件使用情况
lsof -utony //查看用户tony的进程的文件使用情况
lsof -u^tony //查看不是用户tony的进程的文件使用情况(^是取反的意思)
lsof -i //显示所有打开的端口
lsof -i:80 //显示所有打开80端口的进程
lsof -i -U //显示所有打开的端口和UNIX domain文件
lsof -i UDP@[url]www.akadia.com:123 //显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接
lsof -i tcp@ohaha.ks.edu.tw:ftp -r //不断查看目前ftp连接的情况(-r,lsof会永远不断的执行,直到收到中断信号,+r,lsof会一直执行,直到没有档案被显示,缺省是15s刷新)
lsof -i tcp@ohaha.ks.edu.tw:ftp -n //lsof -n 不将IP转换为hostname,缺省是不加上-n参数

check process:

ps -auf

copy certain files by rsync

rsync -avz --include='*.txt' --exclude='*' xeon:work/MD/TOP100/* .

Re: how to disable core dumps completely?
Quote:
Originally Posted by megaloman  View Post
Thanks marko, I've set Storage to none, but systemd-coredump still runs and takes 100% cpu for 10-15 seconds... not sure what it does.
Systemd doesn't completely control whether core dumps are made or not. It mainly determine where such dumps go, and whether they should take up space or not. It may prevent some user space core dumps, but not all.
With "Storage=none", they can still occur and are registered by journald, but they don't take up disk space.

Turning them off completely is mainly done by "ulimit". The subject is IMHO badly documented and somewhat confusing since you have to take user privileges into account, and that some subsystems can override other subsystems defaults.

Here is what I did:
in:
/etc/systemd/system.conf
DumpCore=no
#This can be overridden: AFAIK, only pertains to systemd units

in:
/etc/systemd/coredump.conf
Storage=none
#Core dumps are still made and registered in the journal, but not placed on disk.

Also in:
/etc/security/limits.conf

#<domain> <type> <item> <value>
* hard core 0

The above should prevent core dumps, and since it is a "hard" limits, non-root programs can't override it, though I suspect that kernel cmd line parameters and therefore systemd can still override it.

As I understand it, the above is equivalent to the old method of placing "ulimit -c 0" or "ulimit -H -c 0" in "$HOME/.bashrc" but works globally, not just on the logged in user.

There may still be some loopholes left that can generate core dumps, but the above should cover most cases.

A reboot is the easy way to ensure everything is working properly after setting the above.

(Added:
I think programs running as root or setuid programs can still generate core dumps even with the above settings)
第三种,修改源代码让其支持你想要的上传类型。

链接FTP,打开wp-includes/functions.php文件,查找:’zip’ => ‘application/zip’, 在下面一行输入 ‘rar’ => ‘application/rar’, 。如果需要添加其他类型的上传,方法一样。
这种方法是添加可上传的文件类型,好处:直接让程序允许某种类型文件上传,不会对网站造成任何影响。弊端:每次升级后都需要修改。推荐使用此种方法。

du -sh *|sort -h

10.9.55.60 master

10.9.55.61  compute-0-0

10.9.55.62 compute-0-1

10.9.55.59 compute-0-2

qstat -f to check the states of queues

queuename                      qtype resv/used/tot. load_avg arch          states
---------------------------------------------------------------------------------
all.q@compute-0-0.local        BIP   0/0/48         0.01     linux-x64     E
---------------------------------------------------------------------------------
all.q@compute-0-1.local        BIP   0/0/48         0.00     linux-x64     E
---------------------------------------------------------------------------------
all.q@compute-0-2.local        BIP   0/0/48         0.02     linux-x64     E
qmod -cq all.q to kick the nodes out of "E" states.

rsync match pattern

rsync -avz --include="*/" --include="*_bridge_residence.txt" --exclude="*" xeon:backup/TOP100 .

ps2eps -f -l -B -s b0 -c -n morc16_ph8_angle.ps

linux mint 19 ERROR 1698 (28000): Access denied for user 'root'@'localhost'

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '*'; (*:password for root)

在Ubuntu和Linux Mint上安装Oracle JDK

使用下面的命令安装,只需一些时间,它就会下载许多的文件,所及你要确保你的网络环境良好:

    1. sudo add-apt-repository ppa:webupd8team/java
    1. sudoapt-get update
    1. sudoapt-get install oracle-java8-installer
    1. sudoapt-get install oracle-java8-set-default

如果你想安装Java 7(i.e Java 1.7),在上面的命令中用java7代替java8。

VI下方向键变成ABCD的解决办法:

执行

sudo apt-get install vim

awk to press csv files with coma in quotes:

awk -vFPAT='[^,]*|"[^"]*"' '{print $1,$2,$3,$4,$5,$6,$7,$8}' *.csv

If you want normal user to be able to mount network share such as samba/cifs or nfs...
you can add the following to the very end of /etc/sudoers file and restart.

# allow members of CDROM group to mount without prompting for root password
%cdrom ALL = NOPASSWD:NOEXEC: /bin/mount, /bin/umount, /sbin/mount.cifs, /sbin/mount.nfs

then add "sudo mount" etc etc to the users mount script.

example of samba mount

sudo mount.cifs //192.168.2.2/share/Data ~/DATA/ -o domain=AK,user=wei

It will NOT ask them for the root password, as the sudoers file stops them from needing it.

linux mint vnc server

This tutorial was adapted from here.

1. Remove the default Vino server:

sudo apt-get -y remove vino

2. Install x11vnc:

sudo apt-get -y install x11vnc

3. Create the directory for the password file:

sudo mkdir /etc/x11vnc

4. Create the encrypted password file:

sudo x11vnc --storepasswd /etc/x11vnc/vncpwd

You will be asked to enter and verify the password.  Then press Y to save the password file.

5. Create the systemd service file for the x11vnc service:

sudo xed /lib/systemd/system/x11vnc.service

Copy/Paste this code into the empty file:

[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -noxdamage -repeat -rfbauth /etc/x11vnc/vncpwd -rfbport 5900 -shared

[Install]
WantedBy=multi-user.target

6: Reload the services:

sudo systemctl daemon-reload

7. Enable the x11vnc service at boot time:

sudo systemctl enable x11vnc.service

8. Start the service:

Either reboot or

sudo systemctl start x11vnc.service

install oracle java on linux mint 19:

How To Install Oracle Java JDK 11 / 8 on Ubuntu 16.04 & Linux Mint 18

delete only directories:

rm -rf ./*/

remove duplicate lines by awk

awk -F, '!seen[$0]++' output.csv

show duplicate lines by awk

awk -F'\t' 'c[$0]++;c[$0]>=2' *.csv

remove duplicates based on multiple fields:

awk -F'\t' '!seen[$2$3$4$5$6$7]++' *.csv

set output separator:

awk -F'\t' 'BEGIN { OFS="\t" } { print $2,$4,$8 }' tmp.csv

remove leading and trailing spaces in one field:

awk 'BEGIN{FS=OFS="\t"} {gsub(/^[[:space:]]+|[[:space:]]+$/,"",$4)} 1' tmp.csv

Changing The Site URL

https://gist.github.com/stagas/754303

I had a similar error with Linux Mint

fatal error: sys/types.h: No such file or directory

Fixed this problem with:

sudo apt install libc6-dev

update Linux mint boot menu:

sudo update-grub

find ./ -type f -iname '*.pdf' ( -exec sh -c 'qpdf --check "{}" > /dev/null && echo OK' \; -o -exec echo "{}": FAILED \; )

find same files under two directories:

diff -srq dir1 dir2|grep identical

replace file name with character

for f in *\ *; do mv "$f" "${f// /_}"; done
*\ * selects all files with a space in their name as input for the the for loop.
The quotes around "$f" are important because we know there's a space in the filename and otherwise it would appear as 2+ arguments to mv.
${f//str/new_str} is a bash-specific string substitution feature. All instances of str are replaced with new_str.

argument list too long.

find ./ -type f -name "*.mol" -exec mv {} ../ \;

sort by last column:

awk '{print $NF,$0}' tmp.csv|sort -nr|cut -f2- -d' '

sort by column 2 then column 5 numerically

sort -nk2,2 -nk5,5 < xxx.csv

regexp exclude a string:
$content=~/Molecular Formula<\/td>(((?!<\/td>).)*)<\/td>/