Check Linux Version



uname -sr
uname -r
cat /etc/os-release
cat /etc/debian_version


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Basic Commands



cd -                    # go back to previous working directory 
echo > file.txt         # same as touch file.txt
file filename.jpg       # show info on a file
mkdir -p parent/dir0    # create nested directory
touch file              # change the modification time of existing file


cp -a file file1        # archive: preserve attribute like time of file
cp -i file file1        # interactive: prompt for overwrite
cp -uv file*.csv dir1/  # copy only modified files use with -v for verbose
                        # alternative: use rsync command


rm -rf /                # remove everyting in your system !
rm -i file*.txt         # -i - interactive - suggest to use with rm

rmdir dir2              # can't remove, directory not empty
rm -ivr dir2            # used to remove non-empty directory
rm -rf dir1             # force remove (-r == -R)


ls
# -S                # sort (largest first)
# -h                # size in human readable form
# -r                # reverse

ls [Ff]*            # list files start with f or F
ls [!Ff]*           # list files not start with f or F
ls FILE??.txt       # list files named FILE with 2 characters


history             # show command history
!nan                # execute last command starts with "nan"
!13                 # execute line number 13


systemctl status
systemctl list-unit-files
systemctl enable servicename 
systemctl start servicename
systemctl stop servicename
systemctl restart servicename   # systemd only


ifconfig
ip a
curl ifconfig.me                # Get external ip address


tail -f /var/log/demesg         # follow log file update in real time


whoami
id          # user id and groups


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Finding/ Searching FIles and Others


• Syntax: find path -iname exact_filename or filename*

find ~/dir -iname media*        # iname - case insensitive

find ~/Downloads/ -mtime -7     # find files in the last 7 days
find ~/Downloads/ -mtime +7     # find files before the last 7 days
find ~/Downloads/ -mmin -7      # find files in the last 7 minutes

# find files in the last 30 days and above 10MB in size
find ~/Downloads/ -mtime -30 -size +10M

# find executables, man pages, sources
whereis gimp
which gimp


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

About $PATH in Bash


• To avoid injection of evil shell script, always put the full (absolute) path in script files

echo $PATH
$PATH=$PATH:/some/dir       # Prepend to $PATH


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Environmental Variables



echo $USER                      # returns your user name
printenv | less                 # get the full list


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Hard & Soft Links


• Hard link
◇ valid within the same file system
◇ can't link to a directory
• Soft / Symbolic link
◇ can span file systems
◇ can link to a folder

images/12-1.png

cd Public
echo hard > file1
echo soft > file2

ln file1 hardLink       # create a hard link to file1
ln -s file2 softLink    # create a soft link to file 2

cat hardLink            # same as cat file1
cat softLink            # same as cat file2

mv file1 file1.1
mv file2 file2.1

cat file2               # link lost, no content
cat hardLink            # Still exist content (link to inode)

rm file1.1
cat hardLink            # still exist
rm hardLink             # remove hardLink, inode is gone


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Alias


• Create your own command
• To make alias peristent:
◇ Add the above line to nano ~/.bashrc or /etc/bash.bashrc
◇ Logout and login

alias                   # List existing alias

alias ll='ls -l'        # Create new alias
ll

unalias ll              # Unset/ remove alias


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Echo



echo $SHELL                         # shell currently using
echo Some text > file.txt           # save some text in a file
echo $((2+6))                       # returns 8

echo There are 3 spaces here        # There are 3 spaces here
echo "There are 3 spaces    here"   # There are 3 spaces    here

echo two plus one = $((2+1))        # two plus one = 3
echo "two plus one = $((2+1))"      # two plus one = 3
echo 'two plus one = $((2+1))'      # two plus one = $((2+1))


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Escape Character \



# Escape character
echo this cost $10.00               # this cost 0.00
echo this cost \$10.00              # this cost $10.00

echo you & me                       # error
echo you \& me                      # you & me

man echo | grep '\\'                # include lines with \

echo -e "line 1\nline2"             # use -e when you use \n
# line1
# line2
echo line 1$'\n'line 2              # alternate
# line1
# line2


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Bracket expansion



echo {A..Z}                     # print alphbets A to Z
echo number_{1,3,4}             # number_1 number_3 number_4
echo number_{1..5}

touch number_{1,3,4}
mkdir number_{1,3,4}


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Reverse Mouse Button



xmodmap -e "pointer = 3 2 1"


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Stream Editor (SED) Find & Replace



# Stdout
ysed 's/search-str/replace-str/g' filename

# Write to filename
sudo sed -i 's/search-str/replace-str/g' filename


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Why Doesn't ‘sudo cd /var/named’ work?


• Command cd is not a program but an built-in command
• Command sudo only applies to programs
• Workaround:

sudo -i             # elevate to root
cd /var/named
exit


Set Time Zone



sudo dpkg-reconfigure tzdata        # reboot


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Example Usages



• Copy specific files from many directories

# From many directories to one directories
cp dir/*/*.png Pictures/Thumbnails/


• Convert many MOV videos to mp4

for i in *.MOV; do ffmpeg -i $i -vcodec h264 -acodec aac -strict -2 $i.mp4; done


• Resize many images at once

for i in *.jpg; do convert -resize 50% $i re_$i; done


• Rename many files

# Change extension of txt to csv for all txt files
rename txt csv *.txt


• Check bitrate

exiftool -AudioBitrate unknown.mp3      # single file
exiftool -AudioBitrate *.mp3            # all files


• Work with really large files

# Open a gz file with > 100GB
zcat filename.gz | less


• Replace a string in many files

wc -l file.csv      # number of lines
head file.csv       # top 10 lines

for i in *.csv; do sed -i 's/search_str/replace_str/g' $i; done


• Impress your friends

sudo apt install hoolywood  wallstreet # available in unstable & testing depo
sudo apt install cmatrix

Index