Last active
September 15, 2017 03:09
-
-
Save onceupon/b225f26c4cbc6eb4c41c3a4f09ba9ed7 to your computer and use it in GitHub Desktop.
Revisions
-
onceupon renamed this gist
Sep 15, 2017 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
onceupon created this gist
Sep 15, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,1979 @@ # ### 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' [email protected] # use -a flag to set send from (-a "From: [email protected]") ##### .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-=-=-=-=-=-=-=-=-=-