Linux Filesystem
/bin binaries
/boot boot files
/dev device files
/etc config files
/home home directories
/tmp temporary files
/var logs
Package System
.deb: Debian based: Ubuntu (apt)
.rmp: Fedora, RHEL, Suse, Photon OS, Centos (yum)
Users & groups
sudo useradd -m chang
sudo useradd -g k8s chang
chmod ugo+rwx
chmod u+rwx
chmod u+x
Access Control Lists
getfacl # Get access control list
setfacl # set access control over file
CPU and Processes
top
lscpu
ps
kill
memory check
free
vmstat
CPU and IO check
iostat
Disk space check
df -T du -h -d 1 /home/chang
fdisk -l # Check file sizes
lsblk -f # This shows type mount points
Symbolic Link
ln -s /usr/share/doc .
Cat
sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)
cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF
cat <<EOF | grep 'b' | tee b.txt
foo
bar
baz
EOF
HOST=$(kubectl -n $NAMESPACE get secret audit --template '{{ .data.host | base64decode }}')
cat <<EOF | kubectl -n default apply -f -
apiVersion: v1
kind: Pod
metadata:
name: audit-socat
spec:
containers:
- name: socat
image: alpine/socat
args:
- TCP4-LISTEN:27017,fork,reuseaddr
- TCP4:$HOST:27017
EOF
kubectl -n $NAMESPACE port-forward pod/audit-socat 27017
– Usage (reference)
# Using “-” to Specify a Standard Input
<htop-2.2.0.tar.gz | tar -xzf -
wget -c http://geolite.maxmind.com/eoLite2-Country.tar.gz -O - | sudo tar -xz -C /etc/nginx/
curl http://geolite.maxmind.com/eoLite2-Country.tar.gz | tar -xz
awk ( drived from the deveper names)
- Advanced filtering
- Data validations
- Custom transformations
- Formatted report FS: fild separator. Default :’t’ $0= whole line, $1=1st field,$2=2nd field NF: Number of fields in current record NR: Current line number RS: record separator. Default: “n” print(): display message on screen length(): length of a string substr(): extract portion of a string gsub(): replace part of a string with another string index(): find position of a string tolower() toupper()
awk '{print $1, $6}' /etc/passwd # print from col1 , col 6, This has t delimeter in this file. So onlycol1 will be displayed
awk -F: '{print $1, $6}' /etc/passwd # show username and home directory
echo "mary has a little lamb, little lab, little lamb" | awk '{print substr($0, 1,4)}' # mary
echo "mary has" | awk '{if (length($0) > 10) print "String too long"; else print length($0)}' # 8
cat *.log| awk '{print ($9)} ' | sort | uniq -c
sed (stream editor)
- Search and replace
- Delete
- Insert
- Append
- in-place edit
sed -e 's/BOOK: //' books.cvs # remove BOOK:
sed -e 's/book: //I' books.cvs # remove BOOK: or BoOk: book:
sed -e '1, 3 s/book: //I' books.cvs # remove only from line 1 to line 3
sed -e 's/book: //I' -e 's/author: //I' books.cvs # remove book: and author: with case insensitive
sed -i 's/book: //I' -e 's/author: //I' books.cvs # edit files in place
paste
Create new dataset from input files
paste -d : statesfile capitalfiles
cut
Used to extract selected parts of lines from one or more files
cut -f 1 -d , continent_country_capital.csv
cut -f 1 -d , continent_country_capital.csv | sort | uniq -f
cut -f 2,3 -d , continent_country_capital.csv
sort
sort file1
sort -r file1 # reverse order
sort -k 1,2 file1 | sort -o file2 # sort from col1 and col2 and outputs to file
sort -n -k 2 -t , -r file1 # numeric values with 2nd col from comma delimeter
sort -u -f fruits.txt # sort with only unique names and ignore cases (-f)
uniq
uniq cannot remove non-adjacent repeated values
sort fruits.txt| uniq -i # show unique fruits
sort fruits.txt| uniq -i -c # show how many times unique fruits are repeated
sort fruits.txt| uniq -i -c | sort -r # get from most repeated fruit to least
tr (translate)
cat file1 | tr [:lower:] [:upper:] # change all words to upper
cat file1 | tr \t , # place tab to comma
cat file1 | tr \t ,| tr -s \n # -s replaces repeated new lines to one newline
wc (word count)
wc file1 # shows lines | words | characters | filename
wc -m file1 # characters
wc -w file1 # words
wc -l file1 # lines
wc -c file1 # bites```
diff
“<” means: this need to be removed or changed in the first file
“>” means: this line needs to be added to the first file
diff file1 file2
diff -y file1 file2 # easier to identify side by side
diff -u file1 file2 # unified comparison
diff -i file1 file2 # case insensitive
diff -B file1 file2 # Ignore blank lines for comparison
diff -w file1 file2 # Ignore white spaces
diff -r /bin/ /sbin/ # comparing directories```
diff -r /bin/ /sbin/ | grep -i "only in /bin"
head and tail
head -n 20 /var/log/messages tail -n 20 /var/log/messages tail -vn 20 /var/log/messages # you can see the tails as system added new lines
cat
cat > outfile.txt << EOF some text
> EOF
find
find / -type f -name *.log find -type d -name www find . -type f -name ".*" # find all the hidden files in the current directory
grep
grep 1978 oscars.tsv| sort > 1978_films.txt
cut -f 3 oscar.tsv | grep 4 | wc -l grep -i "system" /var/log/messages # lower & upper cases
grep -i -w "system" /var/log/messages # Only show system insteadof systemd, esystem
grep -i "shut *down" /var/log/messages # when we do not know shutdown or shut down
grep -i -n "shut* down" /var/log/messages # Added line number
grep -i -n -B 2 -A 3"shut *down" /var/log/messages # show 2 previous lines and 3 following lines if matching
grep -v "system" shut* down" /var/log/messages # all lines excluding shut down or shutdown
grep -v -c "system" shut* down" /var/log/messages # show number of lines that excluded
grep -i -w -r 'apache " var" # Directory search
grep -i -w -r -l 'apache " var" # Directory search and display file pathes only
grep tiny * # all files from current folder
File information
file sh.sh
sh.sh: Bourne-Again shell script, ASCII text executable
Last argument
vi Workspace/pyPractice/foo1.py
python3 !$
If tty is messed up in terminal, use
reset