some more, some more
This commit is contained in:
parent
92817fef32
commit
056a3b1054
|
@ -525,4 +525,607 @@ Compiled programs contain actual [instructions](https://en.wikipedia.org/wiki/In
|
|||
This means that programs that are compiled are always compiled for a specify architecture which in our case is x86-64.
|
||||
On a Raspberry Pi this would be armhf or arm64.
|
||||
|
||||
## `root` and `/` and `/root` are not the same thing
|
||||
Interpreted programs are not compiled to machine code but when we run them each line is passed to an appropriate **interpreter** and executed **line by line**.
|
||||
The first line of a script is often the path to the interpreter that *understands* the code that will follow.
|
||||
Popular interpreted languages are `bash`, `sh`, `python`, `php`, ...
|
||||
|
||||
We can take it *one* more step forward and peak into the *content* of the files.
|
||||
A nice little program to do this is called `head` who's purpose in life is to show the first few lines of a file.
|
||||
First for `vlc`.
|
||||
|
||||
```
|
||||
waldek@hellodebian:~$ head /usr/bin/vlc
|
||||
ELF>@<40>1@8
|
||||
HHh,h<h<<EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><<EFBFBD>< <EFBFBD><EFBFBD><EFBFBD>DDP<EFBFBD>td###<EFBFBD><EFBFBD>Q<EFBFBD>tdR<EFBFBD>tdh,h<h<<EFBFBD><EFBFBD>/lib64/ld-linux-x86-64.so.2GNUQ<EFBFBD><EFBFBD>4!4w4L<EFBFBD>%<EFBFBD>@T?<EFBFBD>GNU)<EFBFBD>)*<EFBFBD>e<EFBFBD>m9<EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>)F <EFBFBD>, X<EFBFBD>`
|
||||
Pco<EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><EFBFBD>ZD<EFBFBD>
|
||||
<20><>/<2F><><EFBFBD>h<EFBFBD>"<22> _ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTablelibvlc_set_app_idlibvlc_newlibvlc_set_user_agentlibvlc_get_changesetlibvlc_get_versionlibvlc_set_exit_handlerlibvlc_add_intflibvlc_playlist_playlibvlc_releasesigwaitflockfilepthread_killpthread_sigmaskpthread_mutex_lockpthread_mutex_unlockfunlockfilesigactiondlsymdlerrorfflushsignal__stack_chk_failabortisattysigemptysetrand_r__fprintf_chksigaddsetmemcpystderrsigdelsetalarmfwritegeteuid__vfprintf_chk__cxa_finalizepthread_self__libc_start_main__register_atforklibvlc.so.5libpthread.so.0libdl.so.2libc.so.6GLIBC_2<EFBFBD>ri5GLIB<EFBFBD>ti.14GL<EFBFBD>u<EFBFBD>i2.4Glh<EFBFBD>p<EFBFBD>@<40>?<3F>?GLIBC_2.3.G u<>i lW u<>i lb<6C><62>xii
|
||||
<EFBFBD>?
|
||||
<20>?<3F>?) @*<2A>><3E>><3E>><3E>><3E>><3E>><3E><>> <09>>
|
||||
??? ?(?0?8?@?H?P?X?`?<3F>h??x?<3F>?<3F>?<3F>? <20>?!<21>?"<22>?#<23>?$<24>?%<25>?&<EFBFBD>?'<27>?(H<>H<EFBFBD><48>/H<><48>t<EFBFBD><74>H<EFBFBD><48><EFBFBD>5<EFBFBD>.<2E>%<25>.@<40>%<25>.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%z.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%r.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%j.h<><68><EFBFBD><EFBFBD><EFBFBD>%b.h<><68><EFBFBD><EFBFBD><EFBFBD>%Z.h<><68><EFBFBD><EFBFBD><EFBFBD>%R.h<><68><EFBFBD><EFBFBD><EFBFBD>%J.h<>p<EFBFBD><70><EFBFBD><EFBFBD>%B.<2E>`<60><><EFBFBD><EFBFBD>%:.h <09>P<EFBFBD><50><EFBFBD><EFBFBD>%2.h
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD>%*.h
|
||||
<20>0<EFBFBD><30><EFBFBD><EFBFBD>%".h
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%.h<><68><EFBFBD><EFBFBD><EFBFBD>% <20> <20><><EFBFBD><EFBFBD>%<25>.h
|
||||
.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%<25>-h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%<25>-h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%<25>-h<><68><EFBFBD><EFBFBD><EFBFBD>%<25>-h<><68><EFBFBD><EFBFBD><EFBFBD>%<25>-h<><68><EFBFBD><EFBFBD><EFBFBD>%<25>-h<><68><EFBFBD><EFBFBD><EFBFBD>%<25>-h<>p<EFBFBD><70><EFBFBD><EFBFBD>%<25>-h<>`<60><><EFBFBD><EFBFBD>%<25>-h<>P<EFBFBD><50><EFBFBD><EFBFBD>%<25>-h<><68>@<40><><EFBFBD><EFBFBD>%<25>-h0<68><30><EFBFBD><EFBFBD>%<25>-h<> <20><><EFBFBD><EFBFBD>%<25>-h<><68><EFBFBD><EFBFBD><EFBFBD>%<25>-h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>L<EFBFBD><4C>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD>S<EFBFBD>[Hc<48>H<EFBFBD>G<EFBFBD><47><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>:<3A><><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>-<2D><><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
L<><4C>
|
||||
H<><48>H<EFBFBD>5<EFBFBD>
|
||||
fHn<48>H<EFBFBD>BfHn<48>H<EFBFBD><48> H<><48><EFBFBD>fl<66>I<EFBFBD>H)<29>L<EFBFBD>t$L<><4C>I<EFBFBD><49><EFBFBD>H<EFBFBD><48>L<EFBFBD><4C><EFBFBD>I<EFBFBD>~<7E>o<EFBFBD><6F><EFBFBD>Lc<4C>K<EFBFBD><4B><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49>H<EFBFBD><48><EFBFBD><EFBFBD>H<EFBFBD><48>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>5<EFBFBD><35>S<EFBFBD><53><EFBFBD>H<EFBFBD>
|
||||
H<EFBFBD>/
|
||||
L<><4C>H<EFBFBD>5
|
||||
<20>v<EFBFBD><76><EFBFBD>H<EFBFBD>
|
||||
H<>5
|
||||
L<><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>5!
|
||||
L<><4C><EFBFBD>!<21><><EFBFBD>H<EFBFBD>5
|
||||
|
||||
L<EFBFBD><EFBFBD><EFBFBD>'<27><><EFBFBD>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>H<EFBFBD><48><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>S<EFBFBD><53><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>F<EFBFBD><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49><EFBFBD>&<EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>=<3D>*M<><4D>H<EFBFBD><48><EFBFBD>@<40><><EFBFBD>u
|
||||
H<><48><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E><EFBFBD>A<EFBFBD>H<EFBFBD>E<EFBFBD>dH+%(u?H<>e<EFBFBD>D<EFBFBD><44>[A\A]A^]<5D>I<EFBFBD>M<EFBFBD>H<EFBFBD>=\*H<><48>
|
||||
CH<EFBFBD>=L<><4C><EFBFBD><EFBFBD><EFBFBD>)<29>DH<44>=<3D>)H<><48>)H9<48>tH<74><48>)H<><48>t<EFBFBD>f.<2E>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>=<3D>)H<>5<EFBFBD>)H)<29>H<EFBFBD><48>H<EFBFBD><48>?H<><48>H<EFBFBD>H<EFBFBD><48>tH<74>U)H<><48><EFBFBD><EFBFBD>fD<66><44><EFBFBD>=q)u/UH<55>=6)H<><48>t
|
||||
H<>=:)<29><><EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD>I)]<5D><><EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>f.<2E><>1<EFBFBD><31><EFBFBD>$<24><><EFBFBD>@H<>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><>AUI<55><49>ATI<54><49>UH<55><48>SH<53><48>H<EFBFBD><48><EFBFBD>L<EFBFBD>D$@L<>L$H<><48>t7)D$P)L$`)T$p)<29>$<24>)<29>$<24>)<29>$<24>)<29>$<24>)<29>$<24>dH<64>%(H<>D$1<>H<EFBFBD>={(H<>T$ H<><48>$<24>$ <20>D$0H<30>DH<44>T$<24><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><>v1H<31>=B(<28><><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>D$dH+%(uH<75><48><EFBFBD>[]A\A]<5D><><EFBFBD><EFBFBD>H<EFBFBD>=(I<><49>1<EFBFBD><31>
|
||||
H<EFBFBD><EFBFBD>H<EFBFBD>=7 H<>5H<35>=?'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD><65><EFBFBD><EFBFBD>#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>ATI<54><49><EFBFBD>f<EFBFBD><66><EFBFBD>H<EFBFBD>=<3D>'L<><4C>H<EFBFBD>I<EFBFBD><49><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>i<EFBFBD><69><EFBFBD>1<EFBFBD>1<EFBFBD><31>.(<28>f<EFBFBD><66>=(UH<55><48>u#H<>5H<35><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48>t5H<35><48>]<5D><>DI<44><49>1<EFBFBD>H<EFBFBD>
|
||||
<EFBFBD>H<EFBFBD>H<EFBFBD>5<EFBFBD>H<EFBFBD>=7&<EFBFBD><EFBFBD>&<EFBFBD><EFBFBD><EFBFBD><EFBFBD>X1<EFBFBD>Z]A\A]<5D>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD>ff.<2E><><EFBFBD>='UH<55><48>u#H<>5<EFBFBD>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48>t5H<35><48>]<5D><>DI<44><49>1<EFBFBD>H<EFBFBD><48>RH<52>
|
||||
!"<22><><EFBFBD><EFBFBD>H<EFBFBD>H<EFBFBD><48>DESKTOP_STARTUP_ID--no-ignore-config--media-library--dbusvlcorg.VideoLAN.VLCVLC/3.0.16VLC media playerglobalhotkeys,noneVLC is not supposed to be run as root. Sorry.
|
||||
If you need to use real-time priorities and/or privileged TCP ports
|
||||
you can use %s-wrapper (make sure it is Set-UID root and
|
||||
```
|
||||
|
||||
And now of `which`.
|
||||
|
||||
```
|
||||
waldek@hellodebian:~$ head /usr/bin/which
|
||||
#! /bin/sh
|
||||
set -ef
|
||||
|
||||
if test -n "$KSH_VERSION"; then
|
||||
puts() {
|
||||
print -r -- "$*"
|
||||
}
|
||||
else
|
||||
puts() {
|
||||
printf '%s\n' "$*"
|
||||
waldek@hellodebian:~$
|
||||
```
|
||||
|
||||
Notice how the `vlc` file is mostly **not human readable** but we can still make out some keywords?
|
||||
The `which` file however is perfectly readable!
|
||||
The first line of the `which` file is `#! /bin/sh` which is the path to the interpreter.
|
||||
The `#!` is called a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)).
|
||||
We can dig into this to learn more about this mysterious `sh`.
|
||||
|
||||
```
|
||||
waldek@hellodebian:~$ file /bin/sh
|
||||
/bin/sh: symbolic link to dash
|
||||
waldek@hellodebian:~$ which dash
|
||||
/usr/bin/dash
|
||||
waldek@hellodebian:~$ file /usr/bin/dash
|
||||
/usr/bin/dash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=cb6911fd56559717336c938bef1ce479b0a85b35, for GNU/Linux 3.2.0, stripped
|
||||
waldek@hellodebian:~$
|
||||
```
|
||||
|
||||
Surprise surprise!
|
||||
The *interpreter* is a compiled program!
|
||||
When you think about it it does make sense because at the end of the day the computer *only* understands machine instructions.
|
||||
So when you execute a script each line of code is converted to machine instructions on the spot.
|
||||
This makes scripts easier to write but slower at execution.
|
||||
|
||||
## More about paths
|
||||
|
||||
The prompt in our terminal tells us who we are, on which machine, and **where** we are located.
|
||||
This where is symbolized with the `~` character.
|
||||
But where is this where?
|
||||
|
||||
```
|
||||
waldek@hellodebian:~$ pwd
|
||||
/home/waldek
|
||||
waldek@hellodebian:~$
|
||||
```
|
||||
|
||||
The `pwd` program **p**rints our **w**orking **d**irectory, meaning where we are located on our system.
|
||||
A user's home directory is symbolized with this tilde character.
|
||||
We can move around our system with the `cd` command which is an abbreviation of **c**hange **d**irectory.
|
||||
`cd` by itself seems to to *nothing* but this is not the case.
|
||||
It's a *shortcut* to go to your user's home directory.
|
||||
Let's try this out.
|
||||
|
||||
```
|
||||
waldek@hellodebian:~$ cd
|
||||
waldek@hellodebian:~$ cd /usr/bin
|
||||
waldek@hellodebian:/usr/bin$ cd
|
||||
waldek@hellodebian:~$ cd -
|
||||
/usr/bin
|
||||
waldek@hellodebian:/usr/bin$ cd
|
||||
waldek@hellodebian:~$
|
||||
```
|
||||
|
||||
The first line appears to do nothing because we are already in our home directory.
|
||||
Next we move to the directory which contains the programs we discovered before and we see our prompt change.
|
||||
It now shows *where* we are located!
|
||||
The next line takes us back to our home and from there we can move *back to where we were before* with the `cd -` command.
|
||||
This last command is also a handy *shortcut*!
|
||||
|
||||
Moving around is nice but once we arrive at our destination it would be practical to be able to list the files in that directory no?
|
||||
This can be done with the `ls` program.
|
||||
For example.
|
||||
|
||||
```
|
||||
waldek@hellodebian:~$ cd /usr/bin/
|
||||
waldek@hellodebian:/usr/bin$ ls
|
||||
'[' getconf nmtui-hostname systemd-escape
|
||||
7z getent nohup systemd-hwdb
|
||||
7za getfacl notify-send systemd-id128
|
||||
7zr getkeycodes nproc systemd-inhibit
|
||||
aa-enabled getopt nroff systemd-machine-id-setup
|
||||
aa-exec gettext nsenter systemd-mount
|
||||
aconnect gettext.sh nslookup systemd-notify
|
||||
add-apt-repository gio nstat systemd-path
|
||||
addpart gio-querymodules nsupdate systemd-resolve
|
||||
addr2line gjs ntfs-3g systemd-run
|
||||
alsabat gjs-console ntfs-3g.probe systemd-socket-activate
|
||||
alsaloop gkbd-keyboard-display ntfscat systemd-stdio-bridge
|
||||
alsamixer glib-compile-schemas ntfscluster systemd-sysusers
|
||||
alsatplg gmake ntfscmp systemd-tmpfiles
|
||||
alsaucm gnome-calculator ntfsdecrypt systemd-tty-ask-password-agent
|
||||
amidi gnome-calendar ntfsfallocate systemd-umount
|
||||
amixer gnome-characters ntfsfix tabs
|
||||
apg gnome-clocks ntfsinfo tac
|
||||
apgbfm gnome-contacts ntfsls tail
|
||||
aplay gnome-control-center ntfsmove tar
|
||||
aplaymidi gnome-disk-image-mounter ntfsrecover tasksel
|
||||
appres gnome-disks ntfssecaudit taskset
|
||||
appstreamcli gnome-documents ntfstruncate tbl
|
||||
apropos gnome-extensions ntfsusermap tbl-dctrl
|
||||
apt gnome-extensions-app ntfswipe tee
|
||||
apt-add-repository gnome-font-viewer numfmt telnet
|
||||
apt-cache gnome-help numlockx telnet.netkit
|
||||
apt-cdrom gnome-keyring nvlc tempfile
|
||||
apt-config gnome-keyring-3 obamenu test
|
||||
apt-extracttemplates gnome-keyring-daemon obconf thunar
|
||||
apt-ftparchive gnome-logs obexctl Thunar
|
||||
apt-get gnome-maps objcopy thunar-settings
|
||||
apt-key gnome-music objdump thunar-volman
|
||||
apt-listchanges gnome-screenshot obsession-exit thunar-volman-settings
|
||||
apt-mark gnome-session obsession-logout tic
|
||||
apt-sortpkgs gnome-session-classic obxprop time-admin
|
||||
ar gnome-session-custom-session oclock timedatectl
|
||||
arch gnome-session-inhibit od timeout
|
||||
arecord gnome-session-quit odp2pdf tjbench
|
||||
arecordmidi gnome-shell odp2ppt tkjpeg
|
||||
as gnome-shell-extension-prefs ods2pdf tload
|
||||
aseqdump gnome-shell-extension-tool odt2bib toc2cddb
|
||||
aseqnet gnome-shell-perf-tool odt2doc toc2cue
|
||||
aspell gnome-software odt2docbook toe
|
||||
aspell-import gnome-sound-recorder odt2html top
|
||||
atobm gnome-system-monitor odt2lt totem
|
||||
atril gnome-terminal odt2pdf totem-video-thumbnailer
|
||||
atril-previewer gnome-terminal.wrapper odt2rtf touch
|
||||
atril-thumbnailer gnome-text-editor odt2sdw tput
|
||||
awk gnome-thumbnail-font odt2sxw tr
|
||||
axfer gnome-todo odt2txt traceproto
|
||||
b2sum gnome-tweaks odt2txt.unoconv traceproto.db
|
||||
baobab gnome-weather odt2xhtml traceroute
|
||||
base32 gnome-www-browser odt2xml traceroute6
|
||||
base64 gold ooxml2doc traceroute6.db
|
||||
basename gpasswd ooxml2odt traceroute.db
|
||||
basenc gpg ooxml2pdf traceroute-nanog
|
||||
bash gpg-agent open tracker
|
||||
bashbug gpgcompose openbox transmission-gtk
|
||||
bccmd gpgconf openbox-lxde transset
|
||||
bdftopcf gpg-connect-agent openbox-session troff
|
||||
bdftruncate gpgparsemail openssl true
|
||||
bf_compact gpgsm openvt truncate
|
||||
bf_compact-bdb gpgsplit operon trust
|
||||
bf_copy gpgtar orca tryaffix
|
||||
bf_copy-bdb gpgv orca-dm-wrapper tset
|
||||
bf_tar gpg-wks-server os-prober tsort
|
||||
bf_tar-bdb gpg-zip p11-kit tty
|
||||
bitmap gpic p7zip tzselect
|
||||
bluemoon gpicview pacat ucf
|
||||
bluetoothctl gprof pacmd ucfq
|
||||
bluetooth-sendto grep pactl ucfr
|
||||
bmtoa grep-aptavail padsp ucs2any
|
||||
bogofilter grep-available pager udevadm
|
||||
bogofilter-bdb grep-dctrl pa-info udisksctl
|
||||
bogolexer grep-debtags pamon ul
|
||||
bogolexer-bdb grep-status paperconf umax_pp
|
||||
bogotune gresource paplay umount
|
||||
bogotune-bdb groff parcellite uname
|
||||
bogoupgrade grog parec unattended-upgrade
|
||||
bogoupgrade-bdb grops parecord unattended-upgrades
|
||||
bogoutil grotty parole uncompress
|
||||
bogoutil-bdb groups partx unexpand
|
||||
boltctl grub-editenv passwd unicode_start
|
||||
bootctl grub-file paste unicode_stop
|
||||
broadwayd grub-fstest pasuspender uniq
|
||||
btattach grub-glue-efi patch unity-scope-loader
|
||||
btmgmt grub-kbdcomp pathchk unlink
|
||||
btmon grub-menulst2cfg pavucontrol unlzma
|
||||
buildhash grub-mkfont pax11publish unmkinitramfs
|
||||
bunzip2 grub-mkimage pcmanfm unoconv
|
||||
busctl grub-mklayout pdb3 unopkg
|
||||
busybox grub-mknetdir pdb3.9 unshare
|
||||
bwrap grub-mkpasswd-pbkdf2 peekfd unxz
|
||||
bzcat grub-mkrelpath perf unzip
|
||||
bzcmp grub-mkrescue perl unzipsfx
|
||||
bzdiff grub-mkstandalone perl5.32.1 update-alternatives
|
||||
bzegrep grub-mount perl5.32-x86_64-linux-gnu update-desktop-database
|
||||
bzexe grub-ntldr-img perlbug update-menus
|
||||
bzfgrep grub-render-label perldoc update-mime-database
|
||||
bzgrep grub-script-check perli11ndoc upower
|
||||
bzip2 grub-syslinux2cfg perlivp uptime
|
||||
bzip2recover gsettings perlthanks usb-devices
|
||||
bzless gsf pgrep usbhid-dump
|
||||
bzmore gsf-office-thumbnailer pic usbreset
|
||||
c++ gsf-vba-dump pico userinfo
|
||||
c89 gstreamer-codec-install piconv usermount
|
||||
c89-gcc gtbl pidof userpasswd
|
||||
c99 gtf pidwait users
|
||||
c99-gcc gtk-builder-tool pinentry users-admin
|
||||
cancel gtk-encode-symbolic-svg pinentry-gnome3 utmpdump
|
||||
captoinfo gtk-launch pinentry-x11 VBoxClient
|
||||
caribou-preferences gtk-query-settings ping VBoxClient-all
|
||||
cat gtk-update-icon-cache ping4 VBoxControl
|
||||
catchsegv gucharmap ping6 VBoxDRMClient
|
||||
catman gunzip pinky vdir
|
||||
cc gzexe pipewire vi
|
||||
cd-create-profile gzip pipewire-media-session view
|
||||
cd-fix-profile h2ph pipewire-pulse viewres
|
||||
cd-iccdump h2xs pkaction vim.tiny
|
||||
cd-it8 hciattach pkcheck vlc
|
||||
cdrdao hciconfig pkcon vlc-wrapper
|
||||
c++filt hcitool pkexec vmstat
|
||||
chacl hd pkg-config vmwarectrl
|
||||
chage head pkill w
|
||||
chardet HEAD pkmon w3m
|
||||
chardetect helpztags pkttyagent w3mman
|
||||
charmap hex2hcd pl2pm wall
|
||||
chattr hexdump pldd watch
|
||||
chcon host plog watchgnupg
|
||||
cheese hostid plymouth wc
|
||||
chfn hostname pmap wdctl
|
||||
chgrp hostnamectl pod2html wget
|
||||
chmod htop pod2man whatis
|
||||
choom i386 pod2text whereis
|
||||
chown ibus pod2usage which
|
||||
chrome-gnome-shell ibus-daemon podchecker whiptail
|
||||
chrt ibus-setup poff who
|
||||
chsh iceauth pon whoami
|
||||
chvt ico POST widget
|
||||
ciptool icombine ppt2odp word-list-compress
|
||||
cjpeg iconv pr wpa_passphrase
|
||||
ckbcomp id precat write
|
||||
cksum iecset preconv write.ul
|
||||
clear ijoin preunzip wrjpgcom
|
||||
clear_console im-config prezip www-browser
|
||||
cmp im-launch prezip-bin X
|
||||
codepage infocmp print X11
|
||||
col infotocap printenv x11perf
|
||||
colcrt install printf x11perfcomp
|
||||
colormgr install-menu prlimit x86_64
|
||||
colrm install-printerdriver prove x86_64-linux-gnu-addr2line
|
||||
column instmodsh proxy x86_64-linux-gnu-ar
|
||||
comm intel-virtual-output prtstat x86_64-linux-gnu-as
|
||||
compose ionice ps x86_64-linux-gnu-c++filt
|
||||
consolehelper ip psfaddtable x86_64-linux-gnu-cpp
|
||||
consolehelper-gtk ipcmk psfgettable x86_64-linux-gnu-cpp-10
|
||||
corelist ipcrm psfstriptable x86_64-linux-gnu-dwp
|
||||
cp ipcs psfxtable x86_64-linux-gnu-elfedit
|
||||
cpan ipod-read-sysinfo-extended pslog x86_64-linux-gnu-g++
|
||||
cpan5.32-x86_64-linux-gnu ipod-time-sync pstree x86_64-linux-gnu-g++-10
|
||||
cpio iptables-xml pstree.x11 x86_64-linux-gnu-gcc
|
||||
cpp ischroot ptar x86_64-linux-gnu-gcc-10
|
||||
cpp-10 isdv4-serial-debugger ptardiff x86_64-linux-gnu-gcc-ar
|
||||
c_rehash isdv4-serial-inputattach ptargrep x86_64-linux-gnu-gcc-ar-10
|
||||
crontab ispell ptked x86_64-linux-gnu-gcc-nm
|
||||
csplit ispell-wrapper ptksh x86_64-linux-gnu-gcc-nm-10
|
||||
ctstat join ptx x86_64-linux-gnu-gcc-ranlib
|
||||
cupstestppd join-dctrl pulseaudio x86_64-linux-gnu-gcc-ranlib-10
|
||||
cut journalctl pw-cat x86_64-linux-gnu-gcov
|
||||
cvlc jpegexiforient pw-cli x86_64-linux-gnu-gcov-10
|
||||
cvt jpegtran pwd x86_64-linux-gnu-gcov-dump
|
||||
cvtsudoers json_pp pw-dot x86_64-linux-gnu-gcov-dump-10
|
||||
dash kbdinfo pw-dump x86_64-linux-gnu-gcov-tool
|
||||
date kbd_mode pwdx x86_64-linux-gnu-gcov-tool-10
|
||||
dbus-cleanup-sockets kbxutil pw-metadata x86_64-linux-gnu-gold
|
||||
dbus-daemon kernel-install pw-mididump x86_64-linux-gnu-gprof
|
||||
dbus-launch kill pw-midiplay x86_64-linux-gnu-ld
|
||||
dbus-monitor killall pw-midirecord x86_64-linux-gnu-ld.bfd
|
||||
dbus-run-session kmod pw-mon x86_64-linux-gnu-ld.gold
|
||||
dbus-send l2ping pw-play x86_64-linux-gnu-lto-dump-10
|
||||
dbus-update-activation-environment l2test pw-profiler x86_64-linux-gnu-nm
|
||||
dbus-uuidgen laptop-detect pw-record x86_64-linux-gnu-objcopy
|
||||
dbxtool last pw-reserve x86_64-linux-gnu-objdump
|
||||
dconf lastb pw-top x86_64-linux-gnu-pkg-config
|
||||
dd lastlog py3clean x86_64-linux-gnu-ranlib
|
||||
deallocvt lcf py3compile x86_64-linux-gnu-readelf
|
||||
debconf ld py3versions x86_64-linux-gnu-size
|
||||
debconf-apt-progress ld.bfd pydoc3 x86_64-linux-gnu-strings
|
||||
debconf-communicate ldd pydoc3.9 x86_64-linux-gnu-strip
|
||||
debconf-copydb ld.gold pygettext3 x86_64-pc-linux-gnu-pkg-config
|
||||
debconf-escape less pygettext3.9 xarchiver
|
||||
debconf-set-selections lessecho python3 xargs
|
||||
debconf-show lessfile python3.9 xauth
|
||||
debianbts lesskey querybts xbiff
|
||||
deb-systemd-helper lesspipe quodlibet xbrlapi
|
||||
deb-systemd-invoke lexgrog qvlc xcalc
|
||||
defmt-c lft ranger xclipboard
|
||||
defmt-sh lft.db ranlib xclock
|
||||
delpart libnetcfg rbash xcmsdb
|
||||
delv libreoffice rcp xconsole
|
||||
desktop-file-edit libwacom-list-local-devices rctest xcursorgen
|
||||
desktop-file-install light-locker rdjpgcom xcutsel
|
||||
desktop-file-validate light-locker-command rdma xdg-autostart
|
||||
df link readelf xdg-dbus-proxy
|
||||
dfu-tool linux32 readlink xdg-desktop-icon
|
||||
dh_bash-completion linux64 realpath xdg-desktop-menu
|
||||
dh_dkms linux-boot-prober rendercheck xdg-email
|
||||
dh_installxmlcatalogs linux-check-removal renice xdg-icon-resource
|
||||
dh_perl_openssl linux-update-symlinks reportbug xdg-mime
|
||||
diff linux-version report-hw xdg-open
|
||||
diff3 listres reset xdg-screensaver
|
||||
dig ln resizecons xdg-settings
|
||||
dir lnstat resizepart xdg-user-dir
|
||||
dircolors loadkeys resolvectl xdg-user-dirs-gtk-update
|
||||
dirmngr loadunimap rev xdg-user-dirs-update
|
||||
dirmngr-client localc rfcomm xditview
|
||||
dirname locale rgrep xdpyinfo
|
||||
discover-config localectl rhythmbox xdriinfo
|
||||
djpeg localedef rhythmbox-client xedit
|
||||
dmesg lodraw rifle Xephyr
|
||||
dm-tool loffice ristretto xev
|
||||
dnsdomainname lofromtemplate rlogin xeyes
|
||||
dnstap-read logger rm xfburn
|
||||
doc2odt login rmdir xfce4-about
|
||||
doc2pdf loginctl rnano xfce4-accessibility-settings
|
||||
domainname logname routef xfce4-appearance-settings
|
||||
dotlockfile loimpress routel xfce4-appfinder
|
||||
dpkg lomath rpcgen xfce4-clipman
|
||||
dpkg-architecture look rsh xfce4-clipman-history
|
||||
dpkg-buildflags loweb rstart xfce4-clipman-settings
|
||||
dpkg-buildpackage lowntfs-3g rstartd xfce4-color-settings
|
||||
dpkg-checkbuilddeps lowriter rtstat xfce4-dict
|
||||
dpkg-deb lp runcon xfce4-display-settings
|
||||
dpkg-distaddfile lpoptions run-mailcap xfce4-find-cursor
|
||||
dpkg-divert lp_solve run-parts xfce4-keyboard-settings
|
||||
dpkg-genbuildinfo lpstat run-with-aspell xfce4-mime-helper
|
||||
dpkg-genchanges ls rview xfce4-mime-settings
|
||||
dpkg-gencontrol lsattr rvlc xfce4-mouse-settings
|
||||
dpkg-gensymbols lsblk rygel xfce4-notifyd-config
|
||||
dpkg-maintscript-helper lsb_release sane-find-scanner xfce4-panel
|
||||
dpkg-mergechangelogs lscpu savelog xfce4-popup-applicationsmenu
|
||||
dpkg-name lsinitramfs scanimage xfce4-popup-clipman
|
||||
dpkg-parsechangelog lsipc scp xfce4-popup-clipman-actions
|
||||
dpkg-query lslocks scp-dbus-service xfce4-popup-directorymenu
|
||||
dpkg-realpath lslogins screendump xfce4-popup-places
|
||||
dpkg-scanpackages lsmem script xfce4-popup-whiskermenu
|
||||
dpkg-scansources lsmod scriptlive xfce4-popup-windowmenu
|
||||
dpkg-shlibdeps lsns scriptreplay xfce4-power-manager
|
||||
dpkg-source lsof scrot xfce4-power-manager-settings
|
||||
dpkg-split lspci sdiff xfce4-screenshooter
|
||||
dpkg-statoverride lspgpot sdptool xfce4-sensors
|
||||
dpkg-trigger lsusb sdw2odt xfce4-session
|
||||
dpkg-vendor lto-dump-10 seahorse xfce4-session-logout
|
||||
du luit sed xfce4-session-settings
|
||||
dumpkeys lwp-download see xfce4-settings-editor
|
||||
dwp lwp-dump select-default-iwrap xfce4-settings-manager
|
||||
echo lwp-mirror select-editor xfce4-taskmanager
|
||||
edit lwp-request sensible-browser xfce4-terminal
|
||||
editor lxappearance sensible-editor xfce4-terminal.wrapper
|
||||
editres lxclipboard sensible-pager xfconf-query
|
||||
egrep lxde-logout sensors xfd
|
||||
eject lxhotkey sensors-conf-convert xfdesktop
|
||||
elfedit lxinput seq xfdesktop-settings
|
||||
enc2xs lxlauncher sessreg xfhelp4
|
||||
encguess lxlock setarch xflock4
|
||||
enchant-2 lxmusic setfacl xfontsel
|
||||
enchant-lsmod-2 lxpanel setfont xfrun4
|
||||
env lxpanelctl setkeycodes xfsettingsd
|
||||
envsubst lxpolkit setleds xfwm4
|
||||
eog lxrandr setlogcons xfwm4-settings
|
||||
eqn lxsession setmetamode xfwm4-tweaks-settings
|
||||
evince lxsession-db setpci xfwm4-workspace-settings
|
||||
evince-previewer lxsession-default setpriv xgamma
|
||||
evince-thumbnailer lxsession-default-apps setsid xgc
|
||||
evolution lxsession-default-terminal setterm xhost
|
||||
ex lxsession-edit setupcon xiccd
|
||||
exfalso lxsession-logout setvtrgb xinit
|
||||
exifautotran lxsession-xdg-autostart setxkbmap xkbbell
|
||||
exo-desktop-item-edit lxsettings-daemon sftp xkbcomp
|
||||
exo-open lxtask sg xkbevd
|
||||
expand lxterminal sh xkbprint
|
||||
expiry lynx sha1sum xkbset
|
||||
expr lzcat sha224sum xkbset-gui
|
||||
factor lzcmp sha256sum xkbvleds
|
||||
faillog lzdiff sha384sum xkbwatch
|
||||
faked-sysv lzegrep sha512sum xkeystone
|
||||
faked-tcp lzfgrep shares-admin xkill
|
||||
fakeroot lzgrep shasum xload
|
||||
fakeroot-sysv lzless shotwell xlogo
|
||||
fakeroot-tcp lzma showconsolefont xls2ods
|
||||
fallocate lzmainfo showkey xlsatoms
|
||||
false lzmore showrgb xlsclients
|
||||
fc-cache make shred xlsfonts
|
||||
fc-cat make-first-existing-target shuf xmag
|
||||
fc-conflist mako-render simple-scan xman
|
||||
fc-list malcontent-client size xmessage
|
||||
fc-match malcontent-control skill xmms2d
|
||||
fc-pattern man slabtop xmms2-launcher
|
||||
fc-query mandb sleep xmodmap
|
||||
fc-scan manpath slogin xmore
|
||||
fc-validate man-recode smproxy Xorg
|
||||
fgconsole mapscrn snice xprop
|
||||
fgrep mawk soelim xrandr
|
||||
file mcookie soffice xrdb
|
||||
file-roller md5sum software-properties-gtk xrefresh
|
||||
fincore md5sum.textutils sort xsane
|
||||
find mdig sort-dctrl xscreensaver
|
||||
findaffix memusage sotruss xscreensaver-command
|
||||
findmnt memusagestat spa-acp-tool xscreensaver-demo
|
||||
firefox mesa-overlay-control.py spa-inspect xscreensaver-getimage
|
||||
firefox-esr mesg spa-monitor xscreensaver-getimage-file
|
||||
flock mid3cp spa-resample xscreensaver-getimage-video
|
||||
fmt mid3iconv spd-conf xscreensaver-systemd
|
||||
fold mid3v2 spd-say xscreensaver-text
|
||||
fonttosfnt migrate-pubring-from-classic-gpg spdsend x-session-manager
|
||||
free mimeopen speaker-test xset
|
||||
funzip mimetype speech-dispatcher xsetmode
|
||||
fuser mkdir splain xsetpointer
|
||||
fusermount mkfifo split xsetroot
|
||||
fusermount3 mkfontdir splitfont xsetwacom
|
||||
fwupdagent mkfontscale sprof xsm
|
||||
fwupdate mk_modmap ss xstdcmap
|
||||
fwupdmgr mknod ssh xsubpp
|
||||
fwupdtool mktemp ssh-add x-terminal-emulator
|
||||
fwupdtpmevlog mmcli ssh-agent xvidtune
|
||||
g++ moggsplit ssh-argv0 xvinfo
|
||||
g++-10 monitor-sensor ssh-copy-id Xwayland
|
||||
gamma4scanimage more ssh-keygen xwd
|
||||
gapplication mount ssh-keyscan x-window-manager
|
||||
gatttool mountpoint startlxde xwininfo
|
||||
gcalccmd mousepad start-pulseaudio-x11 xwud
|
||||
gcc mpris-proxy startx x-www-browser
|
||||
gcc-10 mt startxfce4 xxd
|
||||
gcc-ar mt-gnu stat xz
|
||||
gcc-ar-10 mtrace stdbuf xzcat
|
||||
gcc-nm munchlist streamzip xzcmp
|
||||
gcc-nm-10 mutagen-inspect strings xzdiff
|
||||
gcc-ranlib mutagen-pony strip xzegrep
|
||||
gcc-ranlib-10 mv stty xzfgrep
|
||||
gcm-import namei su xzgrep
|
||||
gcm-inspect nano sudo xzless
|
||||
gcm-picker nautilus sudoedit xzmore
|
||||
gcm-viewer nautilus-autorun-software sudoreplay yelp
|
||||
gcov nawk sum yes
|
||||
gcov-10 nc sushi ypdomainname
|
||||
gcov-dump nc.traditional su-to-root zcat
|
||||
gcov-dump-10 neqn svlc zcmp
|
||||
gcov-tool netcat switcherooctl zdiff
|
||||
gcov-tool-10 networkctl sxw2odt zdump
|
||||
gcr-viewer newgrp synaptic-pkexec zegrep
|
||||
gdbus ngettext sync zenity
|
||||
gdialog nice system-config-printer zfgrep
|
||||
gdk-pixbuf-csource nisdomainname system-config-printer-applet zforce
|
||||
gdk-pixbuf-pixdata nl systemctl zgrep
|
||||
gdk-pixbuf-thumbnailer nm systemd zipdetails
|
||||
gdm-control nm-applet systemd-analyze zipgrep
|
||||
gdmflexiserver nmcli systemd-ask-password zipinfo
|
||||
gdm-screenshot nm-connection-editor systemd-cat zless
|
||||
gedit nm-online systemd-cgls zmore
|
||||
gencat nmtui systemd-cgtop znew
|
||||
geqn nmtui-connect systemd-delta
|
||||
GET nmtui-edit systemd-detect-virt
|
||||
waldek@hellodebian:/usr/bin$
|
||||
```
|
||||
|
||||
That's a **lot** of programs!
|
||||
Can you find `cd` in there?
|
||||
Spoiler alert, you wont...
|
||||
Maybe it's located somewhere else?
|
||||
Let's have a look.
|
||||
|
||||
```
|
||||
waldek@hellodebian:/usr/bin$ which cd
|
||||
waldek@hellodebian:/usr/bin$
|
||||
```
|
||||
|
||||
`cd` is not a program but a builtin command.
|
||||
From a practical point of view there is no difference but I do like to mention it for completeness.
|
||||
Later down the line it will help you to contextualize the differences between shells a bit better.
|
||||
But built into *what*?
|
||||
Below you can see a snippet of a part of the `bash-builtin` manual.
|
||||
For now just accept the specific shell we're using is called `bash`.
|
||||
|
||||
```
|
||||
BASH-BUILTINS(7) Miscellaneous Information Manual BASH-BUILTINS(7)
|
||||
|
||||
NAME
|
||||
bash-builtins - bash built-in commands, see bash(1)
|
||||
|
||||
SYNOPSIS
|
||||
bash defines the following built-in commands: :, ., [, alias, bg, bind, break, builtin, case, cd, command, compgen, complete, continue, de‐
|
||||
clare, dirs, disown, echo, enable, eval, exec, exit, export, fc, fg, getopts, hash, help, history, if, jobs, kill, let, local, logout, popd,
|
||||
printf, pushd, pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times, trap, type, typeset, ulimit, umask, unalias,
|
||||
unset, until, wait, while.
|
||||
```
|
||||
|
||||
### Absolute and relative paths
|
||||
|
||||
> All roads lead to Rome.
|
||||
|
||||
There are multiple ways to go to the same location on your system.
|
||||
You can always go either in an **absolute** way, or in *multiple* **relative** ways.
|
||||
The root of your system is `/` and to list what we can find there we can use `ls`.
|
||||
|
||||
```
|
||||
waldek@hellodebian:~$ cd /
|
||||
waldek@hellodebian:/$ ls
|
||||
bin dev home initrd.img.old lib32 libx32 media opt root sbin sys usr vmlinuz
|
||||
boot etc initrd.img lib lib64 lost+found mnt proc run srv tmp var vmlinuz.old
|
||||
waldek@hellodebian:/$
|
||||
```
|
||||
|
||||
From here we can go back home in multiple ways.
|
||||
|
||||
```
|
||||
waldek@hellodebian:/$ cd
|
||||
waldek@hellodebian:~$ cd -
|
||||
/
|
||||
waldek@hellodebian:/$ cd home/waldek/
|
||||
waldek@hellodebian:~$ cd -
|
||||
/
|
||||
waldek@hellodebian:/$ cd /home/waldek/
|
||||
waldek@hellodebian:~$
|
||||
```
|
||||
|
||||
The first one is the handy shortcut we learned, and we go back to the root of our system with the `cd -` shortcut.
|
||||
The following two manipulations look very similar but there is a subtle difference.
|
||||
The first one `home/waldek` is a **relative** path, and the second one `/home/waldek` is an **absolute** one.
|
||||
Relative paths depend on where you are located, absolute ones always point to the same location.
|
||||
An example.
|
||||
|
||||
```
|
||||
waldek@hellodebian:~$ cd /usr/bin/
|
||||
waldek@hellodebian:/usr/bin$ cd /home/waldek/
|
||||
waldek@hellodebian:~$ cd -
|
||||
/usr/bin
|
||||
waldek@hellodebian:/usr/bin$ cd home/waldek
|
||||
-bash: cd: home/waldek: No such file or directory
|
||||
waldek@hellodebian:/usr/bin$
|
||||
```
|
||||
|
||||
The second command fails because from where I'm standing, there is no folder called `home/waldek`!
|
||||
I can however still go to my home in a relative way but I need to *go back* a few directories first.
|
||||
|
||||
```
|
||||
waldek@hellodebian:/usr/bin$ cd ../../home/waldek/
|
||||
waldek@hellodebian:~$ pwd
|
||||
/home/waldek
|
||||
waldek@hellodebian:~$
|
||||
```
|
||||
|
||||
The `..` means go **back** one directory so in our example we go back **two** directories, which brings us to the `/` of our system and from there we go **up** to `home` and then `waldek`.
|
||||
|
||||
### Exercise
|
||||
|
||||
Explore your system a bit using `cd` and `ls`.
|
||||
You'll probably encounter some weird messages along the way.
|
||||
Keep note of them so we can discuss it together.
|
||||
|
||||
### `root` and `/` and `/root` are not the same thing
|
||||
|
||||
## A pit stop to review what we've learned so far
|
||||
|
||||
Below is a list of programs and command we've seen so far.
|
||||
|
||||
|command|desciption|
|
||||
|---|---|
|
||||
|systemctl|manipulate running services|
|
||||
|apt|the Debian package manager|
|
||||
|htop|a command line task manager we installed|
|
||||
|vlc|a video player we installed|
|
||||
|date|display the time of day|
|
||||
|which|show the path to an executable|
|
||||
|file|print more information about a file's content|
|
||||
|head|show the first lines of a file|
|
||||
|pwd|print working directory|
|
||||
|cd|change directory|
|
||||
|ls|list content of a directory|
|
||||
|
||||
|
|
Loading…
Reference in New Issue