Bit „s”

O bicie „s” wspomniano przy okazji omawiania praw dostępu do plików i katalogów (lab. 2 i 3). Oznacza on, że identyfikator użytkownika jest ustawiany dla procesu w czasie jego wykonywania. Poniżej znajduje się charakterystyczny przykład wykorzystania bitu „s” w prawach dostępu.

> ls -al /bin/passwd

-r-sr-xr-x   1 root     security   48394 May 18 1994  /bin/passwd

> ls -al /etc/passwd

-rw-r--r--   1 root     system     37618 Nov 23 14:38 /etc/passwd

Właścicielem procesu, który powstaje po uruchomieniu programu passwd w katalogu bin staje się użytkownik, proces działa na prawach roota i może edytować plik /etc/passwd.

System plików

Polecenia

df — polecenie służące do wyświetlania informacji na temat zainstalowanych systemów plikowych. Bez żadnych argumentów wyświetla informacje o wolnym miejscu na wszystkich zainstalowanych systemach plikowych. Z argumentem w postaci katalogu (lub pliku) — wyświetla informacje o systemie plikowym, na którym istnieje dany katalog.

> df

Filesystem    Total KB    free %used   iused %iused Mounted on

/dev/hd4         16384    3460   78%     996    24% /

/dev/hd9var      53248   25056   52%    1428    10% /var

/dev/hd2        651264    6924   98%   27347    16% /usr

/dev/hd3         20480   19604    4%      29     0% /tmp

/dev/hd1        233472   62284   73%   15755    26% /home

/dev/lv02       405504    9448   97%    8437     8% /decusr

/dev/lv03       520192  196772   62%   12630     9% /usr/oracle7

orion:/home3    495616  114692   76%   -       -    /tmp_mnt/remote/home3

orion:/homec    446464    7436   98%   -       -    /tmp_mnt/remote/homec

madzia:/export/home   963662  246496   74%   -       -    /tmp_mnt/remote/homem

venus:/users/homev  1923695  506652   73%   -       -    /tmp_mnt/remote/homev

> mkdir a

> df a

Filesystem    Total KB    free %used   iused %iused Mounted on

orion:/home3    495616  114688   76%   -       -    /tmp_mnt/remote/home3

Opcje polecenia df — proszę poszukać w man df.

mount — polecenie pozwalające na korzystanie z systemu plików. Wykorzystanie: mount system_plików katalog. Po zamontowaniu systemu jego katalog główny ma nazwę identyczną z katalogiem, do którego zamontowano system plików. W przykładzie poniżej jest to np. system plików na urządzeniu /dev/hd3, noszący w systemie nazwę /tmp. Polecenie to jest znane studentom, którzy mają w domu zainstalowanego Linux’a i korzystają z CD-ROM lub stacji dysków. Bez żadnych argumentów podaje listę zamontowanych systemów plikowych.

> mount

  node       mounted        mounted over    vfs       date        options

-------- ---------------  ---------------  ------ ------------ ---------------

         /dev/hd4         /                jfs    Nov 12 09:07 rw,log=/dev/hd8

         /dev/hd9var      /var             jfs    Nov 12 09:07 rw,log=/dev/hd8

         /dev/hd2         /usr             jfs    Nov 12 09:07 rw,log=/dev/hd8

         /dev/hd3         /tmp             jfs    Nov 12 09:07 rw,log=/dev/hd8

         /dev/hd1         /home            jfs    Nov 12 09:09 rw,log=/dev/hd8

         /dev/lv02        /decusr          jfs    Nov 12 09:09 rw,log=/dev/hd8

         /dev/lv03        /usr/oracle7     jfs    Nov 12 09:09 rw,log=/dev/hd8

saturn   (pid12524@/remote) /remote          nfs    Nov 12 09:12 ro,ignore

 

orion    /home3           /tmp_mnt/remote/home3 nfs    Nov 19 08:12 rw

 

venus    /users/homev     /tmp_mnt/remote/homev nfs    Nov 24 12:17 rw

umount — (unmount) „odmontowuje” system plików zainstalowany przy pomocy polecenia mount.

du — podaje wykorzystanie dysku. Bez żadnych argumentów podaje w blokach (tj. w jednostkach po 512 bajtów), ile miejsca zajmują podkatalogi w bieżącym katalogu. Flagi: -a wyświetla zajętość dla każdego pliku z osobna; -k oblicza zajętość w kB; -s wyświetla łączną zajętość dla wszystkich podanych plików i katalogów.

> du

8       ./2katalog/3katalog/Rozne

16      ./2katalog/3katalog

24      ./2katalog

24      ./kolokwia

224     .

> cd 2katalog/

> ls

3katalog  a         b         c

> du -a

0       ./a

0       ./b

0       ./c

8       ./3katalog/Rozne

0       ./3katalog/.en

0       ./3katalog/.pro

16      ./3katalog

24      .

> du -k

4       ./3katalog/Rozne

8       ./3katalog

12      .

ls -i — „zwykłe ls”, wyświetla numer i-node dla każdego pliku.

od — wyświetla zawartość pliku po kolei w bajtach lub słowach. Bez żadnych flag: zawartość pliku wyświetlana jest w postaci ósemkowej w słowach dwubajtowych. Polecenie to może być wykorzystywane do przeglądania plików, które zawierają znaki, które nie mogą być wypisane na ekranie. Użyteczne flagi: -c wyświetla każdy bajt jako znak ASCII; -d wyświetla słowa jako liczby dziesiętne; -x wyświetla słowa jako liczby szesnastkowe. Przykłady:

> echo 1 > przyklad

> od przyklad

0000000  030412

0000002

> echo 12 > przyklad

> od przyklad

0000000  030462 005000

0000003

> od -c przyklad

0000000    1   2  \n

0000003

ln — przywiązuje (przypisuje) dodatkową nazwę do pliku. System zawsze identyfikuje pliki przez numery i-node, ale przez użytkownika plik jest identyfikowany z nazwą. W momencie tworzenia pliku jego nazwa jest przypisywana do numeru i-node. Polecenie ln pozwala na dowiązanie do tego samego i-node dodatkowe nazwy. Polecenie to posiada dwie flagi: -s tworzony jest link symboliczny o tej samej nazwie (jego nazwa zawiera ścieżkę do pliku, do którego odnosi się link); -f nie zadaje pytań. Polecenie (i korzystanie z linków) to jest użyteczne w przypadku plików o długich nazwach.

> ls -i Unix.Lab/

51337 1_sys_uzyt           43009 pro.c

43058 2katalog             43008 prog.c

43013 cmd                  51272 prog2

51259 cmd2                 51269 przyklad

51267 czy_wynik.skr        51268 przyklad.skr

 7171 kolokwia             51271 przyklad2.txt

43053 nazwa.pliku.txt      51336 status

51260 nohup.out            51270 system.uzytkownik.c

51261 p_ftp                51273 syuz

51340 petla                43015 val

51338 petla.c              51266 val1

> ln Unix.Lab/pro.c p

> ls -i

51227 Unix.Lab  43012 bin       43009 p

> ln -s Unix.Lab/pro.c p

> ls -al

total 96

drwxr-sr-x   6 danda    telecom      512 Nov 24 14:42 .

drwxr-sr-x  45 root     telecom     1024 Oct 09 10:34 ..

-rwx------   1 danda    telecom      146 Nov 17 10:13 .cshrc

-rwx------   1 danda    telecom        1 Nov 17 10:14 .login

-rwx------   1 danda    telecom      116 Nov 24 14:23 .login.date

-rwx------   1 danda    telecom      261 Oct 27 11:01 .profile

-rw-------   1 root     telecom      722 Nov 24 08:58 .sh_history

drwx--S---   2 danda    telecom      512 Oct 27 13:03 .ssh

-rwx------   1 danda    telecom       54 Oct 28 12:57 .whwht

drwx--S---   2 danda    telecom      512 Nov 20 15:07 .zabezpieczenie

drwx--S---   4 danda    telecom      512 Nov 24 13:57 Unix.Lab

drwx--S---   2 danda    telecom      512 Nov 24 12:33 bin

lrwxrwxrwx   1 danda    telecom       14 Nov 24 14:42 p -> Unix.Lab/pro.c

 

Zmienne

W shell’u sh i csh korzystanie ze zmiennych wygląda inaczej. Poniżej zaprezentowano definiowanie i wywoływanie zmiennej z w shell’u sh, która została następnie „wyeksportowana” do potomnego shell’a csh.

$ z=1

$ echo $z

1

$ export z

$ csh

% echo $z

1


W shell’u csh (i shell’ach pokrewnych) wywoływanie zmiennych wygląda podobnie, jak dla sh, natomiast ich definiowanie — jak w przykładzie poniżej:

% set zm=1

% echo $zm

1

Eksportowanie zmiennych w csh sprawia problemy. Najprostszy sposób ich ominięcia to:

% setenv zm 10

% sh

$ echo $zm

10

Polecenie setenv, podobnie jak polecenie export nadaje definiowanej zmiennej charakter zmiennej środowiskowej, dziedziczonej przez wszystkie shell’e potomne.

Ale należy uważać — proszę zwrócić uwagę na przykład poniżej (początek — od shell’a csh):

% set zm=2

% setenv zm 4

% echo $zm

2

% sh

$ echo $zm

4

Wszystkie zmienne środowiskowe mogą być wyświetlone za pomocą komendy env:

> sh

$ z=1

$ export z

$ env

HOME=/home2/grupa/kowalski

HOST=saturn

HOSTTYPE=rs6000

LANG=En_US

LOCPATH=/usr/lib/nls/loc

LOGNAME=kowalski

MACHTYPE=rs6000

MAIL=/usr/spool/mail/kowalski

MAILMSG=[YOU HAVE MAIL]

MANPATH=/usr/share/man:/usr/local/man

NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/prime/%N

ODMDIR=/etc/objrepos

OSTYPE=aix

PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/home2/grupa/kowalski/bin:/usr/bin/X11:/sbin:/ho

me2/grupa/kowalski/:.=

PWD=/home2/grupa/kowalski

REMOTEHOST=pckowal.student.agh.edu.pl

SHELL=/bin/tcsh

SHLVL=1

TERM=vt100

TZ=NFT-1DFT

USER=kowalski

VENDOR=ibm

z=1

$

% setenv z 1

% env

TERM=vt100

SHELL=/bin/tcsh

HOME=/home2/grupa/kowalski

LOGNAME=danda

USER=danda

PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/home2/grupa/kowalski/bin:/usr/bin/X11:/sbin:/home2/grupa/kowalski:.=

TZ=NFT-1DFT

LOCPATH=/usr/lib/nls/loc

NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/prime/%N

MANPATH=/usr/share/man:/usr/local/man

ODMDIR=/etc/objrepos

LANG=En_US

HOSTTYPE=rs6000

VENDOR=ibm

OSTYPE=aix

MACHTYPE=rs6000

SHLVL=1

PWD=/home2/grupa/kowalski

HOST=saturn

REMOTEHOST=pckowal.student.agh.edu.pl

MAIL=/usr/spool/mail/kowalski

MAILMSG=[YOU HAVE MAIL]

z=1

%

Usuwanie zmiennych może być przeprowadzone za pomocą polecenia unset:

> sh

$ z=1

$ echo $z

1

$ unset z

$ echo $z

Wyeksportowanej zmiennej nie można usunąć z shell’a potomnego:

> sh

$ z=zmienna

$ export z

$ csh

% echo $z

zmienna

% unset z

% echo $z

zmienna

% exit

% $ echo $z

zmienna

$