As a Concept Director, I don't have the chance to just dive into a single language. Switching between different languages causes forgetting basic tricks. Time is consumed by searching over codes in old repositories.
The basic tricks are not worthy to write into individual posts, so list here would be a better way to record and look up.
Sure, the list is growing as long as I am coding in Bash.
Switch to root
sudo su
change to root, but not environment variables.
sudo su -
change to root as well as the environment variables.
sudo -i
used not often
Curl
curl -s
mute curl
curl -O
Write output to a local file in current working directory, named like the remote file we get.
Create new file
touch /tmp/payTime
an empty file called payTime created under /tmp.
Make new directory
mkdir /tmp/business
made a folder called "business" under /tmp, if /tmp exists.
mkdir /tmp/company/business
made a folder called "business" under /tmp/company, even /tmp and /company do not exist.
Quick go back to the working directory of current user
cd ~
or cd
Make a .sh file executable
chmod +x
or chmod a+x
makes it executable for everyone.
chmod u+x
makes it executable for current user.
chmod g+x
makes it executable for current group.
chmod o+x
makes it executable for others.
Cron
crontab -l
list current user's existing cron jobs.
crontab -e
edit.
crontab -r
remove all cron jobs.
Variable
${var}
= $var
. The former is really useful when the latter meets conflict with the content behind. e.g.
folder="/usr/share/"
file="password.txt"
cat $folderfile #this would meet a big problem.
cat ${folder}file #this is good to use.
export var=0
set a new environment variable in the current session of the current shell. Would dismiss in the next login.
awk
awk -F@
regards @ as the divider.
awk '!\name\ && \running\ {print $1}'
ignore the lines contains "name", remain the lines contains running, then grab the first column.
Date and Time
date
show current date and time in standard format.
date +"%Y-%m-%d %H:%M:%S"
show in "2020-05-20 15:49:28" format.
date -d "+1 hour 30 minutes" +"%Y-%m-%d %H:%M:%S"
show in "2020-05-20 15:49:28" format, plus 90 minutes based on current Time.
date +%s
count the seconds from 1970-1-1 0:0:0 (Epoch Time).
date -d @1344127275 +"%Y-%m-%d %H:%M"
count 1344127275 seconds from the Epoch Time, show in "2012-08-05 08:41:15" format (the timestamp Curiosity rover lands on Mars 🎉).
Four Operations
echo $((1+2*3-4/5))
integer only. The result is also integer.
echo 1.2+2.3*3.4-4.5/5.6 | bc -l
decimal is allowed. the result is 20 decimal digits.
printf %.3f $(echo 1.2+2.3*3.4-4.5/5.6 | bc -l)
to round 20 decimal digits down to 3.
Mutt
mutt -e "set realname='Kill Devils'"
show a custom name in mail instead of the string before @ of your email address.
Compare numbers
Compare decimals:
if (( $(echo "50.01 >= 50.00" | bc -l) )); then
echo "50.01 is greater equal than 50.00"
fi
Compare integers:
if [[ 51 -ge 50 ]]; then
echo "51 is greater equal than 50"
fi
Background job
bash update.sh &
job would run in background, but would terminate when the current session is exit.
nohup bash update.sh &
nohup = no hang up. job would not be affected by current session logging out.
Redirection (stdin, stdout, stderr, screen. std = standard)
bash update.sh > output.out
stdout redirects from screen to "output.out" file.
bash update.sh 2> output.err
stderr redirects from screen to "output.err" file.
bash update.sh &> output.log
both stdout and stderr redirect from screen to "output.log" file.
bash update.sh | tee output.log
show everything on screen, redirect everything into "output.err" file as well.
Move files
mv -f
force move, ignore conflicts.
Top comments (0)