Bash
Introduction | |
SSH | |
Autocomplete | |
Arguments | |
View files | |
Edit text files | |
mkdir: create directories | |
Redirect output | |
Append data to file end | |
Default software | |
Aliases | |
* | |
exec bash: Restart terminal | |
Related topics |
Introduction
$ in promt means, that you are using Bash % is for Zsh
~ before $ means you are in home
To execute the command you need to press Enter
The ls command shows the contents of the current directory
ls
docker Documents Music notes.txt Pictures python snap Templates yandex-tank Desktop docker-lab Downloads node_modules Public shell_scripts ssh-com Videos yarn.lock
By command cd you can change the directory
cd Documents
To return to the home directory, it is enough to run
cd
without parameters
To repeat the previous command, just press the up arrow
SSH
To connect to a remote computer by SSH execute
ssh username@hostname
ssh andrei@andrei-ubuntu
To close ssh session execute
exit
Learn more about working with SSH in Linux read the article « SSH Basics »
Automatic addition
When executing cd, it is not necessary to write the full name of the directory.
If you want to go to Documents from your home directory, just type
Doc and press Tab.
If you just type D and press Tab, then Bash will not understand where you want to go -
in Desktop, Documents or Downloads, so nothing will happen (a prompt will appear in Zsh immediately).
But if you
press Tab again - a hint will appear, namely a list of all directories, the name
which starts with D
cd D
Desktop/ Documents/ Downloads/
To go to the parent directory execute
cd ..
To find out the full path to the current execute directory
pwd
Arguments
When you executed cd Documents, cd is a command, Documents is an argument.
To see hidden files in the execute ls directory -a
Where a means All
For hidden files, the first character in the name is a dot
ls -a
. .bashrc Desktop docker-lab .gnupg Music Public snap .sudo_as_admin_successful .Xauthority .. .bash_history .cache .docker Documents .local node_modules Pictures python .ssh Templates yandex-tank .bash_logout .config docker Downloads .mozilla notes.txt .profile shell_scripts ssh-com Videos yarn.lock
-a is a special kind of argument called an option.
Options add additional functionality to teams.
Options start with the - symbol
After -, you can list several options in a row
To see additional information about the files execute ls -l, l means long format
ls -l
total 96 drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Desktop drwxrwxr-x 3 andrei andrei 4096 syys 17 19:09 docker drwxrwxr-x 4 andrei andrei 4096 heinä 19 21:46 docker-lab drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Documents drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Downloads drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Music drwxr-xr-x 2 root root 4096 heinä 18 22:11 node_modules -rw-rw-r-- 1 andrei andrei 1 syys 19 21:40 notes.txt drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Pictures drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Public drwxrwxr-x 2 andrei andrei 4096 syys 19 12:54 python drwxrwxr-x 2 andrei andrei 4096 syys 19 22:01 shell_scripts drwxr-xr-x 3 andrei andrei 4096 syys 15 19:58 snap drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Templates drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Videos drwxrwxr-x 3 andrei andrei 4096 heinä 16 16:55 yandex-tank -rw-r--r-- 1 root root 86 heinä 18 22:11 yarn.lock
To find out what other options the ls execute command has
man ls
The result of this command will be a detailed description of all options. List
long enough to move down the list, press the space bar to
return to the top, press b
To perform a word search, type /the word. To go to
for the next search result, press n
To close man click q
Read more about all ls options in the article
«man ls»
To see additional information about files, including hidden ones and sort the output by the version of the change execute ls -lat
ls -lat
total 176 drwxr-xr-x 31 andrei andrei 4096 syys 20 10:20 . -rw------- 1 andrei andrei 34 syys 20 10:20 .lesshst -rw------- 1 andrei andrei 236 syys 20 10:16 .Xauthority -rw------- 1 andrei andrei 17546 syys 19 23:40 .bash_history drwxrwxr-x 2 andrei andrei 4096 syys 19 22:01 shell_scripts -rw-rw-r-- 1 andrei andrei 1 syys 19 21:40 notes.txt drwxrwxr-x 2 andrei andrei 4096 syys 19 12:54 python drwx------ 2 andrei andrei 4096 syys 17 19:19 .ssh drwxrwxr-x 3 andrei andrei 4096 syys 17 19:09 docker drwx------ 3 andrei andrei 4096 syys 15 20:04 .gnupg drwxr-xr-x 3 andrei andrei 4096 syys 15 19:58 snap drwxr-xr-x 15 andrei andrei 4096 syys 15 19:58 .cache drwxr-xr-x 12 andrei andrei 4096 syys 15 19:58 .config drwxrwxr-x 4 andrei andrei 4096 heinä 19 21:46 docker-lab drwx------ 2 andrei andrei 4096 heinä 18 23:06 .docker drwxr-xr-x 2 root root 4096 heinä 18 22:11 node_modules -rw-r--r-- 1 root root 86 heinä 18 22:11 yarn.lock drwxrwxr-x 3 andrei andrei 4096 heinä 16 16:55 yandex-tank drwxr-xr-x 4 andrei andrei 4096 heinä 16 15:08 .local -rw-r--r-- 1 andrei andrei 0 heinä 16 12:27 .sudo_as_admin_successful drwx------ 5 andrei andrei 4096 heinä 16 12:12 .mozilla drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Desktop drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Documents drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Downloads drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Music drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Pictures drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Public drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Templates drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Videos -rw-r--r-- 1 andrei andrei 220 heinä 16 11:53 .bash_logout -rw-r--r-- 1 andrei andrei 3771 heinä 16 11:53 .bashrc -rw-r--r-- 1 andrei andrei 807 heinä 16 11:53 .profile drwxr-xr-x 3 root root 4096 heinä 16 11:53 ..
Combine several commands into one
To see which terminal you are connected to execute
tty
/dev/pts/31
To make a listing of this file, you can copy the output and paste after ls
ls -l /dev/pts/31
crw--w---- 1 andrei tty 136, 31 мая 23 13:48 /dev/pts/31
To get the same result faster
ls -l $(tty)
crw--w---- 1 andrei tty 136, 31 мая 23 13:48 /dev/pts/31
Viewing files
To open the contents of a text file execute cat file_name or less file_name
cat textfile
lass book 1
cat will output the contents to console output. less will open the file in the entire window.
Navigating through a file opened with less is the same as navigating through man.
Whitespace | down |
b | up |
/ | search |
n | next search result |
q | to close |
If you are trying to open a binary file using less, you may get a warning
<"file1" may be a binary file. See it anyway?
cat will open such a file without warning
To continue, press y. The result will most likely not please you - you will get a hard-to-read set of characters.
<C3>&NU_p<C6>x<E6><AC>^N<B4>E<EA>^B<D1>E^U<AB>^A3Fy<A3>^T^N<B5>7`^D<8E><F4><9F><8D>^M<E8>y<CD>^T6^A<DF>^T<83><8A>^F{џZ<8B><8C>p4S^G^TUs <C5>H@<DB><C3>}*d<C0>$<D4>Q^@Fq<83>S.:<81>\ƌp<E6><83>ӭ"<9F>j <C8><E9>I<92>/<BD>.i)hB \P(<A6>^B<D2>^Q<91><8A>)h^A*;<A9><96><DA><DA>K<86>Ve<8D>K<B0>Q<93><81><C9><C5>KU<F5>7X<B4>ۙ]<B6><A2>D<CC><C7>n<EC>^@9<E3><BD>RZ<8C><A5><E1>mv<D7><C4>~^^<B4><D7>4<F8><E7>^V<B7><91><89>a<F3>Sk<95>#<AE>3X<9A>7 <C4>^]'W<D4>m<EC>ml<B5>1<E7><DE><DC>X<89><9E><DB>^Q$Ђ]Y<B3><C7>B3<EA>^M`<FC>^P<D5><E3><87><U+009E>^Z<F0>Ǖ"<DD>[<E8><82>{<A0><E8><E0>Dw*<AA>30<FB><C4><EF><E3><FD><92>k^G<E1>t<B1>i<9E>%<BC><96>g<B9><B9>}O<C4>:<85><B4>6<C6>^V<D9>^P3K7<DA>^FG^K<B7>^K<92>y&<B4><E4>^]<8E><EB><C4>?^QtM <EF>T<B6><BE><B7><D4>7<E9>f<D7><ED>% ^E@<B8>m<B1><90>I^@<8C><F0>Ol^ZՓĶ<D1><E8>ڶ<AB>5<9D><EC>0<E9><86>a6<F8><86><E6><F2><F3><B9><94>^C<F3>^L^Lם<FC>a<F0>-<F7><88>|Ur<D6><C8>M<9E><A7>Ỉ.<C8>=g<B7>u<92><D8><FA>g{g覺<88><D6>h<FE>^M\I<AA>,<A9>wu<A4>I=<DA>^PIY%<8C><B3>.9<EE><C5>q<8A>9^U<84>t:^?<88>,<EF><FC>;a<AE>[Er<D6><FA><84>i-<AC>f<J<E1><97>p<F9>s<D7>^Y?AW4<8D>J<D7>T<B4>[<BB>97<C4>Y<93>$c^L<AC>T<8F><A8> טæǪ|^S<F0>F<99>zڭ<B4><8D>md<AB>{f<A5>'<B0><9D> c<E7>c^G^AJ^P ㎵<DA><FC>7:<BA><F8>^^X5˸o<EF>!<96>D7<B0><C1><E5>-҇m<B2><ED><E9><96>\^RA<C1>9<E9>҉AZ<E8>^N<8E>Y^V8<9A>I^]Q^P^Vfc<80>^@<EA>I<AC>m'<C4>vZ<95><EC>v<90>y<9B>偮b<84>,<D1>^B^@u><87> <FD>(<F1><EE><9B>u<AC>xESC]<D2>ld<F2><EE><AF>4<E9><ED><E1>oGx<D9>G<EA>kESC<E1>̩&<95><A1><C2><D6>ѭƛ<A3><C7>kx<^Rb0рx#tm<9F><F7>G<E3>1<8D><C0><EA> <D4>mf<D4><EE><B4>اF<BB><B6><8E>9e<8C>uE}<C1>I<FA><EC>oʲ<F5><AF>^WiZF<B0>t<BB>ߴ$<A9>f<D7><D2>8<8F>(<90>+^Eg'<^@O'<B0><AE>^_O<D4>#<B7><F8><DB>i<AC>Gs^L<B6>:<FD><8C><F6>-$n<D8>^R[ȭ^V<EC><80>^A<C3>H<A3><9E>r^EQ<F8><B5>8^?^^ߤ&yJxB<F0>=<BC>Q^F^W'<CD>Wh <C6>rʤm^G<A1>5q<82>^]<8F>I<F1>'<8A><B4><CD>^KN<B0><D4>.<8C><93>[_<DC><C3>m^Cۯ<99><BD><E6> G<8F>f$^L<FB>Ս;<C4>^Ze<F5><84><F7><D0><DD>G<E4>ۼ<A9>9c<83>^KDvȭ<EE><AC>1<F9>^^<84>^S<E7>?^T<AF>l<EF><FE>^Zx^<E7>N <82><E2><CE>ݵ<AD>1<E1><8D>"b<D1>E^\<EB><9E>1<90><AA><A0><92>N09<ED>QIa^?<E2>^O<85>^^8<F0><FE><97>g5<86><B7>%<C5><F4>fGR<9F>k<97>y)(8<C1>2F#9^X^_0<C0><C0>^@S<8A>^K^^<A1><A5>j<D0><EA>^RO^Tj<F1><CB>^PV1<BA>ᶶv <B7><D0><E0><E3><E8>j<BF><85><BC>Ec<E2>(oe<B0>Y<D4>Y^Ke8<95>6<95><96>3<87>^<BC><E0><F7><AE>wB<B3><B9><BB><F8><96><FE>"<B6>i^SH_^O<C3>f<C1><F2>^D<B3><99>Y<86>A<EE><8A>1<9F><FA>hk<9F><F8>U<E2>ESCESCmCR<D3>C <C9>5֩<E2><AD>NH^@<88><FF>^@<A9>^D<BE><E2>F@^_(^Y$f<93><8A>Acд<BF>^QZj>#<D4><F4>(!<B9>^W^Zg<97><F6><96>h<F0><83>z<EE>\6y<E3>=<AB>d<F4><AF>1<B2><D5>WE<F8><8D><E3>k<B9>a<95><CD><CC><FA>]<AD><A8><90><C7><D8>t ^E<81>'<D0>^Z<EE><FC>;<AD><DA>k<BA>y<BF><B1>Y<C4>"Y"<FD><F4>E^X<94>m<A4><80>{d^\^^<F4><9C>l<AE>I<A6>("<8A>*U<80>Lr^O<S<87>ZJ*<A2><80>u^T<99><A0>V<9C>ɈSH:<D0>h^T<80>O<D4>PzQ<C6>x<E3>ڑ<BD><E9>1<86>=M!<CE>^? <AD>)<C7>zi<F4>&<A4>^C<9A>(<FC>h<A0>
To close the window with these characters, try pressing q or enter the command reset
In order not to get into such a situation, you can check the file type before opening it. This can be done with the command file
file file1
file1: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, baseline, precision 8, 325x500, components 3
It turns out that
file1
is not a text but an image in JPEG format
You can try to open the image from the terminal with the command xdg-open,
it's not a fact that it will work on your system, I have in
Ubuntu 20.4
it turned out.
xdg-open file1
Editing text files
To edit a text file, you need to open it in one of the editors.
Most likely you already have either nano installed or
vi
in nano, everything is pretty obvious about vi I advise you to read a separate article here
You can create a new file with the command touch
touch new_file
You can delete the file with the command rm
rm new_file
Create multiple files at once:
touch file1 file2 file3 file4
To create a file with spaces in the name, you need to put the name in quotation marks:
touch 'file with spaces in name'
You can create a new directory with the command mkdir
mkdir stands for Make Directory
mkdir new_folder
If you need to create nested directories, use the -p (parent) flag
mkdir -p city/district/street
To create a directory and go there immediately use
mkdir example && cd $_
To exit the current process, press CTRL + C
It is better not to use the following characters for file and folder names:
' " ` { } ( ) < > [ ] ! ? & ] : ; \ ^
$ @ ~ * #
Try opening the file with cat -vet
cat -vet somefile
You can see that there is $ at the end of the line, as well as the encoding of Cyrillic characters.
Redirecting output
The output can be redirected to a file using > or >>
> will delete the previous entries from the file
If you execute the redirect twice to the same file. Only the last one will remain
echo "Great laptops here" > log.txt
echo "Books with delivery in Russia here" > log.txt
vi log.txt
Books with delivery in Russia here
As you can see, the entry about laptops has not been preserved
How to add an entry to the end of a Bash file
To not overwrite and add a new line, you need to use >>
echo "Great laptops here" >> log.txt
echo "Books with delivery in Russia here" >> log.txt
vi log.txt
Great laptops here
Books with delivery in Russia here
The result of the command can be sent to another command.
If you are listing a directory with a large number of files
with the ls command, for example ls/usr/bin
the result won't fit on one screen.
It may be convenient to immediately forward this output to less
ls /usr/bin | less
To find the lines in the file with the mention of the desired word, use the command
grep
Let's say you have a list of site partners
aredel.com
which is called
partners.txt
.
If you run
less partners.txt
The list will be very long
Авиасейлз Travel
Booking.com Hotels
Hotellook Hotels
TopBicycle.ru Bicycles
Велодрайв Bicycles
HeiHei.ru Travel
Xiaomi Android
Samsung Android
Book24 Books
GeekBrains Education
Нетология Education
SkillBox Education
Pluralsight Education
СовКомСтрахование Insurance
Полис 812 Insurance
Полис 812 Insurance
Vivo Android
Reg.ru Hosting
…
After the name comes the category to which the partner belongs.
Let's say you want to find all the partners of the Android category
grep Android partners.txt
Xiaomi Android
Samsung Android
Vivo Android
This list can be sorted alphabetically and saved in file android_partners.txt
grep Android partners.txt | sort > android_partnets.txt
cat android_partners.txt
Samsung Android
Vivo Android
Xiaomi Android
Let's calculate how many partners in the Education category are in this list.
cut -f 2 partners.txt | grep Education | wc -l
4
cut -f 2 leaves only the second column
grep Education leaves only Education
wc -l counts lines (word count -lines)
Indeed, there are four platforms in the education category
GeekBrains,
Нетология,
SkillBox и
Pluralsight
PATH
Check PATH
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Add the new_bin directory to PATH
export PATH=$PATH~/new_bin
Default programs
Set nano as the default editor with the command
export EDITOR=nano
To make this choice permanent, you need to make the appropriate entry in
.profile
(bash) или
.zshenv
(zsh)
You can also register there export PATH=$PATH~/new_bin
export EDITOR=nano
export PATH=$PATH~/new_bin
Aliases
If you never use the ls command, but often run ls -a
you might have thought - is it possible to somehow configure ls so that it
always did lsa
It's not difficult to do this, and such renaming is called aliases. With their
you can use it not only to redefine existing ones, but also to invent
brand new commands.
export EDITOR=nano
export PATH=$PATH~/new_bin
alias ls="ls -la"
Get a list of existing aliases you can use the command
alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias ll='ls -alF' alias ls='ls --color=auto'
If you added an alias to
.profile
and it doesn't work - try restarting
the terminal.
If it doesn#39;t help, write in
.bashrc
.
If it doesn#39;t help, create a file
.bash_aliases
and write it there.
Those who write code on Python it is convenient to make an alias python - python3 to use the third Python and do not specify 3 everywhere.
alias python="python3"
alias pip="pip3"
*
It is often convenient to use templates to work with a large number of files.
Let's say you want to list only .pdf files
ls *pdf
Find all the lines in the filename file that contain the letters a r g in a row.
grep *arg* filename
Restart the terminal
To restart the terminal without leaving it, execute
exec bash