11 marca 2016

07. Uprawnienia i konsola


Poprzednim razem aby zainstalować program Eagle z pobranego skryptu trzeba było nadać mu uprawnienie do uruchamiania. Dziś na początek o tym jak działają uprawnienia w systemach GNU/Linux?
 
Uprawnienia


System uprawnień w systemach GNU/Linux jest wzorowany na tym istniejącym w systemach Unix. Każdy plik posiada szereg atrybutów określających jego przynależność do konkretnego użytkownika oraz grupy, a także atrybuty określające co można z tym plikiem zrobić osobno dla trzech kategorii dla właściciela (u), grupy (g) i wszystkich innych (o). Atrybuty te określane są literami, mają też liczbowe odpowiedniki (kombinacja tych atrybutów w zapisie liczbowym to suma liczb-składników) - dokładne wyszczególnienie w poniższej tabeli:

 - 0 brak praw dostępu do pliku
 x 1prawo uruchomienia pliku
 w 2prawo zapisu pliku
-wx 3prawa do zapisu i uruchomienia
 r 4prawo odczytu pliku
r-x 5prawa do odczytu i uruchomienia
rw- 6prawa do odczytu i zapisu
rwx 7prawa do odczytu zapisu i uruchomienia
 

Oprócz wymienionych istnieją jeszcze atrybuty specjalne np.:
d - katalog,
 l - dowiązanie symboliczne.

Zatem pełny zapis praw dostępu do pliku może wyglądać np. tak:
-rwxr-xr--
co oznacza że:

  • właściciel pliku (domyślnie użytkownik) może z niego czytać, pisać i uruchamiać,
  • członkowie grupy czytać i uruchamiać,
  • inni użytkownicy tylko czytać.
Inny przykład:
d--x--x---
oznacza katalog dostępny jedynie dla użytkownika i grupy.

Powyższe dwa przykłady w zapisie numerycznym uprawnień wyglądają następująco:
754 i d110 - ten zapis zajmuje trochę mniej miejsca.

W programie Pliki uprawnienia w ograniczonym zakresie można zmieniać wybierając dla pliku opcję Właściwości i zakładkę Uprawnienia:


Uprawnienia do plików w formie długiej są widoczne w kolumnie Uprawnienia. W ustawieniach (Preferencje | Lista kolumn) można też włączyć widoczność kolumn z użytkownikiem i grupą.

Znacznie łatwiej uprawnieniami zarządzać z poziomu konsoli. W tym celu należy uruchomić program Terminal. Jest on dostępny z poziomu Menu Programy, ale można go także uruchomić z poziomu aplikacji Pliki wybierając z menu podręcznego opcję Otwórz w terminalu:


Dzięki temu katalog bieżący terminala to ten sam  z którego go uruchomiliśmy. Lista plików katalogu wyświetli się po wpisaniu polecenia:
ls

 
Aby wyświetlić listę plików ze szczegółami należy podać polecenie to z parametrem:
ls -l

 
Teraz wyświetla się znacznie więcej szczegółów:



Zostaje wyświetlona lista plików i katalogów, pierwsza kolumna to uprawnienia.
Spróbujmy ustawić uprawnienia do odczytu i zapisu wszystkim dla pliku konsola. Wpiszmy polecenie:
chmod a+rw konsola

 
Aby sprawdzić jak została wykonana ta operacja wpiszmy polecenie:
ls -l konsola

 
Jak widać uprawnienia zostały dodane.

Ogólnie polecenie chmod posiada prostą składnię:

chmod [ugoa][+ - =][rwx] nazwa_pliku

W pierwszym parametrze podaje się trzy elementy jak w poniższej tabelce:


 KtoDziałanieUprawnienie
 u użytkownik + dodać r odczyt
 g grupa - odjąć w zapis
 o inni = ustawić x wykonanie
 a wszyscy

Składni poleceń można się dowiedzieć podając polecenie man - np:
man chmod


Zostanie wyświetlona szczegółowa instrukcja (ang. manual):



Istnieje też polecenie służące do ustawiania właściciela i grupy dla pliku - chown, oraz wiele poleceń do zarządzania plikami i katalogami:
  • ls - wyświetlanie zawartości katalogu
  • cd - do zmiany katalogu bieżącego
  • mkdir - do tworzenia katalogów
  • rm -usuwanie plików/katalogów
  • cp - kopiowanie plików/katalogów
  • mv - przenoszenie plików/katalogów
  • clear - czyszczenie ekranu terminala

Midnight Commander

Większość tych operacji wygodniej jednak przeprowadzić z poziomu programu Midnight Commander - uruchamianego komendą mc:



Program Midnight Commander to linuksowa wersja znanego użytkownikom systemu DOS programu Norton Commander. Za pomocą prostych skrótów klawiaturowych umożliwia on wykonywanie prostych operacji -np:
  • F3 - podgląd zawartości pliku,
  • F4 - edycja pliku
  • F5 - kopiowanie pliku
  • F6 - przenoszenie pliku
  • F7 - nowy katalog
  • F8 - usunięcie pliku lub katalogu
Wszystkie operacji są oczywiście dostępne w menu programu. Między innymi kilka poleceń dotyczących uprawnień np.  Plik | Zmień uprawnienia:


Plik | Zmień właściciela:


Plik | Zaawansowana zmiana właściciela:


Aby widzieć uprawnienia do plików należy zmienić sposób ich wyświetlania wybierając z menu Lewy lub Prawy opcję Tryb wyświetlania:


W oknie dialogowym Tryb wyświetlania należy wybrać opcję Określony przez użytkownika i wpisać np:

half type name | size | mtime | perm

co oznacza że zostaną wyświetlone kolumny:

  • Nazwa pliku,
  • Rozmiar,
  • Czas modyfikacji,
  • Uprawnienia w pełnej formie,
Ten tryb prezentacji widać w lewym panelu. Można też wpisać:

half type name | size | mtime | mode:3

czyli:

  • Nazwa pliku,
  • Rozmiar,
  • Czas modyfikacji,
  • Uprawnienia w formie skróconej do trzech ostatnich znaków
Taka forma prezentacji widoczna jest w prawym panelu.

Double Commander
 

Osoby przyzwyczajone w czasach DOS’a do dwupanelowej formy zarządzania plikami (jak w programach Norton czy Midnight Commander) również w środowisku graficznym używają programów tego typu. W środowisku Windows bodaj najpopularniejszy jest program Total Commander. W środowisku graficznym GNOME również są dostępne programy tego typu np.  GNOME Commander czy Tux Commander. Według mnie najciekawszym programem tego typu jest jednak Double Commander.

W oficjalnym repozytorium dostępna jest wersja 0.5.11, na stronie programu:
http://doublecmd.sourceforge.net/
dostępna jest jednak nowsza wersja 0.6.6. Spróbujmy zatem zainstalować tę wersję z w/w strony wybierając zakładkę Download:



Interesuje nas wersja dla systemu Debian i biblioteki graficznej GTK - wybieramy zatem:
GNU Linux > DEB packages (Ubuntu, Debian, Mint etc.) > GTK2

W wybranej podstronie mamy do wyboru  4 systemy - oczywiście wybieramy Debian:



Jako pierwsze mamy propozycję rozszerzenia wpisów w pliku konfiguracyjnym sources.list i instalacji za pomocą apt’a. Poniżej jest możliwość instalacji bezpośredniej z pakietów .deb: Pobierz pakiety binarne bezpośrednio.

Pobieramy zatem właściwy pakiet - doublecmd-gtk_0.6.6-0+svn6327~trusty_i386.deb

Następnie na pobranym pliku wybieramy opcję
Otwórz za pomocą > Instalacja pakietów:



Niestety otrzymujemy komunikat błędu. I aby dowiedzieć się w czym problem przychodzą nam z pomocą programy konsoli.
Narzędziem do zarządzania pakietami z repozytorium jest APT (ang. Advanced Packaging Tool), a poleceniem do zarządzania z konsoli jest apt-get. Ja częściej korzystam z wygodnej nakładki graficznej Synaptic. Do zarządzania pojedynczymi pakietami służy narzędzie dpkg. Jednak graficzny interfejs tego narzędzia nie jest zbyt rozmowny. Spróbujmy zatem uzyskać więcej informacji z pomocą polecenia konsoli dpkg.
 
Dpkg może być uruchamiane m.in. z parametrami:

  • dpkg -l - wyświetla listę zainstalowanych pakietów,
  • dpkg -i nazwa_pakietu.deb  - instaluje pakiet z pliku .deb,
  • dpkg -r nazwa_pakietu - usuwa pakiet.
Spróbujmy zatem ponownie zainstalować pobrany plik pakietu .deb wpisując w terminalu polecenie
dpkg -i doublecmd-gtk_0.6.6-0+svn6327~trusty_i386.deb

Instalacja również kończy się niepowodzeniem, ale otrzymujemy dokładną informację dlaczego tak się dzieje - wystąpiły problemy z zależnościami uniemożliwiające skonfigurowanie pakietu. Brakuje bowiem aż trzech pakietów powiązanych:
  • doublecmd-common
  • doublecmd-plugins
  • doublecmd-gtk-dbg
Zatem pakiet został zainstalowany z błędami zanim rozwiążemy problem powinniśmy go odinstalować komendą:
dpkg -r doublecmd-gtk

Skąd zatem pobrać brakujące pakiety? Spójrzmy jak wygląda link do pobrania pakietu doublecmd-gtk i spróbujmy w przeglądarce załadować samą ścieżkę katalogu do pliku pakietu doublecmd-gtk:
http://download.opensuse.org/repositories/home:/Alexx2000/Debian_8.0/i386/

Po załadowaniu w przeglądarce wygląda to następująco:



Oprócz pobranego wcześniej pakietu doublecmd-gtk, mamy tutaj też:

doublecmd-plugins:
http://download.opensuse.org/repositories/home:/Alexx2000/Debian_8.0/i386/doublecmd-plugins_0.6.6-0+svn6327~trusty_i386.deb
 

oraz doublecmd-gtk-dbg:
http://download.opensuse.org/repositories/home:/Alexx2000/Debian_8.0/i386/doublecmd-gtk-dbg_0.6.6-0+svn6327~trusty_i386.deb

Brakuje jeszcze doublecmd-common - spróbujmy go odnaleźć. Wychodzimy poziom wyżej - Parent directory, a następnie All - i jest:
http://download.opensuse.org/repositories/home:/Alexx2000/Debian_8.0/all/doublecmd-common_0.6.6-0+svn6327~trusty_all.deb

Zatem po pobraniu trzech brakujących pakietów spróbujmy je zainstalować we właściwej kolejności:


Czyli:
  • doublecmd-common
  • doublecmd-plugins
  • doublecmd-gtk-dbg
  • doublecmd-gtk

Tym razem nie było problemów z instalacją, niestety naszego programu nie ma w menu, ale już wiemy jak temu zaradzić. Uruchamiamy aplikację Menu główne:



Następnie wybieramy kategorię i przycisk Nowy element. W wyświetlonym okienku wpisujemy Nazwę pozycji i jako komendę doublecmd. Ikonę wybieramy klikając w przycisk po lewej stronie - właściwą znajdziemy w katalogu: /usr/share/pixmaps
Oczywiście możemy sobie też utworzyć skrót na pulpicie. Po uruchomieniu program wygląda tak:



Jak widać jest to wersja 6.6 beta - czasem zdarza się mu wysypać. Niemniej bogactwo funkcji którymi dysponuje ten program jest nie do pogardzenia (np. porównywanie plików, synchronizacja katalogów czy wbudowany klient ftp). Warto nieco dostosować te program w oknie Ustawienia:



np. zmniejszyć domyślny rozmiar czcionek, format daty, czy elementy obecne w oknie głównym:


Warto także dostosować do swoich potrzeb pasek zakładek. Po tych zmianach program może wyglądać tak:


Jak widać do dyspozycji jest również rozbudowane okienko podglądu właściwości pliku i edycji uprawnień.

Jeszcze o konsoli
 

Wracając do konsoli. Okno terminala ma domyślnie białe tło, ale można zmienić tak jak w większości konsol na ciemne tło - należy wybrać opcję Edycja I Preferencje profilu:


Ja ustawiłem czarne tło i zieloną czcionkę  - jak na starym, szmaragdowym monitorze z lat 80-tych ubiegłego stulecia ;-)


Do tej pory konsoli używaliśmy do wydawania pojedynczych poleceń. Ale jej możliwości są znacznie większe. Interpretacją poleceń wprowadzanych w terminalu zajmuje się specjalny program - tzw. powłoka systemowa (ang. Shell). Dla systemów GNU/Linux istnieje kilka alternatywnych powłok z których najpopularniejszy jest Bash. Bash jest udoskonaloną wersją Bourne Shell - pierwszej powłoki dla systemu UNIX. Jej pełna nazwa angielska to Bourne-Again Shell (fonetycznie born again shell, czyli odrodzona powłoka). Bash zapisuje historię wykonywanych poleceń - domyślnie w pliku /home/usr/.bash_history. Można wykorzystać to w praktyce - polecenie history 10 wyświetli 10 ostatnio wpisanych poleceń, a komenda !7 wywoła ponownie polecenie numer 7 z tej listy.

Domyślna linia zachęty w terminalu ma postać:

user@host:path$

gdzie:

  • user - nazwa użytkownika,
  • host - nazwa komputera,
  • path - katalog bieżący,
  • $ - identyfikator zalogowanego zwykłego użytkownika (dla roota zmienia się na #)
Zatem jeśli wywołam okno terminala linia zachęty wygląda np. tak:


ibm@ibm~/Dokumenty$
(znak ~ oznacza katalog domowy zalogowanego użytkownika)
Po zalogowaniu na konto rota poleceniem su linia zachęty zmienia się na:

root@ibm:/home/ibm/Dokumenty#

Po wpisaniu dowolnego polecenia wynik jego wykonania ląduje na ekranie, ale możemy go przekierować np. do pliku tekstowego. Możemy to wykorzystać chcąc uzyskać listę wszystkich plików w katalogu. Wystarczy jedno proste polecenie:
ls >lista.txt

Wyświetlić zawartość tego pliku możemy poleceniem cat:
cat lista.txt 


Ale Bash pozwala nie tylko na pracę zarówno w trybie konwersacyjnym - czyli wydając pojedyncze polecenia, ale również wsadowym - poprzez uruchamianie skryptów. Skryptowy język Bash posiada instrukcje warunkowe (if, case), pętle (while, for), umożliwia definiowanie aliasów, funkcji a nawet konwersację z użytkownikiem z pomocą okien dialogowych. Nawet zwykłemu użytkownikowi może się czasem przydać trochę znajomości Bash’a, a nawet napisanie prostego skryptu.

ImageMagic

ImageMagic to pakiet narzędzi obsługiwanych z linii poleceń służących do przeprowadzania operacji na plikach graficznych np. ich konwersji. Więcej informacji o tym pakiecie można uzyskać na stronie:
http://www.imagemagick.org/www/command-line-tools.html

Najprostszy przykład to zmiana formatu pliku graficznego:
convert image.png image.jpg

Można też zmienić rozdzielczość (przeskalować) plik graficzny:
convert image.jpg -resize 50% new_image.jpg

Ciekawą możliwością jest też konwersja wielu plików graficznych w jeden plik pdf:
convert *.jpg pictures.pdf

Niestety nie można skonwertować poleceniem convert na raz wielu plików (convert *.png *.jpg)
I właśnie do takiej operacji przyda się Bash i użycie pętli:

for f in *.png; do
  convert ./"$f" ./"${f%.png}.jpg"
done


Powyższa pętla listuje pliki z rozszerzeniem *.png i convert wywołuje dla każdego z nich. Ale do takich grupowych operacji w pakiecie ImageMagic istnieje polecenie mogrify. Konwersja wielu plików mogła by wyglądać tak:
mogrify -format jpg /path/*.png

Tak samo przeskalowanie:
- pojedynczy plik:
mogrify -resize 50% image1.jpg


- lub wiele plików na raz:
mogrify -resize 50% *.jpg

Niestety ubocznym efektem nie zawsze pożądanym efektem polecenia mogrify jest podmiana oryginalnych plików.

Własne skrypty


Na koniec proste zadanie - stworzyć plik pdf o podanej nazwie zawierający zmniejszone o połowę pliki graficzne z bieżącego katalogu, przy czym pliki oryginalne mają pozostać nienaruszone. Jak tego najlepiej dokonać? Oczywiście pisząc własny skrypt. Możemy to zrobić z poziomu Double Commandera, który ma własny, całkiem niezły edytor. Naciśnijmy zatem kombinację klawiszy Shift + F4 - która tworzy i otwiera do edycji nowy plik (Samo F4 otwiera do edycji istniejący plik). W okienku wpiszemy jego nazwę np: make_pdf.

A następnie treść:

#!/bin/bash
# Jesli brak parametrow koncz
if [ $# -eq 0 ]
then
  echo "Nie podano nazwy pliku pdf"
  exit
fi
#utworz katalog tmp
mkdir _tmp
#utworz pomniejszone kopie plikow *.JPG
for f in *.JPG;
  do convert ./"$f" -resize 50% ./_tmp/"${f%.JPG}.jpg"
done
#utworzenie pliku pdf
convert ./_tmp/*.jpg "$1.pdf"
#usuniecie katalogu tmp
rm -r ./_tmp   
 


Linie rozpoczynające się od znaku # to komentarze - ignorowane przez interpreter bash’a. Pierwsza linia pliku ma specyficzną konstrukcję która informuje system operacyjny że podany plik jest skryptem bash’a. Skrypty mogą mieć zwyczajowe rozszerzenie .sh ale nie jest to konieczne (bez niego szybciej jest je wpisywać w konsoli). W edytorze Double Commandera warto włączyć w menu: Kolorowanie składni > UNIX Shell Scripts (Jeśli mamy plik z rozszerzeniem .sh kolorowanie włączy się automatycznie.)

Skrypt spodziewa się parametru wywołania – nazwy pliku PDF do utworzenia – jeśli jej nie podamy kończy pracę. Zamiast pętli for można też użyć dwu poleceń (kopiowanie i grupowa konwersja):
cp *.JPG ./_tmp
mogrify -resize 50% ./_tmp/*.JPG


Aby móc uruchamiać taki skrypt trzeba mu nadać uprawnienia do uruchamiania np. tak:
chmod a+x make_pdf

a samo wywołanie wygląda tak:
./make_pdf ksiazka 


Skrypt pracuje z plikami znalezionymi w katalogu bieżącym, jednak chcąc go użyć w innym katalogu trzeba by go wywoływać z pełną ścieżką dostępu - nie jest to zbyt wygodne. Rozwiązaniem jest zapisanie go w katalogu, który jest zawsze przeszukiwany. Listę takich katalogów zawiera zmienna środowiskowa $PATH którą możemy wyświetlić poleceniem:
echo $PATH 

Zwróci nam m.in. katalogi: /usr/local/bin:/usr/bin . Właśnie katalog /usr/local/bin jest zalecanym miejscem do przechowywania skryptów użytkownika. Jednak zapis w tym katalogu wymaga uprawnień administratora, za to jest dostępny dla wszystkich użytkowników. A gdzie umieszczać swoje prywatne skrypty tak aby przy wywołaniu nie trzeba było wpisywać całej ścieżki. Jest na to sposób. Ja utworzyłem sobie w katalogu $HOME podkatalog bin w którym zapisuje swoje skrypty. Aby jednak były automatycznie odnajdywane trzeba jeszcze zmodyfikować zmienną środowiskową $PATH poleceniem:
PATH=$PATH:~/bin

Aby nie musieć tego robić po każdym zalogowaniu można to dodać do pliku konfiguracyjnego Basha. Plik ten ~/.bashrc jest ukryty, zatem aby go odnaleźć z poziomu Double Commandera trzeba włączyć w menu Widok | Pokaż pliki ukryte/systemowe:



Wtedy można już wyedytować plik konfiguracyjny dodając na jego końcu w/w polecenie. Aby zmiany zaczęły obowiązywać trzeba się niestety zalogować ponownie. Za to teraz można już wygodnie tworzyć pliki PDF będąc w dowolnym katalogu prostym poleceniem:
make_pdf ksiazka

Do pisania prostych skryptów będziemy jeszcze wracać, a w następnym odcinku będzie coś o pisaniu programów w kompilowanych językach wyższego pod kontrolą systemem GNU/Linux.

Brak komentarzy:

Prześlij komentarz