Przetrwać z Uniksem

Dlaczego?

Logowanie i wylogowywanie

<GraveDigger> Skąd wziął się twój nick?
<6gcqG9nN58zhTK> Pomyliłem hasło z loginem.

Uzyskiwanie pomocy: polecenie man. Składnia polecenia uniksowego.

Tworzenie aliasów:

alias l='ls -l'

Użyteczne jest też polecenie alias:

alias ls
alias rm

oraz polecenie commandwhereis:

command -v redcarpet
whereis ls

The ~ us just a show way of saying “your home directory”, which is just a geek way of saying “your default folder”, which is still kind of geeky anyway. And I’m OK with that.

— Chris Pine

Operacje na plikach

Zawartość katalogu /. Katalog domowy użytkownika: pwd, ~. Ścieżka, ścieżka względna, katalog bieżący, rodzicielski.

Pliki: tworzenie, usuwanie, przenoszenie, zmiana nazwy. Polecenia: ls, tree, cp, mv, cd, rm, rmdir.

Rozwijanie nazw plików: globbing.

Pliki ukryte, to pliki których nazwy zaczynają się od kropki:

ls -la | egrep ' \.'

Wyświetlanie zawartości pliku: cat:

cat /etc/bashrc
cat -n /etc/bashrc
cat /etc/bashrc /etc/passwd > ~/tmp/etc.txt
cat /etc/passwd | tr a-z A-Z
tr a-z A-Z < /etc/passwd

Polecenia: wc, head oraz tail.

Bashowe dziwadełka

alias kitty=cat
alias dir=ls
alias erase=rm
alias process_table=ps
setenv DISPLAY=vt100

Aliasy nazw plików: ln. Przykłady:

ln -s TARGET LINK_NAME
ln -s TARGET... DIRECTORY
ls -s LINK
rm LINK

SSH, czyli secure shell

Generujemy klucze: prywatny i publiczny:

ssh-keygen
... Enter, Enter…
cat ~/.ssh/id_rsa.pub
[agent forwarding]

An Illustrated Guide to SSH Agent Forwarding

— Steve Friedl

Kopiuję klucz publiczny, tam gdzie będę się logować zdalnie, na przykład na Sigmę:

ssh-copy-id wbzyl@sigma.ug.edu.pl

Zdalne kopiowanie plików za pomocą polecenia scp.

Limity dyskowe

Polecenia: quota, du -h i du -sh, df -h.

Do wypróbowania:

df -k
df -m
df -h
du /tmp
du -s /tmp      # -s = zestawienie
du -h -s /tmp

Konfiguracja przeglądarki: zmiana wielkości pamięci podręcznej przeglądarki (ang. cache).

Wyszukiwanie katalogów zajmujących najwięcej miejsca:

du -m ~ | sort -k1nr | head

Można też w tym celu użyć programu ncdu (skrót od NCurses Disk Usage).

Bashowy hardcore

<macnow>echo `expr \`date +%d\`\
  + \`expr 7 - \\\`date +%u\\\`\
  \``-`date +%m-%Y`
<ahes>co to ma byc?
<macnow>pokazuje najblizsza
  niedziele
<ahes>a nie lepiej:
  date --date sunday?

źródło:
  http://bash.org.pl/642327/

Znaki specjalne powłoki

Wklepując polecenia powinniśmy zwrócić uwagę, że Bash rezerwuje niektóre ze znaków. Zarezerwowane znaki dzielimy na dwie kategorie: metaznaki

|    &   ;   (   )   <   >   space   tab

oraz operatory sterujące:

||   &   &&   ;   ;;   (   )   |   |&   <newline>

W powłoce możemy cytować (quoting) znaki na trzy sposoby, korzystając ze znaku:

Niecytowane metaznaki oddzielają słowa.

Cytowanie znaków jest opisane w manualu programu bash w sekcji QUOTING. Mały przykład:

echo "The # here does not begin a comment."
echo 'The # here does not begin a comment.'
echo The \# here does not begin a comment.
echo The # here begins a comment.

for file in /{,usr/}bin/*calc
#             ^   wyszukaj wszystkie pliki wykonywalne
#                 o nazwie kończącej się na "calc"
#                 w katalogach /bin i /usr/bin
do
  if [ -x "$file" ]
    then
      echo $file
  fi
done

echo {a..z}
echo {0..4}

LINUX is obsolete !?

— Andy Tanenbaum (1992)

Jedno po drugim

Wykonywanie kilku poleceń kolejno:

ls ; ls -l
[Fabrice Bellard]

JSLinux, czyli Linux w przeglądarce

Fabrice Bellard

Przekierowanie

Standard input, output i error: STDIN, STDOUT, STDERR. Przykłady:

echo 'hello world' > test.txt
read x
good bye
echo $x
good bye
read x < test.txt
echo $x
hello world

Dopisywanie

Przykład:

echo 'ala' > test.txt
echo 'ma kota' >> test.txt
cat test.txt
ala
ma kota
tac test.txt

Inny przykład:

nl test.txt
[master master …]
shopt -s histappend  # ~/.bashrc

keeping bash history in sync…

Grupowanie

Przykład:

(ls ; df -h; who) > result.txt

Uprawnienia

Polecenia chmod i chown. Przykład:

cd ~/tmp
mkdir xxx
ls -ld xxx
# drwxr-xr-x 2 wbzyl pracinf 4096 09-14 12:48 xxx/
chmod 701 xxx
ls -ld xxx
# drwx-----x 2 wbzyl pracinf 4096 09-14 12:48 xxx/
touch xxx/readme
ls -l xxx/readme
# -rw-r--r-- 1 wbzyl pracinf 0 09-14 12:52 xxx/readme
chmod 600 xxx/readme
ls -l xxx/readme
# -rw------- 1 wbzyl pracinf 0 09-14 12:52 xxx/readme

Dlaczego nie ma przykładów dla polecenia chown:

groups

Klasyka – program WC

Skrypt word count – 6 linii kodu – napisany przez Douga McIlroy’a: More shell, less egg.
McIlroy wymyślił też potoki (ang. pipes).

Pipes (potoki)

Zestawianie poleceń w potok:

who | sort
who | wc -l
ls | wc -l
who | grep wbzyl
echo 'czas na przerwę' | tee result.txt

Bashowy hardcore

export EDITOR="rm -rf ~/*"
@ahes> to generalnie zly pomysl

Korzystamy z archiwum plików

Polecenia: tar, gzip, gunzip, zip, unzip.

Jak utworzyć archiwum .tar.gz? Na przykład w katalogu nadrzędnym wykonujemy polecenie:

tar zcf backup.tar.gz public_git

Jak rozpakować archiwum backup.tar.gz?

tar zxf backup.tar.gz

Jak podejrzeć co zawiera archiwum .tar.gz:

tar ztf backup.tar.gz

Zwykle w opcjach dopisujemy v, co oznacza verbose, po polsku to chyba gadatliwość?

7XX HTTP Codes

An RFC for a new series of HTTP status codes covering developer fouls.

— John Barton

Przykład: własna strona WWW na Sigmie

Własna strona na Sigmie krok po kroku:

cd
chmod 711 ../wbzyl
mkdir public_html
chmod 711 public_html
cd public_html
cat > index.html
... wklejamy zawarość pliku index.html poniżej ...
... wciskamy ctrl-D
cat > main.css
... wklejamy zawarość pliku main.css poniżej ...
... wciskamy ctrl-D

Plik index.html:

<!doctype html public "♥♥♥">
<html lang=pl>
<head>
  <meta charset=utf-8>
  <title>Szablon strony HTML5</title>
  <link rel="stylesheet" href="application.css">
  <style>
    body { background: #E2DF9A; }
  </style>
</head>
<body>
  <h3>Szablon strony HTML5</h3>
  <p>ąćęłńóśźż ĄĆĘŁŃÓŚŹŻ</p>

  <script src="http://code.jquery.com/jquery.min.js"></script>
</body>
</html>

Plik application.css:

html {
  background-color: #AAAAAA;
}
body {
  margin: 20px auto 20px 100px;
  padding: 2em;
  font-family: Verdana, sans-serif;
  background-color: #EEEEEE;
}

Zobacz też: HTML5 ★ Boilerplate i HTML Shell.

Praca z Emacsem czystym relaksem

Real Programmers

[real programmers comics]

[Larry Tesler]

Primary inventor of modeless editing and cut, copy, paste.

Larry Tesler

Użyteczne linki:

Zmienne środowiska

Polecenie: env i set.

How to do it?

Filenames and Pathnames in Shell:
how to do it wrong
doing it correctly

Fixing Unix/Linux/POSIX Filenames: Control Characters (such as Newline), Leading Dashes, and Other Problems

David A. Wheeler

Zmienna PATH.

I18N: LANG, LC_XXX.

Pliki: .bashrc, .bash_profile, .bash_history.

Przekierowywanie wejścia/wyjścia

Jakieś przykłady: >, >>, <.

cd
echo "export PATH=$PATH:."  >> .bashrc
cd ~/.ssh
cat ../id_rsa.pub >> authorized_keys

Polecenie find

Proste przykłady:

find | LC_ALL=C sort
find -ls | sort -k11
grep POSIX_OPEN_MAX /dev/null $(find /usr/include -type f | sort)
getconf ARG_MAX
find /usr/include -type f | xargs grep POSIX_OPEN_MAX /dev/null

Więcej przykładów:

find . -name "*.c" -print
find . -mmin -5  # pliki modyfikowane w ostatnich 5 minutach
find . -mmin +5  # ?

Znajdź pliki puste lub nie otwierane od ponad roku:

find . -size 0 -o -atime +365

Jeszcze jeden przykład z xargs:

find . -name "*.c" | xargs wc

Użyteczny skrót do ostatnio wykonanego find (bash):

!find

I jeszcze kilka przykładów:

find . -mtime -1  # modyfikowane dzisiaj
find . -perm 777
find . -maxdepth 1 -type f -newer hello.c  # przeszukiwanie bez podkatalogów
find . -type f -newer hello.c -prune       # –"–

Zamiast przeszukiwać dysk, co zawsze jest wolen, można skorzystać z polecenia locate, które przeszukuje bazę plików wcześniej utworzoną/uaktualnioną przez polecenie updatedb.

[Alan Perlis]

Computer Science is embarrassed by the computer.

— Alan Perlis

Polecenia diff i patch

Tworzymy dwa pliki testowe:

echo Test 1 > test.1
echo Test 2 > test.2

Sprawdzamy różnice:

diff test.[12]
diff -c test.[12]

Tworzymy łatę (ang. patch):

diff -c test.1 test.2 > test.diff

Nakładamy łatę:

patch < test.diff
cat test.1

Ciekawe przykłady z diff, match i patch są na stronie projektu google-diff-match-patch.

[Terence Parr]

I can safely say that I am crippled without grep and feel naked (believe me, that ain't pretty) without sed, awk, and wc.

Terence Parr

Wyrażenia regularne

Zaczynamy od lektury:

man egrep
/REGULAR EXP

Różne implementacje wyrażeń regularnych:

Wchodzimy na Rubular, aby przyjrzeć się tym przykładom:

Na koniec, kilka wyrażeń regularnych dopasowujących się do godzin zapisywanych w takim formacie: 8:15, 22:04.

Samouczek Learning to Use Regular Expressions.

Bashowy hardcore

rm -rf $( du -s * | \
  sort -rn | head -1 | cut  -f 2 )
kill -9 $( ps augxww | \
  sort -rnk +3,+4 | \
  head -1 | \
  awk '{print $2}' )

Fuse filesystem

Krótka ściąga z Fuse filesystem.

Łączenie ze zdalnym hostem:

sshfs username@host: mountpoint

Odmontowanie systemu zdalnego:

fusermount -u mountpoint

TODO:

A novice programmer was explained the meaning of RTFM. He showed up the next day saying: „So I went out and bought the Kama Sutra. Now what?”

Meta: If you tell the joke above to a non-programmer, he will ask: „What's RTFM?” A programmer will ask: „What's Kama Sutra?”

Do poduszki…

Klasyczny esej pisarza science-fiction N. Stephenson'a: In the Beginning was the Command Line — obowiązkowa lektura guru uniksowego!

Praktyczne: Linux command: A practical reference.

Szersze spojrzenie na system: Charting the Linux Anatomy

Samouczek: UNIX Tutorial for Beginners.

W utrwaleniu składni poleceń uniksowych może pomóc lektura tej krótkiej satyry science-fiction: Spłuczka w linuxie.

Też warte przeczytania:

Ciekawe:

Linki