Shells in the Environment
Zmienne shell'a to to samo co zmienne środowiskowe. Wyświetlić ustawienia zmiennych można przy pomocy polecenia env
(nie wszystkich zmiennych), żeby sprawdzić że shell jest przypisany do ciebie możesz edytować plik /etc/passwd
- gdm:x:42:42::/var/gdm:/sbin/nologin
- sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
- nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash
- vboxadd:x:103:1::/var/run/vboxadd:/bin/false
W moim przypadku widać to w linijce zaczynającej się od nonus25. Zmienne profilowe przetrzymywane są w pliku /etc/profile
, oczywiście to wszystko w zależności jakiego systemu używamy, zmienne te mogą również odnosić się do plików w /etc/profile.d/
jak i również do /etc/profile.d/
. Jeżeli szukamy zmiennych dokładnie tyczących się danego użytkownika to każde konto zawiera pliki w katalogu domowym danego użytkownika i są to .bashrc
, .bash_profile
i .profile
. Aby wyświetlić zmienna odpowiadającą za komend prompt $PS1
należy wywołać ja bezpośrednio w linii komend.
- [nonus25@localhost ~]$ echo $PS1
- [\u@\h \W]\$
- [nonus25@localhost ~]$ echo $PS2
- >
- [nonus25@localhost ~]$ echo $PS4
- +
Następną zmienna którą trzeba tak edytować jest np. $PAGER
odpowiada ona za ustawienie domyślnego edytora tekstu. Zmienne ta jest nie zawsze ustawiona, więc pokaże poniżej jak ustawić taką zmienna przy pomocy komend.
- [nonus25@localhost ~]$ echo $PAGER
- [nonus25@localhost ~]$ export PAGER=less
- [nonus25@localhost ~]$ echo $PAGER
- less
- [nonus25@localhost ~]$ unset PAGER
- [nonus25@localhost ~]$ echo $PAGER
Jeżeli używamy innego środowiska niż bash do ustawienia zmienne posłuży nam komenda set
. W przykładzie widzimy nadanie wartości zmiennej a później odwołanie tego poprzez komendę unset
.
Dots and the PATH
Zacznę od kropek,
.
- aktualna ścieżka..
- ścieżka poziom wyżej
- [nonus25@localhost ~]$ ls .
- Desktop
- [nonus25@localhost ~]$ ls ..
- nonus25
- [nonus25@localhost ~]$ ls ../..
- bin dev home lost+found misc net proc sbin srv tmp var
- boot etc lib media mnt opt root selinux sys usr
To tyle by mówić o kropkach w systemie Linux, następna do omówienia rzecz to zmienna PATH. Ta zmienna daje nam prawo do uruchomienia programów bez podawania ścieżki do nich o ile ścieżki te są wy listowane w tej zmiennej, ścieżki rozdziela się przy pomocy :
, aby sprawdzić jakie ścieżki zawarte są w zmiennej należy wywołać komendę echo $PATH
, znak dolara konieczny przed zmienna.
- [nonus25@localhost ~]$ echo $PATH
- /usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/sbin
History and Command Completion
Aby ułatwić życie administratorom w systemie są zapisywane komendy które wykonywaliśmy, aby je przejrzeć należy wyświetlić plik znajdujący się w HOME .bash_history
lub też wyświetlić je za pomocą komendy history
, różnica miedzy plikiem a komendą polega na tym, że komenda wyświetla aktualne polecenia wykonane w danej sesji, a do pliku zapisywane są komendy jakie wykonaliśmy podczas bieżącej sesji gdy się wylogowujemy z systemu. Maksymalną ilość przechowywanych komend możemy sprawdzić typując echo $HISTSIZE
, przeważnie jest ustawiony na 1000 komend.
- [nonus25@localhost ~]$ echo $HISTSIZE
- 1000
- [nonus25@localhost ~]$ history
- 1 pwd
- 2 su
- 3 pwd
- 4 whoami
- 5 clear
- 6 sudo su
- 7 su
- 8 clear
- 9 lspci
- 10 dmesg
- 11 lspci
- 12 lsusb
Teraz każda kżda komenda wyświetlona przy pomocy komendy history
posiada numer. Więc jeśli chcemy odwołać się do jakieś komendy wystarczy, że podamy !3
, lub też kilka pierwszych liter !w
- [nonus25@localhost ~]$ !3
- pwd
- /home/nonus25
- [nonus25@localhost ~]$ !w
- whoami
- nonus25
Uzupełnienie do komendy, ścieżek czy tez zmiennych środowiskowych uzyskamy przy kliknięciu TAB jeśli jest więcej niż jedna podpowiedz drugie wciśnięcie klawisza spowoduje wyświetlenie ich wszystkich.
Basic Shell Commands
Na pierwszy ogień idą takie komendy jak man
, pwd
, exec
i uname
.
pwd
- podaje nam bieżącą ścieżkę w której pracujemy. Również wyświetla zmienną środowiskowąPWD
- [nonus25@localhost ~]$ pwd
- /home/nonus25
- [nonus25@localhost ~]$ env | grep PWD
- PWD=/home/nonus25
- [nonus25@localhost ~]$ cd Desktop/
- [nonus25@localhost Desktop]$ pwd
- /home/nonus25/Desktop
- [nonus25@localhost Desktop]$ env | grep PWD
- PWD=/home/nonus25/Desktop
- OLDPWD=/home/nonus25
man
- wyświetla nam strony z opisem programu/komendy, strony organizowane są w kilku rozdziałach przeważnie.man -k termin
- działa tak samo jak komendaapropos
, czyli przeszukuje strony man w poszukiwaniu terminu.- [nonus25@localhost ~]$ man -k email
- PhishTag [Mail::SpamAssassin::Plugin::PhishTag] (3pm) - SpamAssassin plugin for redirecting links in incoming emails
- mailpost (8) - feed an email message into a news group
- mailto.conf [mailto] (5) - configuration file for cups email notifier
- nautilus-sendto (1) - convenience application to send a file via email or instant messenger
- news2mail (8) - a channel script to gateway news into email
- spamassassin (1) - extensible email filter used to identify spam
- spamassassin (rpm) - Spam filter for email which can be invoked from mail delivery agents.
- [nonus25@localhost ~]$ apropos email
- PhishTag [Mail::SpamAssassin::Plugin::PhishTag] (3pm) - SpamAssassin plugin for redirecting links in incoming emails
- mailpost (8) - feed an email message into a news group
- mailto.conf [mailto] (5) - configuration file for cups email notifier
- nautilus-sendto (1) - convenience application to send a file via email or instant messenger
- news2mail (8) - a channel script to gateway news into email
- spamassassin (1) - extensible email filter used to identify spam
- spamassassin (rpm) - Spam filter for email which can be invoked from mail delivery agents.
- [nonus25@localhost ~]$
man -f komenda
- wyświetli wszystkie powiązane man strony.- [nonus25@localhost ~]$ man -f man
- man (1) - format and display the on-line manual pages
- man (1p) - display system documentation
- man (7) - macros to format man pages
- man (rpm) - A set of documentation tools: man, apropos and whatis.
- man-pages (rpm) - Man (manual) pages from the Linux Documentation Project.
- man-pages-overrides (rpm) - Complementary and updated manual pages
- man.config [man] (5) - configuration data for man
man 5 komenda
- czyta 5 stronę ze stron man.- [nonus25@localhost ~]$ man 7 man
- MAN(7) Linux Programmer’s Manual MAN(7)
- NAME
- man - macros to format man pages
- SYNOPSIS
- groff -Tascii -man file ...
- groff -Tps -man file ...
- man [section] title
- DESCRIPTION
- This manual page explains the groff tmac.an macro package (often called
- the man macro package) and related conventions for creating manual
- (man) pages. This macro package should be used by developers when
- writing or porting man pages for Linux. It is fairly compatible with
- other versions of this macro package, so porting man pages should not
- be a major problem (exceptions include the NET-2 BSD release, which
- uses a totally different macro package called mdoc; see mdoc(7)).
- Note that NET-2 BSD mdoc man pages can be used with groff simply by
- specifying the -mdoc option instead of the -man option. Using the
uname
- podaje info o systemieuname -a
- podaje wszystkie informacje- [nonus25@localhost ~]$ uname -a
- Linux localhost.localdomain 2.6.18-274.17.1.el5.centos.plus #1 SMP Wed Jan 11 10:58:19 EST 2012 i686 i686 i386 GNU/Linux
uname -s
- nazwę kernel'a, -s, jest domyślnym przełącznikiem dla tej komendy- [nonus25@localhost ~]$ uname -s
- Linux
- [nonus25@localhost ~]$ uname
- Linux
uname -n
podaje nazwę hosta,- [nonus25@localhost ~]$ uname -n
- localhost.localdomain
uname -r
- podaje wersje jądra- [nonus25@localhost ~]$ uname -r
- 2.6.18-274.17.1.el5.centos.plus
uname -v
podaje datę instalacji jądra- [nonus25@localhost ~]$ uname -v
- #1 SMP Wed Jan 11 10:58:19 EST 2012
uname -i
lubuname -p
- podaje architekturę platformy, podaje architekturę procesora- [nonus25@localhost ~]$ uname -i
- i386
- [nonus25@localhost ~]$ uname -p
- i686
uname -o
- podaje nazwę systemu operacyjnego,- [nonus25@localhost ~]$ uname -o
- GNU/Linux
exec
- zastępuje powłokę, co mam na myśli, chyba będzie najlepiej pokazać na przykładzie:I małe wytłumaczenie co tu się stało, utworzyłem pięć plików nonus25_(1-5).txt, pokazałem zawartość bieżącej ścieżki, a następnie wyszukałem wszystkie pliki zaczynające się na nazwę non, i oddzielnie dla każdego znaleźnego pliku wtrąciłem komendę rm, która to usunęła te pliki, co pokazuje ostatnia wykonana komenda.- [nonus25@localhost ~]$ touch nonus25_{1..5}.txt
- [nonus25@localhost ~]$ ls .
- Desktop nonus25_2.txt nonus25_4.txt
- nonus25_1.txt nonus25_3.txt nonus25_5.txt
- [nonus25@localhost ~]$ find . -name 'non*' -exec rm {} \;
- [nonus25@localhost ~]$ ls .
- Desktop
Wildcards - Globs - and Search Commands
Więc tak, komenda ls aa*
poda nam wszystkie nazwy znajdujące się w katalogu i zaczynające się na aa włączając w to także nazwę aa, zaś wzorzec ls aa?
wy listuje nam wszystkie nazwy zawierające 3 znaki. Następnym wzorcem jaki możemy użyć są klamry, np. przy tworzeniu jakiejś ilości plików touch doc{0..9}{0..9}.txt
polecenie to będzie również działać z literami, {a..z}, {A..Z}. Możemy również używać nawiasów kwadratowych które określają jakiś zakres np. jeśli chcemy wyszukać ileś plików zawierających liczby od 1 do 3 w nazwie zbudujemy takie zapytanie, ls doc[1-3]?.txt
lub ls doc[1-3][1-3].txt
, również możemy użyć wykrzyknika który powoduje negacje danego wzorca np. ls doc[!1-3][1-3].txt
wy listuje wszystkie pliki oprócz tych plików które w nazwie będą zawierały pierwszą liczbę od 1 do 3. Następnymi komendami które pomagają wyszukiwaniu czegoś są locate
, komenda ta przeszukuje bazę danych lokalnych plików, baza danych jest uaktualniana poprzez skrypt /etc/corn.daily
, baza ta zawiera informację o wszystkich zainstalowanych pakietach i bazuje ona na slocate
lub mlocate
. Inną komendą pomagającą w przeszukiwaniu jest komenda find
i umożliwia ona przeszukiwanie w czasie rzeczywistym, np. find . -name '*.png'
wyszuka wszystkie obrazki w bieżącej ścieżce.
File and Directory Commands
Na początek komendy touch
i ls
touch filename
- tworzy nowy plik o podanej nazwie,- [nonus25@localhost ~]$ touch nonus25_{1..5}.txt
- [nonus25@localhost ~]$ ls .
- Desktop nonus25_2.txt nonus25_4.txt
- nonus25_1.txt nonus25_3.txt nonus25_5.txt
ls
- wy listuje pliki w bieżącej ścieżce,- [nonus25@localhost ~]$ ls
- Desktop nonus25_2.txt nonus25_4.txt
- nonus25_1.txt nonus25_3.txt nonus25_5.txt
ls -a
wy listuje również pliki ukryte, zaczynające się od kropki,- [nonus25@localhost ~]$ ls -a
- . .gnome nonus25_4.txt
- .. .gnome2 nonus25_5.txt
- .bash_history .gnome2_private .recently-used.xbel
- .bash_logout .gstreamer-0.10 .redhat
- .bash_profile .gtkrc-1.2-gnome2 .themes
- .bashrc .ICEauthority .thumbnails
- .config .icons .Trash
- Desktop .metacity .vboxclient-clipboard.pid
- .dmrc .mozilla .vboxclient-display.pid
- .eggcups .nautilus .vboxclient-seamless.pid
- .esd_auth nonus25_1.txt .xsession-errors
- .gconf nonus25_2.txt
- .gconfd nonus25_3.txt
ls -i
- czyta numery i-węzłów plików- [nonus25@localhost ~]$ ls -i
- 1083873 Desktop 1085007 nonus25_2.txt 1085009 nonus25_4.txt
- 1084998 nonus25_1.txt 1085008 nonus25_3.txt 1085010 nonus25_5.txt
ls -t
- wyświetla listę plików bazującą na czasie modyfikacji- [nonus25@localhost ~]$ ls -t
- nonus25_1.txt nonus25_3.txt nonus25_5.txt
- nonus25_2.txt nonus25_4.txt Desktop
ls -r
- odwraca kolejność wyszukiwania plików- [nonus25@localhost ~]$ ls -r
- nonus25_5.txt nonus25_3.txt nonus25_1.txt
- nonus25_4.txt nonus25_2.txt Desktop
ls -l
- wyświetla listę w długim formacie, format zawiera: typ, uprawnienia, rozmiar, datę ostatniej modyfikacji i nazwę pliku.- [nonus25@localhost ~]$ ls -l
- total 28
- drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop
- -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_1.txt
- -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_2.txt
- -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_3.txt
- -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_4.txt
- -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_5.txt
ls -F
- dodaje symbole plikówwidzimy tu dodane symbole więc:- [nonus25@localhost ~]$ ls -F /etc/
- audisp/ jvm-commmon/ rc.d/
- audit/ jwhois.conf rc.local@
- autofs_ldap_auth.conf kdump.conf rc.news*
- auto.master krb5.conf rc.sysinit@
- auto.misc ldap.conf readahead.d/
- auto.net* ld.so.cache reader.conf
- auto.smb* ld.so.conf reader.conf.d/
- avahi/ ld.so.conf.d/ redhat-lsb/
- bashrc lftp.conf redhat-release
- blkid/ libaudit.conf request-key.conf
- bluetooth/ libuser.conf resolv.conf
- bonobo-activation/ libvirt/ resolv.conf.predhclient
- capi.conf localtime rmt@
- cdrecord.conf login.defs rndc.key@
*
do plików wykonywalnych/
do folderów@
do symbolicznych linków=
do gniazd (sockets)|
do strumieni (pipes)
file *
- listuje pliki z krótkim opisem- [nonus25@localhost ~]$ file *
- Desktop: directory
- link.txt: empty
- non.bin: empty
- non.deb: empty
- nonus25_1.txt: ASCII text
- nonus25_2.txt: empty
- nonus25_3.txt: empty
- nonus25_4.txt: empty
- nonus25_5.txt: empty
Teraz przejdę do poleceń takich jak cp
, mv
, rm
cp file1 file2
- kopiuje zawartość pliku 1 i nadpisuje zawartość pliku 2- [nonus25@localhost ~]$ cp nonus25_1.txt nonus25_5.txt
- [nonus25@localhost ~]$ file *
- Desktop: directory
- link.txt: ASCII text
- non.bin: empty
- non.deb: empty
- nonus25_1.txt: ASCII text
- nonus25_2.txt: empty
- nonus25_3.txt: empty
- nonus25_4.txt: empty
- nonus25_5.txt: ASCII text
cp -r
- kopiuje rekurencyjniecp -a
- kopiuje rekurencyjnie z zachowaniem linków, własności, dat
mv
- podobne do poleceniacp
z tym że usuwa oryginalny plik- [nonus25@localhost ~]$ ls -l
- total 56
- drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop
- -rw-rw-r-- 2 nonus25 nonus25 23 Feb 8 07:46 link.txt
- -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 07:12 non.bin
- -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:45 nonus25_1.txt
- -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:48 nonus25_2.txt
- -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:45 nonus25_3.txt
- -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 07:12 nonus25_4.txt
- -rw-rw-r-- 2 nonus25 nonus25 23 Feb 8 07:46 nonus25_5.txt
rm
usuwa dane pliki- [nonus25@localhost ~]$ ls -l
- total 52
- drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop
- -rw-rw-r-- 2 nonus25 nonus25 23 Feb 8 07:46 link.txt
- -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:45 nonus25_1.txt
- -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:48 nonus25_2.txt
- -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:45 nonus25_3.txt
- -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 07:12 nonus25_4.txt
- -rw-rw-r-- 2 nonus25 nonus25 23 Feb 8 07:46 nonus25_5.txt
rm -r
- usuwa pliki i katalogi rekurencyjnierm -rf
- usuwa pliki rekurencyjnie i siłoworm -rf /path/to/file
- ostrożnie z tym poleceniem
Komendy odpowiedzialne za zarządzanie katalogami mkdir
, rmdir
mkdir dir
tworzy nowy katalog- [nonus25@localhost ~]$ mkdir dir1
- [nonus25@localhost ~]$ ls -l
- total 24
- drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop
- drwxrwxr-x 2 nonus25 nonus25 4096 Feb 8 08:18 dir1
- -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:46 link.txt
mkdir -p path/to/dir
- tworzy całą strukturę katalogów
rmdir dir
- usuwa katalog jeśli katalog jest pusty- [nonus25@localhost ~]$ rmdir dir1/
- [nonus25@localhost ~]$ ls -l
- total 16
- drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop
- -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:46 link.txt
rmdir -p path/to/dir
- usuwa cała strukturę katalogów jeśli katalogi są puste.
Archives and Compression
Jednym z głównych narzędzi archiwizujących pod Linux'em jest tar
. Program ten tworzy jak i rozpakowuje
tar czf backupmail.tar.gz .evolution/
c
- tworzy nowe archiwumz
- kompresuje algorytmem gzipf
- używa nazwy która następuje
tar cf backupmail.tar .evolution/
- tworzy nie skompresowane archiwum tarc
- tworzy nowe archiwumf
- używa nazwy która następuje
gzip backupmail.tar
- utworzone wcześniej nie skompresowane archiwum możemy skompresować w ten sposób, efektem tego będzie dodanie nowego rozszerzenia do pliku .gz. Plik ten będziemy mogli rozpakować przy pomocygunzip
lubgzip -d
.bzip2 backupmail.tar
- utworzone wcześniej nie skompresowane archiwum możemy skompresować też w inny sposób, efektem tego będzie dodanie nowego rozszerzenia do pliku .bz2. Plik ten będziemy mogli rozpakować przy pomocybunzip2
lubbzip2 -d
. Takżetar j
kompresuje pliki dobzip2
cpio
w dosłownym znaczeniu kopia wejścia, program również odpowiada za tworzenie archiwów.find / -name *.doc | cpio -o > docfiles
- więc skrypt zaczyna szukać wszystkich plików z rozszerzeniem .doc zaczynając od root'a, następnie przekazuje każdy znaleziony plik do drugiej komendy gdzie tworzone jest archiwum.cpio -i < docfiles
rozpakowanie archiwum utworzonego powyżej.- odnosi się także do archiwów utworzonych za pomocą
rpm2cpio
dd if=/dev/hda1 of=/dev/hdb1
backup możemy również utworzyć korzystając z narzędziadd
, w pierwszej części komendy podajemy wejście partycji if=, zaś w drugiej części podajemy partycje wyjścia of=dd if=/dev/hda of=/mbr.bk bs=512 count=1
- poleceniem tym jesteśmy w stanie zrobić backup naszego MBRdd if=/mbr.bk of=/dev/hda bs=512 count=1
- poleceniem tym przywracamy wcześniej utworzoną kopie zapasową.
Basic Data Redirection
Aby przekierować strumień w Linux'ie używamy komend >, 1>, 2>, <, itp.. Np. ls . > filename
przekieruje nam strumień do pliku o nazwie filename, komenda >
i 1>
wykonują te samo polecenie, czyli przekierują strumień do pliku. Następna komenda to komenda która spowoduje dopisanie jakiś informacji, danych do pliku ls . >> filename
. Zaś jeśli chcemy przekierować strumień błędów używamy polecenia ls nodirectory 2> errorfile
, gdzie za każdym razem tworzymy nowy plik lub jak to woli nadpisujemy dane zawarte w tym że pliku. Aby dopisać dane o błędach do pliku nalęży użyć podobnej składni jak powyżej czyli ls nodirectory 2>> errorfile
. To były polecenia aby przekierować output naszych strumieni, a żeby przekierować input należy użyć polecenia database < data
.
Tees - Pipes - Redirection
Czasami zachodzi potrzeba przekazania wyjścia na wejście innej komendy w tym celu posługujemy się poleceniem |
, lub ||
. Oczywiście najlepiej to widać na przykładzie rpm -qa | grep system
, komenda rpm -qa
zwraca nam informacje na temat zainstalowanych pakietów w systemie, teraz druga komenda filtruje czy na wejściu pokazał się taki wzorzec jakiego poszukiwaliśmy, jeśli tak jest on wyświetlany na wyjściu. Innym przypadkiem może być np. jeśli chcemy przekierować dane i umieścić je zarazem w pliku, możemy tego dokonać za pomocą komendy tee
, a oto przykład ls . | tee filename
, polecenie to wyświetli nam plik i zapisze dane do pliku. Następną komendą używaną przy przekierowaniach jest komenda xargs
, a tu przykład jej użycia ls *.png | xargs rm
. Gdzie komenda xargs
pobiera całą listę plików a następnie przekazuje ją do komendy rm
, która to usuwa wszystkie te pliki.
Brak komentarzy:
Prześlij komentarz