How to use the shell, terminal and the advanced tools
Introduction
Why use English instead of Chinese when writing a blog? As time goes by, the more I have learned, the more I have to handle with the English documents or papers. So, I realized it was time for me to adapt to the full English environment to improve my ability.
Though it's not easy for me to write a blog in English, as my mother tongue isn't English, I still write this blog as the first step to determine that I will make full use of my energy to do so.
Just start it from "The Missing Semester of Your CS Education".
Catalog
Permissions
User
-
root
can do anything -
# : a root(shell) -
$ : not a root(shell) -
sudo : run command as a root -
sudo su : switch as a root user
Files and Directories
-
ls -l : gives the additional information-
---------- : 1+3+3+3 -
d--------- : directory-
--------- : permissions-
1-3
--- : set for the owner of the file -
4-6
--- : set for the group of the file -
7-9
--- : set for the others of the file -
--- : read(r ), write(w ), execute(x )-
File: allowed to read, write, and execute this file
-
directory :
- read: allowed to see which files are inside this directory
- write: allowed to rename, create, or remove files within that directory
- execute: allowed to enter this directory
-
- : do not have that permission
-
-
How about
7 ?-
--- can be present by using the three bits binary digit -
7 =111 : rwx-
1 : set the permission -
0 : not set the permission
-
-
-
-
-
Command
-
date : show the time -
echo : display the given arguments that are separated by whitespace-
If the arguments consist of multiple words
Use the
"" or' to quote it. -
You can use
\ to escape single characters
-
-
which : allows us to know the path of the program that we want to run -
tee : write the contents of input to a file and to the standard out -
mv : change the location or name of the file -
rm : remove a file-
rm -r : remove a directory and all the files within it
-
-
rmdir : remove the empty directory -
mkdir : create a new directory -
man : for manual pages of the program -
cat : cat< files> standard output -
cd : change the current working directory-
~ : home directory -
- : previous directory
-
-
tail : Print the last 10 lines of each FILE to standard output -
pwd : Print the name of the current working directory. -
find -
xdg-open -
We can give a path to
ls by offering arguments(flags | options)-
flags and options usually start with a
- -
--help can print out a bunch of information about that command-
Usage
-
... : means zero or one or more options -
[] : means optional
-
-
Funtion description
-
flag:
- + single letter- No value content also is a flag
-
option: anything that does take a value
-
-
-
In reality, we don't need to memorize them all, because we can query the usage of the command by adding the --help or use the man for more information about it.
stream
-
Every program by default has two primary streams
-
Input stream : keyboard(default)
-
output stream : terminal(default)
-
rewire these streams
-
< : rewire the input for this program to be the contents of this file -
> : rewire the output for this program to be the contents of this file
-
-
>> : append the content but not overwrite the original one.
-
-
| : left program output right program input
Path
When we simply type the echo hello or date, it will work and print the result on the terminal, but how can our shell locate them? The answer is: by paths.
Our shell can locate the program through the environment variable. Paths are a way to name the location of a file on your computer.
-
Environment variable: a variable
Things that are set whenever you start your shell
-
Example:
echo $PATHIt shows you all of the paths on my machine that the shell will search for programs
-
What is paths?
- Linux/macOS:
/ separate the paths - Windows:
\ separate the paths - Absolute paths: fully determine the location of a file
- Relative paths: relative to where you currently are
- Command
pwd can show the present working directory
- Linux/macOS:
-
Working directory
All the relative paths are relative to the current working directory- Configure the terminal can show the full path
-
. : the current directory -
.. : the parent directory
Run program
-
Methods for running the program anyway
- method1: give the name of the program and let the shell figure out where it is as if you have added the absolute paths to the
$PATH - method2: give the absolute paths of the program
- method1: give the name of the program and let the shell figure out where it is as if you have added the absolute paths to the
-
Program always works on the current working directory(without any other arguments)
-
Command
ls can list all the files in the current directory -
In fact, you can regard the shell and the Bash(Bourne Again Shell) as a kind of programing language
- You can run a program with arguments
- You can do things like while loops, for loops, conditionals, functions and variables
-
ctrl+L : clear the terminal and go back to the top
Exercises
-
Already on Linux -
mkdir missing && cd missing -
man touch -
touch semester -
echo '#!/bin/sh' > semester && echo 'curl --head --silent https://missing.csail.mit.edu' >> semester -
./semester
ls -l
-rw-rw-r-- : no permission to execute the file -
sh semester
#(root) run the/bin/sh
$ run the./semester -
man chmod -
chmod u+x semester
./semester -
./semester | grep 'last-modified' > ~/last-modified.txt -
cat /sys/class/power_supply/BAT0/capacity_level
References
浙公网安备 33010602011771号