Skip to content

Instantly share code, notes, and snippets.

@onceupon
Last active September 15, 2017 03:09
Show Gist options
  • Save onceupon/b225f26c4cbc6eb4c41c3a4f09ba9ed7 to your computer and use it in GitHub Desktop.
Save onceupon/b225f26c4cbc6eb4c41c3a4f09ba9ed7 to your computer and use it in GitHub Desktop.
Bash Oneliner will focus on bash commands for parsing plain text and biological data, which usually are tsv files(tab-separated values); some of the commands are for Linux system maintenance. I apologize that there won't be any citation of the code, but they are probably from dear Google and Stackoverflow.
# ### Bash-Oneliner
# Hi bash learners and bioinformaticans, welcome to Bash Oneliner. I started studying bioinformatics data three years ago (recently started working on cloud computing), and was amazed by those single-word bash commands which are much faster than my dull scripts, so i started bash. Not all the code here is oneliner (if the ';' counts..), but i put effort on making them brief and fast.
# This blog will focus on simple bash commands for parsing data, most of which are for tsv files (tab-separated values); some of them are for Linux system maintenance. I apologize that there won't be any citation for the codes, but they are probably from dear Google and Stackoverflow.
# English and bash are not my first language, so... correct me anytime, thank you
# In case you would like to check and vote up my questions on Stackoverflow, here's my page:
# http://stackoverflow.com/users/4290753/once
# Here's a more stylish version of Bash-Oneliner~
# http://onceupon.github.io/Bash-Oneliner/
# ## Handy Bash oneliner commands for tsv file editing
# - [Grep](#grep)
# - [Sed](#sed)
# - [Awk](#awk)
# - [Xargs](#xargs)
# - [Find](#find)
# - [Loops](#loops)
# - [Math](#math)
# - [Download](#download)
# - [Random](#random)
# - [Xwindow](#xwindow)
# - [Others](#others)
# - [System](#system)
## Grep
##### Extract text bewteen words (e.g. w1,w2)
grep -o -P '(?<=w1).*(?=w2)'
##### Grep lines without word (e.g. bbo)
grep -v bbo filename
##### Grep only one/first match (e.g. bbo)
grep -m 1 bbo filename
##### Grep and count (e.g. bbo)
grep -c bbo filename
##### Insensitive grep (e.g. bbo/BBO/Bbo)
grep -i "bbo" filename
##### Count occurrence (e.g. three times a line count three times)
grep -o bbo filename
##### COLOR the match (e.g. bbo)!
grep --color bbo filename
##### Grep search all files in a directory(e.g. bbo)
grep -R bbo /path/to/directory
# or
grep -r bbo /path/to/directory
##### Search all files in directory, only output file names with matches(e.g. bbo)
grep -Rh bbo /path/to/directory
# or
grep -rh bbo /path/to/directory
##### Grep OR (e.g. A or B or C or D)
grep 'A\|B\|C\|D'
##### Grep AND (e.g. A and B)
grep 'A.*B'
##### Grep all content of a fileA from fileB
grep -f fileA fileB
##### Grep a tab
grep $'\t'
##### Grep variable from variable
$echo "$long_str"|grep -q "$short_str"
if [ $? -eq 0 ]; then echo 'found'; fi
# grep -q will output 0 if match found
# remember to add space between []!
##### Grep strings between a bracket()
grep -oP '\(\K[^\)]+'
##### Grep number of characters with known strings in between(e.g. AAEL000001-RA)
grep -o -w "\w\{10\}\-R\w\{1\}"
# \w word character [0-9a-zA-Z_] \W not word character
##### A lot examples here: http://www.cyberciti.biz/faq/grep-regular-expressions/
## Sed
##### Remove lines with word (e.g. bbo)
sed "/bbo/d" filename
##### Edit infile (edit and save)
sed -i "/bbo/d" filename
##### When using variable (e.g. $i), use double quotes " "
# e.g. add >$i to the first line (to make a FASTA file)
sed "1i >$i"
# notice the double quotes! in other examples, you can use a single quote, but here, no way!
# '1i' means insert to first line
##### Delete empty lines
sed '/^\s*$/d'
# or
sed 's/^$/d'
##### Delete last line
sed '$d'
##### Delete last character from end of file
sed -i '$ s/.$//' filename
##### Add string to end of file (e.g. "]")
sed '$s/$/]/' filename
##### Add newline to the end
sed '$a\'
##### Add string to beginning of every line (e.g. bbo)
sed -e 's/^/bbo/' file
##### Add string to end of each line (e.g. "}")
sed -e 's/$/\}\]/' filename
##### Add \n every nth character (e.g. every 4th character)
sed 's/.\{4\}/&\n/g'
##### Concatenate/combine/join files with a seperator and next line (e.g seperate by ",")
sed -s '$a,' *.json > all.json
##### Substitution (e.g. replace A by B)
sed 's/A/B/g' filename
##### Select lines start with string (e.g. bbo)
sed -n '/^@S/p'
##### Delete lines with string (e.g. bbo)
sed '/bbo/d' filename
##### Print every nth lines
sed -n '0~3p' filename
# catch 0: start; 3: step
##### Print every odd # lines
sed -n '1~2p'
##### Print every third line including the first line
sed -n '1p;0~3p'
##### Remove leading whitespace and tabs
sed -e 's/^[ \t]*//'
# notice a whitespace before '\t'!!
##### Remove only leading whitespace
sed 's/ *//'
# notice a whitespace before '*'!!
##### Remove ending commas
sed 's/,$//g'
##### Add a column to the end
sed "s/$/\t$i/"
# $i is the valuable you want to add
# e.g. add the filename to every last column of the file
for i in $(ls);do sed -i "s/$/\t$i/" $i;done
##### Add extension of filename to last column
for i in T000086_1.02.n T000086_1.02.p;do sed "s/$/\t${i/*./}/" $i;done >T000086_1.02.np
##### Remove newline\ nextline
sed ':a;N;$!ba;s/\n//g'
##### Print a number of lines (e.g. line 10th to line 33 rd)
sed -n '10,33p' <filename
##### Change delimiter
sed 's=/=\\/=g'
##### Replace with wildcard (e.g A-1-e or A-2-e or A-3-e....)
sed 's/A-.*-e//g' filename
##### Remove last character of file
sed '$ s/.$//'
##### Insert character at specified position of file (e.g. AAAAAA --> AAA#AAA)
sed -r -e 's/^.{3}/&#/' file
## Awk
##### Set tab as field separator
awk -F $'\t'
##### Output as tab separated (also as field separator)
awk -v OFS='\t'
##### Pass variable
a=bbo;b=obb;
awk -v a="$a" -v b="$b" "$1==a && $10=b" filename
##### Print line number and number of characters on each line
awk '{print NR,length($0);}' filename
##### Find number of columns
awk '{print NF}'
##### Reverse column order
awk '{print $2, $1}'
##### Check if there is a comma in a column (e.g. column $1)
awk '$1~/,/ {print}'
##### Split and do for loop
awk '{split($2, a,",");for (i in a) print $1"\t"a[i]}' filename
##### Print all lines before nth occurence of a string (e.g stop print lines when bbo appears 7 times)
awk -v N=7 '{print}/bbo/&& --N<=0 {exit}'
##### Print filename and last line of all files in directory
ls|xargs -n1 -I file awk '{s=$0};END{print FILENAME,s}' file
##### Add string to the beginning of a column (e.g add "chr" to column $3)
awk 'BEGIN{OFS="\t"}$3="chr"$3'
##### Remove lines with string (e.g. bbo)
awk '!/bbo/' file
##### Column subtraction
cat file| awk -F '\t' 'BEGIN {SUM=0}{SUM+=$3-$2}END{print SUM}'
##### Usage and meaning of NR and FNR
# e.g.
# fileA:
# a
# b
# c
# fileB:
# d
# e
awk 'print FILENAME, NR,FNR,$0}' fileA fileB
# fileA 1 1 a
# fileA 2 2 b
# fileA 3 3 c
# fileB 4 1 d
# fileB 5 2 e
##### AND gate
# e.g.
# fileA:
# 1 0
# 2 1
# 3 1
# 4 0
# fileB:
# 1 0
# 2 1
# 3 0
# 4 1
awk -v OFS='\t' 'NR=FNR{a[$1]=$2;next} NF {print $1,((a[$1]=$2)? $2:"0")}' fileA fileB
# 1 0
# 2 1
# 3 0
# 4 0
##### Round all numbers of file (e.g. 2 significant figure)
awk '{while (match($0, /[0-9]+\[0-9]+/)){
\printf "%s%.2f", substr($0,0,RSTART-1),substr($0,RSTART,RLENGTH)
\$0=substr($0, RSTART+RLENGTH)
\}
\print
\}'
##### Give number/index to every row
awk '{printf("%s\t%s\n",NR,$0)}'
##### Break combine column data into rows
# e.g.
# seperate
# David cat,dog
# into
# David cat
# David dog
# detail here: http://stackoverflow.com/questions/33408762/bash-turning-single-comma-separated-column-into-multi-line-string
awk '{split($2,a,",");for(i in a)print $1"\t"a[i]}' file
##### Sum up a file (each line in file contains only one number)
awk '{s+=$1} END {print s}' filename
##### Average a file (each line in file contains only one number)
awk '{s+=$1}END{print s/NR}'
##### Print field start with string (e.g Linux)
awk '$1 ~ /^Linux/'
##### Sort a row (e.g. 1 40 35 12 23 --> 1 12 23 35 40)
awk ' {split( $0, a, "\t" ); asort( a ); for( i = 1; i <= length(a); i++ ) printf( "%s\t", a[i] ); printf( "\n" ); }'
##### Subtract previous row values (add column6 which equal to column4 minus last column5)
awk '{$6 = $4 - prev5; prev5 = $5; print;}'
## Xargs
##### Set tab as delimiter (default:space)
xargs -d\t
##### Display 3 items per line
echo 1 2 3 4 5 6| xargs -n 3
# 1 2 3
# 4 5 6
##### Prompt before execution
echo a b c |xargs -p -n 3
##### Print command along with output
xargs -t abcd
# /bin/echo abcd
# abcd
##### With find and rm
find . -name "*.html"|xargs rm -rf
##### Delete fiels with whitespace in filename (e.g. "hello 2001")
find . -name "*.c" -print0|xargs -0 rm -rf
##### Show limits
xargs --show-limits
##### Move files to folder
find . -name "*.bak" -print 0|xargs -0 -I {} mv {} ~/old
or
find . -name "*.bak" -print 0|xargs -0 -I file mv file ~/old
##### Move first 100th files to a directory (e.g. d1)
ls |head -100|xargs -I {} mv {} d1
##### Parallel
time echo {1..5} |xargs -n 1 -P 5 sleep
# a lot faster than
time echo {1..5} |xargs -n1 sleep
##### Copy all files from A to B
find /dir/to/A -type f -name "*.py" -print 0| xargs -0 -r -I file cp -v -p file --target-directory=/path/to/B
# v: verbose|
# p: keep detail (e.g. owner)
##### With sed
ls |xargs -n1 -I file sed -i '/^Pos/d' filename
##### Add the file name to the first line of file
ls |sed 's/.txt//g'|xargs -n1 -I file sed -i -e '1 i\>file\' file.txt
##### Count all files
ls |xargs -n1 wc -l
##### Turn output into a single line
ls -l| xargs
##### Count files within directories
echo mso{1..8}|xargs -n1 bash -c 'echo -n "$1:"; ls -la "$1"| grep -w 74 |wc -l' --
# "--" signals the end of options and display further option processing
##### Download dependencies files and install (e.g. requirements.txt)
cat requirements.txt| xargs -n1 sudo pip install
##### Count lines in all file, also count total lines
ls|xargs wc -l
##### Xargs and grep
cat grep_list |xargs -I{} grep {} filename
## Find
##### List all sub directory/file in the current directory
find .
##### List all files under the current directory
find . -type f
##### List all directories under the current directory
find . -type d
##### Edit all files under current directory (e.g. replace 'www' with 'ww')
find . name '*.php' -exec sed -i 's/www/w/g' {} \;
# if no subdirectory
replace "www" "w" -- *
# a space before *
##### Find and output only filename (e.g. "mso")
find mso*/ -name M* -printf "%f\n"
##### Find and delete file with size less than (e.g. 74 byte)
find . -name "*.mso" -size -74c -delete
# M for MB, etc
## Loops
##### While loop, column subtraction of a file (e.g. a 3 columns file)
while read a b c; do echo $(($c-$b));done < <(head filename)
# there is a space between the two '<'s
##### While loop, sum up column subtraction
i=0; while read a b c; do ((i+=$c-$b)); echo $i; done < <(head filename)
##### If loop
if (($j==$u+2))
# (( )) use for arithmetic operation
if [[$age >21]]
# [[ ]] use for comparison
##### Test if file exist
if [ -e 'filename' ]
then
echo -e "file exists!"
fi
##### For loop
for i in $(ls); do echo file $i;done
## Math
##### Print out the prime factors of a number (e.g. 50)
factor 50
##### Simple math with expr
expr 10+20 #30
expr 10\*20 #600
expr 30 \> 20 #1 (true)
##### More math with bc
# - Number of decimal digit/ significant figure
echo "scale=2;2/3" | bc
#.66
# - Exponent operator
echo "10^2" | bc
#100
# - Using variables
echo "var=5;--var"| bc
#4
## Download
##### Download all from a page
wget -r -l1 -H -t1 -nd -N -np -A mp3 -e robots=off http://example.com
# -r: recursive and download all links on page
# -l1: only one level link
# -H: span host, visit other hosts
# -t1: numbers of retries
# -nd: don't make new directories, download to here
# -N: turn on timestamp
# -nd: no parent
# -A: type (seperate by ,)
# -e robots=off: ignore the robots.txt file which stop wget from crashing the site, sorry example.com
##### Upload a file to web and download (https://transfer.sh/)
# --> upload:
curl --upload-file ./filename.txt https://transfer.sh/filename.txt
# (the above command will return a URL, e.g: https://transfer.sh/tG8rM/filename.txt)
# --> download:
curl https://transfer.sh/tG8rM/filename.txt -o filename.txt
##### Download file if necessary
data=file.txt
url=http://www.example.com/$data
if [! -s $data];then
echo "downloading test data..."
wget $url
fi
##### Wget to a filename (when a long name)
wget -O filename "http://example.com"
##### Wget files to a folder
wget -P /path/to/directory "http://example.com"
## Random
##### Random pick 100 lines from a file
shuf -n 100 filename
##### Random order (lucky draw)
for i in a b c d e; do echo $i; done| shuf
##### Echo series of random numbers between a range (e.g. shuffle numbers from 0-100, then pick 15 of them randomly)
shuf -i 0-100 -n 15
##### Echo a random number
echo $RANDOM
##### Random from 0-9
echo $((RANDOM % 10))
##### Random from 1-10
echo $(((RANDOM %10)+1))
## Xwindow
# X11 GUI applications! Here are some GUI tools for you if you get bored by the text-only environment.
##### Enable X11 forwarding,in order to use graphical application on servers
ssh -X user_name@ip_address
# or setting through xhost
# --> Install the following for Centos:
# xorg-x11-xauth
# xorg-x11-fonts-*
# xorg-x11-utils
##### Little xwindow tools
xclock
xeyes
xcowsay
##### Open pictures/images from ssh server
# 1. ssh -X user_name@ip_address
# 2. apt-get install eog
# 3. eog picture.png
##### Use gedit on server (GUI editor)
# 1. ssh -X user_name@ip_address
# 2. apt-get install gedit
# 3. gedit filename.txt
##### Open PDF file from ssh server
# 1. ssh -X user_name@ip_address
# 2. apt-get install evince
# 3. evince filename.pdf
##### Use google-chrome browser from ssh server
# 1. ssh -X user_name@ip_address
# 2. apt-get install libxss1 libappindicator1 libindicator7
# 3. wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
# 4. sudo apt-get install -f
# 5. dpkg -i google-chrome*.deb
# 6. google-chrome
## Others
##### Remove newline / nextline
tr --delete '\n' <input.txt >output.txt
##### Replace newline
tr '\n' ' ' <filename
##### To uppercase/lowercase
tr /a-z/ /A-Z/
##### Compare files (e.g. fileA, fileB)
diff fileA fileB
# a: added; d:delete; c:changed
# or
sdiff fileA fileB
# side-to-side merge of file differences
##### Number a file (e.g. fileA)
nl fileA
# or
nl -nrz fileA
# add leading zeros
##### Combine/ paste two files (e.g. fileA, fileB)
paste fileA fileB
# default tab seperated
##### Reverse string
echo 12345| rev
##### Read .gz file without extracting
zmore filename
# or
zless filename
##### Run in background, output error file
seq 100 &>log &
# or
seq 100 2>log &
# or
seq 100 2>&1| tee logfile
# or
seq 100 2>&1 >>outfile
# 0: standard input; 1: standard output; 2: standard error
##### Send mail
echo 'heres the content'| mail -A 'file.txt' -s 'mail.subject' me@gmail.com
# use -a flag to set send from (-a "From: some@mail.tld")
##### .xls to csv
xls2csv filename
##### Append to file (e.g. hihi)
echo 'hihi' >>filename
##### Make BEEP sound
speaker-test -t sine -f 1000 -l1
##### Set beep duration
(speaker-test -t sine -f 1000) & pid=$!;sleep 0.1s;kill -9 $pid
##### History edit/ delete
~/.bash_history
# or
history -d [line_number]
##### Get last history/record filename
head !$
##### Clean screen
clear
# or
Ctrl+l
##### Send data to last edited file
cat /directory/to/file
echo 100>!$
##### Run history number (e.g. 53)
!53
##### Run last command
!!
##### Run last command that began with (e.g. cat filename)
!cat
or
!c
# run cat filename again
##### Extract .xf
1.unxz filename.tar.xz
2.tar -xf filename.tar
##### Install python package
pip install packagename
##### Delete current bash command
Ctrl+U
# or
Ctrl+C
# or
Alt+Shift+#
# to make it to history
##### Add something to history (e.g. "addmetohistory")
#addmetodistory
# just add a "#" before~~
##### Sleep awhile or wait for a moment or schedule a job
sleep 5;echo hi
##### Count the time for executing a command
time echo hi
##### Backup with rsync
rsync -av filename filename.bak
rsync -av directory directory.bak
rsync -av --ignore_existing directory/ directory.bak
rsync -av --update directory directory.bak
rsync -av directory user@ip_address:/path/to/directory.bak
# skip files that are newer on receiver (i prefer this one!)
##### Make all directories at one time!
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat}
# -p: make parent directory
# this will create project/doc/html/; project/doc/info; project/lib/ext ,etc
##### Run command only if another command returns zero exit status (well done)
cd tmp/ && tar xvf ~/a.tar
##### Run command only if another command returns non-zero exit status (not finish)
cd tmp/a/b/c ||mkdir -p tmp/a/b/c
##### Extract to a path
tar xvf -C /path/to/directory filename.gz
##### Use backslash "\" to break long command
cd tmp/a/b/c \
> || \
>mkdir -p tmp/a/b/c
##### Get pwd
VAR=$PWD; cd ~; tar xvf -C $VAR file.tar
# PWD need to be capital letter
##### List file type of file (e.g. /tmp/)
file /tmp/
# tmp/: directory
##### Bash script
#!/bin/bash
file=${1#*.}
# remove string before a "."
file=${1%.*}
# remove string after a "."
##### Search from history
Ctrl+r
##### Python simple HTTP Server
python -m SimpleHTTPServer
##### Variables
{i/a/,}
# e.g. replace all
{i//a/,}
# for variable i, replace all 'a' with a comma
##### Read user input
read input
echo $input
##### Generate sequence 1-10
seq 10
##### Sum up input list (e.g. seq 10)
seq 10|paste -sd+|bc
##### Find average of input list/file
i=`wc -l filename|cut -d ' ' -f1`; cat filename| echo "scale=2;(`paste -sd+`)/"$i|bc
##### Generate all combination (e.g. 1,2)
echo {1,2}{1,2}
# 1 1, 1 2, 2 1, 2 2
##### Generate all combination (e.g. A,T,C,G)
set = {A,T,C,G}
group= 5
for ((i=0; i<$group; i++));do
repetition=$set$repetition;done
bash -c "echo "$repetition""
##### Read file content to variable
foo=$(<test1)
##### Echo size of variable
echo ${#foo}
##### Echo tab
echo -e ' \t '
##### Array
declare -A array=()
##### Send a directory
scp -r directoryname user@ip:/path/to/send
##### Split file into lines (e.g. 1000 lines/smallfile)
split -d -l 1000 bigfilename
##### Rename all files (e.g. remove ABC from all .gz files)
rename 's/ABC//' *.gz
##### Remove extention (e.g remove .gz from filename.gz)
basename filename.gz .gz
zcat filename.gz> $(basename filename.gz .gz).unpacked
##### Use the squeeze repeat option (e.g. /t/t --> /t)
tr -s "/t" < filename
##### Do not print nextline with echo
echo -e 'text here \c'
##### Use the last argument
!$
##### Check last exit code
echo $?
##### View first 50 characters of file
head -c 50 file
##### Group/combine rows into one row
# e.g.
# AAAA
# BBBB
# CCCC
# DDDD
cat filename|paste - -
# -->
# AAAABBBB
# CCCCDDDD
cat filename|paste - - - -
# -->
# AAAABBBBCCCCDDDD
##### Fastq to fasta
cat file.fastq | paste - - - - | sed 's/^@/>/g'| cut -f1-2 | tr '\t' '\n' >file.fa
##### Cut and get last column
cat file|rev | cut -d/ -f1 | rev
##### Add one to variable/increment a numeric variable (e.g. $var)
((var++))
##### Some handy environment variables
# $0 :name of shell or shell script.
# $1, $2, $3, ... :positional parameters.
# $# :number of positional parameters.
# $? :most recent foreground pipeline exit status.
# $- :current options set for the shell.
# $$ :pid of the current shell (not subshell).
# $! :is the PID of the most recent background command.
##### Clear the contents of a file (e.g. filename)
>filename
##### Unzip tar.bz2 file (e.g. file.tar.bz2)
tar xvfj file.tar.bz2
##### Output a y/n repeatedly until killed
# 'y':
yes
# or 'n':
yes n
# or 'anything':
yes anything
# For example:
yes | rm -r large_directory
##### Create dummy file of certain size instantly (e.g. 200mb)
dd if=/dev/zero of=//dev/shm/200m bs=1024k count=200
# Standard output:
# 200+0 records in
# 200+0 records out
# 209715200 bytes (210 MB) copied, 0.0955679 s, 2.2 GB/s
##### Cat to a file
cat >myfile
let me add sth here
exit by control + c
^C
##### Keep /repeatedly executing the same command (e.g Repeat 'wc -l filename' every 1 second)
watch -n 1 wc -l filename
##### Print commands and their arguments when execute (e.g. echo `expr 10 + 20 `)
set -x; echo `expr 10 + 20 `
##### Print some meaningful sentences to you (install fortune first)
fortune
##### Colorful (and useful) version of top (install htop first)
htop
## System
##### Snapshot of the current processes
ps
##### Check graphics card
lspci
##### Show IP address
$ip add show
or
ifconfig
##### Check system version
cat /etc/*-release
##### Linux Programmer's Manuel: hier- description of the filesystem hierarchy
man hier
##### List job
jobs -l
##### Export PATH
export PATH=$PATH:~/path/you/want
##### Make file execuable
chmod +x filename
# you can now ./filename to execute it
##### List screen
screen -d -r
##### Echo screen name
screen -ls
##### Check system (x86-64)
uname -i
##### Surf the net
links www.google.com
##### Add user, set passwd
useradd username
passwd username
##### Edit variable for bash, (e.g. displaying the whole path)
# 1. joe ~/.bash_profile
# 2. export PS1='\u@\h:\w\$'
# $PS1 is a variable that defines the makeup and style of the command prompt
# 3. source ~/.bash_profile
##### Edit environment setting (e.g. alias)
# 1. joe ~/.bash_profile
# 2. alias pd="pwd" //no more need to type that 'w'!
# 3. source ~/.bash_profile
##### List environment variables (e.g. PATH)
$echo $PATH
# list of directories separated by a colon
##### List all environment variables for current user
$env
##### Show partition format
lsblk
##### Soft link program to bin
ln -s /path/to/program /home/usr/bin
# must be the whole path to the program
##### Show hexadecimal view of data
hexdump -C filename.class
##### Jump to different node
rsh node_name
##### Check port (active internet connection)
netstat -tulpn
##### Find whick link to a file
readlink filename
##### Check where a command link to (e.g. python)
which python
##### List total size of a directory
du -hs .
or
du -sb
##### Copy directory with permission setting
cp -rp /path/to/directory
##### Store current directory
pushd . $popd ;dirs -l
##### Show disk usage
df -h
# or
du -h
# or
du -sk /var/log/* |sort -rn |head -10
##### Show current runlevel
runlevel
##### Switch runlevel
init 3
# or
telinit 3
##### Permanently modify runlevel
1. edit /etc/init/rc-sysinit.conf
2. env DEFAULT_RUNLEVEL=2
##### Become root
su
##### Become somebody
su somebody
##### Report user quotes on device
requota -auvs
##### Get entries in a number of important databases
getent database_name
# (e.g. the 'passwd' database)
getent passwd
# list all user account (all local and LDAP)
# (e.g. fetch list of grop accounts)
getent group
# store in database 'group'
##### Change owner of file
chown user_name filename
chown -R user_name /path/to/directory/
# chown user:group filename
##### List current mount detail
df
##### List current usernames and user-numbers
cat /etc/passwd
##### Get all username
getent passwd| awk '{FS="[:]"; print $1}'
##### Show all users
compgen -u
##### Show all groups
compgen -g
##### Show group of user
group username
##### Show uid, gid, group of user
id username
##### Check if it's root
if [$(id -u) -ne 0];then
echo "You are not root!"
exit;
fi
# 'id -u' output 0 if it's not root
##### Find out CPU information
more /proc/cpuinfo
# or
lscpu
##### Set quota for user (e.g. disk soft limit: 120586240; hard limit: 125829120)
setquota username 120586240 125829120 0 0 /home
##### Show quota for user
quota -v username
##### Fork bomb
# :(){:|:&};:
# dont try this at home
##### Check user login
lastlog
##### Edit path for all users
joe /etc/environment
# edit this file
##### Show running processes
ps aux
##### Find maximum number of processes
cat /proc/sys/kernal/pid_max
##### Show and set user limit
ulimit -u
##### Which ports are listening for TCP connections from the network
nmap -sT -O localhost
##### Print out number of cores/ processors
nproc --all
##### Check status of each core
# 1. top
# 2. press '1'
##### Show jobs and PID
jobs -l
##### List all running services
service --status-all
##### Schedule shutdown server
shutdown -r +5 "Server will restart in 5 minutes. Please save your work."
##### Cancel scheduled shutdown
shutdown -c
##### Boardcast to all users
wall -n hihi
##### Kill all process of a user
pkill -U user_name
##### Set gedit preference on server
# -->you might have to install the following:
apt-get install libglib2.0-bin;
yum install dconf dconf-editor;
yum install dbus dbus-x11;
# -->Check list
gsettings list-recursively
# -->Change setting
# e.g.
gsettings set org.gnome.gedit.preferences.editor highlight-current-line true
gsettings set org.gnome.gedit.preferences.editor scheme 'cobalt'
gsettings set org.gnome.gedit.preferences.editor use-default-font false
gsettings set org.gnome.gedit.preferences.editor editor-font 'Cantarell Regular 12'
##### Find out who has logged in on your system
--> [Quick] Printing out only the names:
users
# --> [Detail] Printing out login time, load average, etc
w
##### Add user to a group (e.g add user 'nice' to the group 'docker', so that he can run docker without sudo)
sudo gpasswd -a nice docker
##### pip install python package without root
# 1. pip install --user package_name
# 2. You might need to export ~/.local/bin/ to PATH: export PATH=$PATH:~/.local/bin/
##### Removing old linux kernels (when /boot almost full...)
# 1. uname -a #check current kernel, which should NOT be removed
# 2. sudo apt-get purge linux-image-X.X.X-X-generic #replace old version
##### Change hostname
sudo hostname your-new-name
# if not working, do also:
hostnamectl set-hostname your-new-hostname
then run:
hostnamectl
# check /etc/hostname
# if still not working..., edit:
# /etc/sysconfig/network
# /etc/sysconfig/network-scripts/ifcfg-ensxxx
# add HOSTNAME="your-new-hostname"
##### List installed packages
apt list --installed
# or Red Hat:
yum list installed
##### Tutorial for setting up your own DNS server
# http://onceuponmine.blogspot.tw/2017/08/set-up-your-own-dns-server.html
##### Tutorial for creating a simple daemon
# http://onceuponmine.blogspot.tw/2017/07/create-your-first-simple-daemon.html
# =-=-=-=-=-A lot more coming!! =-=-=-=-=-=-=-=-=-=waitwait-=-=-=-=-=-=-=-=-=-
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment