sp-tutorial 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +42 -0
- data/Rakefile +36 -0
- data/TODO +6 -0
- data/VERSION.yml +4 -0
- data/config.ru +15 -0
- data/lib/config.ru +15 -0
- data/lib/public/doc/Cyklop-otf-0_91.zip +0 -0
- data/lib/public/doc/ex/sp_lab01_zad.odt +0 -0
- data/lib/public/doc/ex/sp_lab02_zad.odt +0 -0
- data/lib/public/doc/ex/sp_lab03_zad.odt +0 -0
- data/lib/public/doc/ex/sp_lab04_zad.odt +0 -0
- data/lib/public/doc/latexsheet.pdf +0 -0
- data/lib/public/doc/survival.pdf +0 -0
- data/lib/public/images/Thatll_Flat_Git_It_Vol_20.jpg +0 -0
- data/lib/public/images/alan_kay.jpg +0 -0
- data/lib/public/images/alan_perlis.jpg +0 -0
- data/lib/public/images/albert_einstein.jpg +0 -0
- data/lib/public/images/algorithm.png +0 -0
- data/lib/public/images/biuletyn-snall.jpg +0 -0
- data/lib/public/images/bop.jpg +0 -0
- data/lib/public/images/borenstein.jpg +0 -0
- data/lib/public/images/commits.png +0 -0
- data/lib/public/images/gitk-branches.png +0 -0
- data/lib/public/images/jkew.jpg +0 -0
- data/lib/public/images/jwz.gif +0 -0
- data/lib/public/images/knuth.jpg +0 -0
- data/lib/public/images/marcin_wolinski.jpg +0 -0
- data/lib/public/images/objects-example.png +0 -0
- data/lib/public/images/perlis.gif +0 -0
- data/lib/public/images/real_programmers.png +0 -0
- data/lib/public/images/richard_stallman.jpg +0 -0
- data/lib/public/images/sp.png +0 -0
- data/lib/public/images/sp.svg +117 -0
- data/lib/public/images/spowrotem.jpg +0 -0
- data/lib/public/images/staging_area.png +0 -0
- data/lib/public/images/the_thinker.jpg +0 -0
- data/lib/public/images/tparr.jpg +0 -0
- data/lib/public/images/wide-gitk.gif +0 -0
- data/lib/public/javascripts/sp.js +1 -0
- data/lib/public/stylesheets/fonts/Cyklop-Italic.otf +0 -0
- data/lib/public/stylesheets/icons/doc.png +0 -0
- data/lib/public/stylesheets/icons/email.png +0 -0
- data/lib/public/stylesheets/icons/external.png +0 -0
- data/lib/public/stylesheets/icons/feed.png +0 -0
- data/lib/public/stylesheets/icons/im.png +0 -0
- data/lib/public/stylesheets/icons/pdf.png +0 -0
- data/lib/public/stylesheets/icons/visited.png +0 -0
- data/lib/public/stylesheets/icons/xls.png +0 -0
- data/lib/public/stylesheets/ie.css +27 -0
- data/lib/public/stylesheets/print.css +30 -0
- data/lib/public/stylesheets/screen.css +249 -0
- data/lib/public/stylesheets/sp.css +194 -0
- data/lib/public/stylesheets/src/grid.png +0 -0
- data/lib/public/stylesheets/uv.css +121 -0
- data/lib/sp-tutorial.rb +78 -0
- data/lib/views/answers.rdiscount +7 -0
- data/lib/views/exercises.rdiscount +154 -0
- data/lib/views/favicon.ico.rdiscount +0 -0
- data/lib/views/git.rdiscount +558 -0
- data/lib/views/labs01.rdiscount +54 -0
- data/lib/views/labs02.rdiscount +32 -0
- data/lib/views/labs03.rdiscount +28 -0
- data/lib/views/labs04.rdiscount +41 -0
- data/lib/views/latex.rdiscount +498 -0
- data/lib/views/layout.rdiscount +41 -0
- data/lib/views/ll.rdiscount +78 -0
- data/lib/views/main.rdiscount +67 -0
- data/lib/views/scripts.rdiscount +618 -0
- data/lib/views/unix-commands.rdiscount +604 -0
- data/lib/views/unix-guru.rdiscount +696 -0
- data/sp-tutorial.gemspec +125 -0
- metadata +186 -0
@@ -0,0 +1,604 @@
|
|
1
|
+
#### {% title "Przegląd poleceń Uniksowych" %}
|
2
|
+
|
3
|
+
# Przetrwać z uniksem
|
4
|
+
|
5
|
+
<blockquote>
|
6
|
+
{%= image_tag "/images/alan_perlis.jpg", :alt => "[Alan Perlis]" %}
|
7
|
+
<p>
|
8
|
+
Computer Science is embarrassed by the computer.
|
9
|
+
</p>
|
10
|
+
<p class="author">— Alan Perlis</p>
|
11
|
+
</blockquote>
|
12
|
+
|
13
|
+
|
14
|
+
## Logowanie i wylogowywanie
|
15
|
+
|
16
|
+
* Hasła. Co mierzy [The Password Meter] [password meter]
|
17
|
+
* Zmiana hasła: polecenie `passwd`
|
18
|
+
* Logowanie zdalne: `ssh`. [Getting started with SSH] [started with ssh]
|
19
|
+
* Wylogowywanie: `exit`, `logout`
|
20
|
+
* Blokowanie i odblokowywanie terminala: ctrl+s, ctrl+q
|
21
|
+
* Kto pracuje: `who`, `w`.
|
22
|
+
|
23
|
+
Uzyskiwanie pomocy: polecenie `man`.
|
24
|
+
Składnia polecenia uniksowego.
|
25
|
+
|
26
|
+
Tworzenie aliasów:
|
27
|
+
|
28
|
+
:::shell-unix-generic
|
29
|
+
alias l='ls -l'
|
30
|
+
|
31
|
+
Polecenie *alias*:
|
32
|
+
|
33
|
+
alias ls
|
34
|
+
alias rm
|
35
|
+
|
36
|
+
Aliasy nazw plików: *ln*. Przykłady:
|
37
|
+
|
38
|
+
ln -s TARGET LINK_NAME
|
39
|
+
ln -s TARGET... DIRECTORY
|
40
|
+
ls -s LINK
|
41
|
+
rm LINK
|
42
|
+
|
43
|
+
## SSH: secure shell
|
44
|
+
|
45
|
+
Generujemy klucze: prywatny i publiczny:
|
46
|
+
|
47
|
+
:::shell-unix-generic
|
48
|
+
ssh-keygen
|
49
|
+
... Enter, Enter…
|
50
|
+
cat ~/.ssh/id_rsa.pub
|
51
|
+
|
52
|
+
|
53
|
+
## Limity dyskowe
|
54
|
+
|
55
|
+
Polecenia: `quota`, `du -h` i `du -sh`, `df -h`.
|
56
|
+
|
57
|
+
Do wypróbowania:
|
58
|
+
|
59
|
+
:::shell-unix-generic
|
60
|
+
df -k
|
61
|
+
df -m
|
62
|
+
df -h
|
63
|
+
du /tmp
|
64
|
+
du -s /tmp # -s = zestawienie
|
65
|
+
du -h -s /tmp
|
66
|
+
|
67
|
+
Konfiguracja przeglądarki: zmiana wielkości pamięci podręcznej
|
68
|
+
przeglądarki (ang. *cache*).
|
69
|
+
|
70
|
+
|
71
|
+
## Znaki specjalne powłoki
|
72
|
+
|
73
|
+
Wklepując polecenia powinniśmy zwrócić uwagę, że *Bash* rezerwuje
|
74
|
+
niektóre ze znaków. Zarezerwowane znaki dzielimy na dwie kategorie:
|
75
|
+
*metaznaki*
|
76
|
+
|
77
|
+
| & ; ( ) < > space tab
|
78
|
+
|
79
|
+
oraz *operatory sterujące*:
|
80
|
+
|
81
|
+
|| & && ; ;; ( ) | |& <newline>
|
82
|
+
|
83
|
+
W powłoce możemy cytować (*quoting*) znaki na trzy sposoby,
|
84
|
+
korzystając ze znaku:
|
85
|
+
|
86
|
+
* escape \( \\ \)
|
87
|
+
* pojedynczego cudzysłowu \( ' \)
|
88
|
+
* podwójnego cudzysłowu \( " \)
|
89
|
+
|
90
|
+
Niecytowane *metaznaki* oddzielają słowa.
|
91
|
+
|
92
|
+
Cytowanie znaków jest opisane w manualu programu *bash*
|
93
|
+
w sekcji *QUOTING*. Mały przykład:
|
94
|
+
|
95
|
+
:::shell-unix-generic
|
96
|
+
echo "The # here does not begin a comment."
|
97
|
+
echo 'The # here does not begin a comment.'
|
98
|
+
echo The \# here does not begin a comment.
|
99
|
+
echo The # here begins a comment.
|
100
|
+
|
101
|
+
echo ${PATH#*:} # podstawienie parametru
|
102
|
+
echo $(( 2#101 )) # zmiana podstawy na 10
|
103
|
+
|
104
|
+
echo hello; echo world
|
105
|
+
|
106
|
+
for file in /{,usr/}bin/*calc
|
107
|
+
# ^ wyszukaj wszystkie pliki wykonywalne
|
108
|
+
# o nazwie kończącej się na "calc"
|
109
|
+
# w katalogach /bin i /usr/bin
|
110
|
+
do
|
111
|
+
if [ -x "$file" ]
|
112
|
+
then
|
113
|
+
echo $file
|
114
|
+
fi
|
115
|
+
done
|
116
|
+
|
117
|
+
echo {a..z}
|
118
|
+
echo {0..4}
|
119
|
+
|
120
|
+
|
121
|
+
## Jedno po drugim
|
122
|
+
|
123
|
+
Wykonywanie kilku poleceń kolejno:
|
124
|
+
|
125
|
+
ls ; ls -l
|
126
|
+
|
127
|
+
|
128
|
+
## Przekierowanie
|
129
|
+
|
130
|
+
Standard input, output i error: STDIN, STDOUT, STDERR.
|
131
|
+
Przykłady:
|
132
|
+
|
133
|
+
echo 'hello world' > test.txt
|
134
|
+
read x
|
135
|
+
good bye
|
136
|
+
echo $x
|
137
|
+
good bye
|
138
|
+
read x < test.txt
|
139
|
+
echo $x
|
140
|
+
hello world
|
141
|
+
|
142
|
+
|
143
|
+
## Dopisywanie
|
144
|
+
|
145
|
+
Przykład:
|
146
|
+
|
147
|
+
echo 'ala > test.txt
|
148
|
+
echo 'ma kota' >> test.txt
|
149
|
+
cat test.txt
|
150
|
+
ala
|
151
|
+
ma kota
|
152
|
+
tac test.txt
|
153
|
+
|
154
|
+
Inny przykład:
|
155
|
+
|
156
|
+
nl test.txt
|
157
|
+
|
158
|
+
|
159
|
+
## Grupowanie
|
160
|
+
|
161
|
+
Przykład:
|
162
|
+
|
163
|
+
(ls ; df -h; who) > result.txt
|
164
|
+
|
165
|
+
|
166
|
+
## Potoki
|
167
|
+
|
168
|
+
Zestawianie poleceń w potok:
|
169
|
+
|
170
|
+
:::shell-unix-generic
|
171
|
+
who | sort
|
172
|
+
who | wc -l
|
173
|
+
ls | wc -l
|
174
|
+
who | grep wbzyl
|
175
|
+
echo 'czas na przerwę' | tee result.txt
|
176
|
+
|
177
|
+
|
178
|
+
<blockquote>
|
179
|
+
<h1>Bashowy hardcore</h1>
|
180
|
+
<pre>rm -rf $( du -s * | \
|
181
|
+
sort -rn | head -1 | cut -f 2 )
|
182
|
+
kill -9 $( ps augxww | \
|
183
|
+
sort -rnk +3,+4 | \
|
184
|
+
head -1 | \
|
185
|
+
awk '{print $2}' )
|
186
|
+
</pre>
|
187
|
+
</blockquote>
|
188
|
+
|
189
|
+
Wyszukiwanie katalogów zajmujących najwięcej miejsca na dysku:
|
190
|
+
|
191
|
+
:::shell-unix-generic
|
192
|
+
du -m ~ | sort -k1nr | head
|
193
|
+
|
194
|
+
|
195
|
+
## Operacje na plikach
|
196
|
+
|
197
|
+
Zawartość katalogu `/`. Katalog domowy użytkownika: `pwd`.
|
198
|
+
Ścieżka, ścieżka względna, katalog bieżący, rodzicielski.
|
199
|
+
|
200
|
+
<blockquote>
|
201
|
+
<h1>Bashowe dziwadełka</h1>
|
202
|
+
<pre>alias kitty=cat
|
203
|
+
alias dir=ls
|
204
|
+
alias erase=rm
|
205
|
+
alias process_table=ps
|
206
|
+
setenv DISPLAY=vt100
|
207
|
+
</pre>
|
208
|
+
</blockquote>
|
209
|
+
|
210
|
+
Pliki: tworzenie, usuwanie, przenoszenie, zmiana nazwy.
|
211
|
+
Polecenia: `ls`, `tree`, `cp`, `cd`, `rm`, `rmdir`.
|
212
|
+
|
213
|
+
Rozwijanie nazw plików: globbing.
|
214
|
+
|
215
|
+
*Pliki ukryte*, to pliki których nazwy zaczynają się od kropki:
|
216
|
+
|
217
|
+
:::shell-unix-generic
|
218
|
+
ls -la | egrep ' \.'
|
219
|
+
|
220
|
+
Wyświetlanie zawartości pliku: `cat`:
|
221
|
+
|
222
|
+
:::shell-unix-generic
|
223
|
+
cat /etc/bashrc
|
224
|
+
cat -n /etc/bashrc
|
225
|
+
cat /etc/bashrc /etc/passwd > ~/tmp/etc.txt
|
226
|
+
cat /etc/passwd | tr a-z A-Z
|
227
|
+
tr a-z A-Z < /etc/passwd
|
228
|
+
|
229
|
+
Polecenia: `wc`, `head` oraz `tail`.
|
230
|
+
|
231
|
+
Zdalne kopiowanie plików: `scp`.
|
232
|
+
|
233
|
+
|
234
|
+
## Korzystamy z archiwum plików
|
235
|
+
|
236
|
+
Polecenia: *tar*, *gzip*, *gunzip*, *zip*, *unzip*.
|
237
|
+
|
238
|
+
Jak utworzyć archiwum *.tar.gz*? Na przykład
|
239
|
+
w katalogu nadrzędnym wykonujemy polecenie:
|
240
|
+
|
241
|
+
tar zcf backup.tar.gz public_git
|
242
|
+
|
243
|
+
Jak rozpakować archiwum *backup.tar.gz*?
|
244
|
+
|
245
|
+
tar zxf backup.tar.gz
|
246
|
+
|
247
|
+
Jak podejrzeć co zawiera archiwum *.tar.gz*:
|
248
|
+
|
249
|
+
tar ztf backup.tar.gz
|
250
|
+
|
251
|
+
Zwykle w opcjach dopisujemy *v*, co oznacza
|
252
|
+
*verbose*, po polsku to chyba gadatliwość?
|
253
|
+
|
254
|
+
|
255
|
+
## Uprawnienia
|
256
|
+
|
257
|
+
Polecenia `chmod` i `chown`. Przykład:
|
258
|
+
|
259
|
+
:::shell-unix-generic
|
260
|
+
cd ~/tmp
|
261
|
+
mkdir xxx
|
262
|
+
ls -ld xxx
|
263
|
+
# drwxr-xr-x 2 wbzyl pracinf 4096 09-14 12:48 xxx/
|
264
|
+
chmod 701 xxx
|
265
|
+
ls -ld xxx
|
266
|
+
# drwx-----x 2 wbzyl pracinf 4096 09-14 12:48 xxx/
|
267
|
+
touch xxx/readme
|
268
|
+
ls -l xxx/readme
|
269
|
+
# -rw-r--r-- 1 wbzyl pracinf 0 09-14 12:52 xxx/readme
|
270
|
+
chmod 600 xxx/readme
|
271
|
+
ls -l xxx/readme
|
272
|
+
# -rw------- 1 wbzyl pracinf 0 09-14 12:52 xxx/readme
|
273
|
+
|
274
|
+
Dlaczego nie ma przykładów dla polecenia `chown`:
|
275
|
+
|
276
|
+
:::shell-unix-generic
|
277
|
+
groups
|
278
|
+
|
279
|
+
|
280
|
+
## Przykład: własna strona WWW na *Sigmie*
|
281
|
+
|
282
|
+
Własna strona na *Sigmie* krok po kroku:
|
283
|
+
|
284
|
+
:::shell-unix-generic
|
285
|
+
cd
|
286
|
+
chmod 711 ../wbzyl
|
287
|
+
mkdir public_html
|
288
|
+
chmod 711 public_html
|
289
|
+
cd public_html
|
290
|
+
cat > index.html
|
291
|
+
... wklejamy zawarość pliku index.html poniżej ...
|
292
|
+
... wciskamy ctrl-D
|
293
|
+
cat > main.css
|
294
|
+
... wklejamy zawarość pliku main.css poniżej ...
|
295
|
+
... wciskamy ctrl-D
|
296
|
+
|
297
|
+
Plik *index.html*:
|
298
|
+
|
299
|
+
:::html
|
300
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
301
|
+
"http://www.w3.org/TR/html4/strict.dtd">
|
302
|
+
<html>
|
303
|
+
<head>
|
304
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
305
|
+
<link href="/favicon.ico" rel="SHORTCUT ICON">
|
306
|
+
<link href="main.css" media="all" rel="Stylesheet" type="text/css" charset="utf-8">
|
307
|
+
<title>HTML4 + CSS</title>
|
308
|
+
</head>
|
309
|
+
<body>
|
310
|
+
<h1>HTML4 + CSS</h1>
|
311
|
+
<p>Przykładowy akapit.</p>
|
312
|
+
</body>
|
313
|
+
</html>
|
314
|
+
|
315
|
+
Plik *main.css*:
|
316
|
+
|
317
|
+
:::css_experimental
|
318
|
+
html {
|
319
|
+
background-color: #AAAAAA;
|
320
|
+
}
|
321
|
+
body {
|
322
|
+
margin: 20px 100px;
|
323
|
+
padding: 2em;
|
324
|
+
font-family: Verdana, sans-serif;
|
325
|
+
background-color: #EEEEEE;
|
326
|
+
}
|
327
|
+
|
328
|
+
Na koniec walidujemy stronę.
|
329
|
+
|
330
|
+
|
331
|
+
## Przykład: repozytorium Git
|
332
|
+
|
333
|
+
Zakładamy repozytorium:
|
334
|
+
|
335
|
+
:::shell-unix-generic
|
336
|
+
cd ~/tmp
|
337
|
+
mkdir test
|
338
|
+
cd test
|
339
|
+
touch README.md
|
340
|
+
git init
|
341
|
+
git add .
|
342
|
+
git commit -m "pierwsza wrzutka"
|
343
|
+
... edycja README.md, add – zmiany, commit – co zostało zrobione
|
344
|
+
|
345
|
+
|
346
|
+
## Praca z *Emacsem* czystym relaksem
|
347
|
+
|
348
|
+
Edytory ASCII i non-ASCII. [Emacs kontra Vi] [wojny edytorowe].
|
349
|
+
|
350
|
+
[**Real Programmers**](http://xkcd.com/378/)
|
351
|
+
|
352
|
+
{%= image_tag "/images/real_programmers.png", :alt => "[real programmers comics]" %}
|
353
|
+
|
354
|
+
Użyteczne linki:
|
355
|
+
|
356
|
+
* [A Guided Tour of Emacs] [emacs-tour]
|
357
|
+
* {%= link_to "Skróty klawiszowe edytora Emacs", "/doc/survival.pdf" %}
|
358
|
+
* [Emacs Wiki] [emacs-wiki]
|
359
|
+
* [Emacs Starter Kit] [emacs-starter-kit] —
|
360
|
+
All the code you need to get started, with an emphasis on dynamic languages.
|
361
|
+
* [GNU Emacs manual] [emacs-manual]
|
362
|
+
* [Programming in Emacs Lisp (Second Edition)] [emacs-lisp-intro]
|
363
|
+
* [An Introduction to Programming in Emacs Lisp] [elisp]
|
364
|
+
|
365
|
+
Zobacz też edytor [Bespin » Code in the Cloud] [bespin].
|
366
|
+
|
367
|
+
|
368
|
+
## Przykład: udostępniamy repozytorium Git
|
369
|
+
|
370
|
+
Tworzymy *bare* repo *test.git* z repozytorium *test*:
|
371
|
+
|
372
|
+
:::shell-unix-generic
|
373
|
+
mkdir ~/public_git # katalog na publiczne repozytoria
|
374
|
+
git clone --bare ~/tmp/test ~/public_git/test.git
|
375
|
+
|
376
|
+
Teraz każdy, korzystając z protokołu git, może sklonować na swój
|
377
|
+
komputer repo *test.git*:
|
378
|
+
|
379
|
+
:::shell-unix-generic
|
380
|
+
git clone git://sigma.inf.ug.edu.pl/~wbzyl/test.git
|
381
|
+
|
382
|
+
Właściciel repo, czyli ja, klonuje repo korzystając z protokołu
|
383
|
+
**ssh**:
|
384
|
+
|
385
|
+
:::shell-unix-generic
|
386
|
+
git clone ssh://sigma.inf.ug.edu.pl/~wbzyl/public_git/test.git
|
387
|
+
|
388
|
+
Właściciel repo może wykonać `pull` i `push`, a pozostali
|
389
|
+
tylko `pull`.
|
390
|
+
|
391
|
+
|
392
|
+
## Przykład: blog
|
393
|
+
|
394
|
+
Skorzystamy z gotowego bloga [Jekyll-Bloga] [jblog]
|
395
|
+
który specjalnie przygotowałem na tę okazję.
|
396
|
+
|
397
|
+
Wchodzimy na serwer *http://github.com*, gdzie zakładamy darmowe publiczne
|
398
|
+
konto (do 300MB): zakładka *Pricing and Signup*.
|
399
|
+
|
400
|
+
Po zalogowaniu się na swoje konto, klikamy w zakładkę *account*
|
401
|
+
i dodajemy klucz publiczny z *Sigmy*: zakładka *SSH Public Keys*.
|
402
|
+
|
403
|
+
<blockquote>
|
404
|
+
<p>
|
405
|
+
<em>fork</em> – widelec, widły, <b>rozwidlenie</b><br/>
|
406
|
+
<em>branch</em> – gałąź, odnoga; <b>odgałęzienie</b>
|
407
|
+
</p>
|
408
|
+
</blockquote>
|
409
|
+
|
410
|
+
Przechodzimy na konto: *http://github.com/wbzyl/*, gdzie klikamy
|
411
|
+
w projekt *jblog*. Forkujemy projekt. Na koniec, klonujemy
|
412
|
+
sforkowany przed chwilą projekt na swój komputer.
|
413
|
+
|
414
|
+
Teraz przechodzimy do katalogu z projektem:
|
415
|
+
|
416
|
+
:::shell-unix-generic
|
417
|
+
cd jblog
|
418
|
+
|
419
|
+
i dodajemy oryginalne repozytorium jako **remote**:
|
420
|
+
|
421
|
+
:::shell-unix-generic
|
422
|
+
git remote add wbzyl git://github.com/wbzyl/jblog.git
|
423
|
+
|
424
|
+
Umożliwi to pobieranie i scalanie uaktualnień z oryginału:
|
425
|
+
|
426
|
+
:::shell-unix-generic
|
427
|
+
git fetch wbzyl
|
428
|
+
git diff wbzyl/master
|
429
|
+
git merge wbzyl/master
|
430
|
+
|
431
|
+
Piszemy pierwszy wpis do swojego bloga: [instrukcje są tutaj] [jblog].
|
432
|
+
|
433
|
+
|
434
|
+
## Zmienne środowiska
|
435
|
+
|
436
|
+
Polecenie: `env` i `set`.
|
437
|
+
|
438
|
+
Zmienna `PATH`.
|
439
|
+
|
440
|
+
I18N: `LANG`, `LC_XXX`.
|
441
|
+
|
442
|
+
Pliki: `.bashrc`, `.bash_profile`, `.bash_history`.
|
443
|
+
|
444
|
+
|
445
|
+
## Przekierowywanie wejścia/wyjścia
|
446
|
+
|
447
|
+
Jakieś przykłady: `>`, `>>`, `<`.
|
448
|
+
|
449
|
+
:::shell-unix-generic
|
450
|
+
cd
|
451
|
+
echo "export PATH=$PATH:." >> .bashrc
|
452
|
+
cd ~/.ssh
|
453
|
+
cat ../id_rsa.pub >> authorized_keys
|
454
|
+
|
455
|
+
|
456
|
+
## Polecenie find
|
457
|
+
|
458
|
+
Proste przykłady:
|
459
|
+
|
460
|
+
:::shell-unix-generic
|
461
|
+
find | LC_ALL=C sort
|
462
|
+
find -ls | sort -k11
|
463
|
+
grep POSIX_OPEN_MAX /dev/null $(find /usr/include -type f | sort)
|
464
|
+
getconf ARG_MAX
|
465
|
+
find /usr/include -type f | xargs grep POSIX_OPEN_MAX /dev/null
|
466
|
+
|
467
|
+
Znajdź pliki puste lub nie otwierane od ponad roku:
|
468
|
+
|
469
|
+
:::shell-unix-generic
|
470
|
+
find . -size 0 -o -atime +365
|
471
|
+
|
472
|
+
Więcej przykładów:
|
473
|
+
|
474
|
+
:::shell-unix-generic
|
475
|
+
find . -name "*.c" -print
|
476
|
+
find . -mmin -5 # pliki modyfikowane w ostatnich 5 minutach
|
477
|
+
find . -mmin +5 # ?
|
478
|
+
find . -name "*.c" | xargs ls -l
|
479
|
+
|
480
|
+
Polecenie *locate*.
|
481
|
+
|
482
|
+
|
483
|
+
## Polecenie diff
|
484
|
+
|
485
|
+
Tworzymy dwa pliki testowe:
|
486
|
+
|
487
|
+
:::shell-unix-generic
|
488
|
+
echo Test 1 > test.1
|
489
|
+
echo Test 2 > test.2
|
490
|
+
|
491
|
+
Sprawdzamy różnice:
|
492
|
+
|
493
|
+
:::shell-unix-generic
|
494
|
+
diff test.[12]
|
495
|
+
diff -c test.[12]
|
496
|
+
|
497
|
+
Tworzymy łatę (ang. patch):
|
498
|
+
|
499
|
+
:::shell-unix-generic
|
500
|
+
diff -c test.1 test.2 > test.diff
|
501
|
+
|
502
|
+
Nakładamy łatę:
|
503
|
+
|
504
|
+
:::shell-unix-generic
|
505
|
+
patch < test.diff
|
506
|
+
cat test.1
|
507
|
+
|
508
|
+
|
509
|
+
<blockquote>
|
510
|
+
{%= image_tag "/images/tparr.jpg", :alt => "[Terence Parr]" %}
|
511
|
+
<p>
|
512
|
+
I can safely say that I am crippled without grep and feel naked
|
513
|
+
(believe me, that ain't pretty) without sed, awk, and wc.
|
514
|
+
<p>
|
515
|
+
<p class="author">
|
516
|
+
— <a href="http://www-128.ibm.com/developerworks/xml/library/x-sbxml.html">Terence Parr</a>
|
517
|
+
</p>
|
518
|
+
</blockquote>
|
519
|
+
|
520
|
+
## Wyrażenia regularne
|
521
|
+
|
522
|
+
Samouczek: [Learning to Use Regular Expressions] [regexp tutorial].
|
523
|
+
|
524
|
+
Program <kbd>egrep</kbd>.
|
525
|
+
|
526
|
+
Testowanie wyrażeń regularnych: [Regular Expression Tester] [regexp tester]
|
527
|
+
|
528
|
+
|
529
|
+
## Fuse filesystem
|
530
|
+
|
531
|
+
Krótka ściąga z [Fuse filesystem] [fuse].
|
532
|
+
|
533
|
+
Łączenie ze zdalnym hostem:
|
534
|
+
|
535
|
+
:::shell-unix-generic
|
536
|
+
sshfs username@host: mountpoint
|
537
|
+
|
538
|
+
Odmontowanie systemu zdalnego:
|
539
|
+
|
540
|
+
:::shell-unix-generic
|
541
|
+
fusermount -u mountpoint
|
542
|
+
|
543
|
+
|
544
|
+
<blockquote>
|
545
|
+
<p>
|
546
|
+
A novice programmer was explained the meaning of RTFM. He showed up
|
547
|
+
the next day saying:
|
548
|
+
„So I went out and bought the Kama Sutra. Now what?”
|
549
|
+
</p>
|
550
|
+
<p><i>Meta</i>:
|
551
|
+
If you tell the joke above to a non-programmer, he will ask:
|
552
|
+
„What's RTFM?” A programmer will ask: „What's Kama Sutra?”
|
553
|
+
</p>
|
554
|
+
</blockquote>
|
555
|
+
|
556
|
+
## Do poduszki…
|
557
|
+
|
558
|
+
Klasyczny esej pisarza science-fiction N. Stephenson'a:
|
559
|
+
<a href="http://www.cryptonomicon.com/beginning.html">In the Beginning
|
560
|
+
was the Command Line</a> — obowiązkowa lektura guru uniksowego!
|
561
|
+
|
562
|
+
Praktyczne:
|
563
|
+
<a href="http://www.pixelbeat.org/cmdline.html">Linux command: A practical reference</a>.
|
564
|
+
|
565
|
+
Samouczek:
|
566
|
+
<a href="http://www.ee.surrey.ac.uk/Teaching/Unix">UNIX Tutorial for Beginners</a>.
|
567
|
+
|
568
|
+
W utrwaleniu składni poleceń uniksowych może pomóc lektura
|
569
|
+
tej krótkiej satyry science-fiction: [Spłuczka w linuxie] [spluczka].
|
570
|
+
|
571
|
+
Też warte przeczytania:
|
572
|
+
<a href="http://bashcurescancer.com">BASH Cures Cancer</a>.
|
573
|
+
|
574
|
+
|
575
|
+
## Alternatywa
|
576
|
+
|
577
|
+
[Ruby shell] [rush]. Instalacja:
|
578
|
+
|
579
|
+
:::shell-unix-generic
|
580
|
+
gem install rush
|
581
|
+
|
582
|
+
|
583
|
+
#### Linki
|
584
|
+
|
585
|
+
[password meter]: http://www.passwordmeter.com "Password Strength Checker"
|
586
|
+
[started with ssh]: http://kimmo.suominen.com/docs/ssh "Getting started with SSH"
|
587
|
+
[rush]: http://rush.heroku.com "Ruby shell"
|
588
|
+
[fuse]: http://fuse.sourceforge.net/sshfs.html "SSH Filesystem"
|
589
|
+
[regexp tutorial]: http://gnosis.cx/publish/programming/regular_expressions.html "Learning to Use Regexp"
|
590
|
+
[regexp tester]: http://www.roblocher.com/technotes/regexp.aspx "Regular Expression Tester"
|
591
|
+
[spluczka]: http://www.piotr.nabielec.com/index.php?option=com_content&task=view&id=41 "Spłuczka w linuxie"
|
592
|
+
|
593
|
+
[emacs-starter-kit]: http://github.com/technomancy/emacs-starter-kit "Emacs Starter Kit"
|
594
|
+
[emacs-wiki]: http://www.emacswiki.org "Emacs Wiki"
|
595
|
+
[emacs-manual]: http://www.gnu.org/software/emacs/manual/emacs.html "GNU Emacs manual"
|
596
|
+
[emacs-lisp-intro]: http://www.gnu.org/software/emacs/emacs-lisp-intro/emacs-lisp-intro.html "Programming in Emacs Lisp (Second Edition)"
|
597
|
+
[elisp]: http://www.gnu.org/software/emacs/manual/elisp.html "An Introduction to Programming in Emacs Lisp"
|
598
|
+
[emacs-tour]: http://www.gnu.org/software/emacs/tour "A Guided Tour of Emacs"
|
599
|
+
|
600
|
+
[jblog]: http://github.com/wbzyl/jblog "Jekyll-Blog dostosowany do Sigmy"
|
601
|
+
|
602
|
+
[bespin]: https://bespin.mozilla.com/ "Bespin » Code in the Cloud"
|
603
|
+
|
604
|
+
[wojny edytorowe]: http://pl.wikipedia.org/wiki/Wojny_edytorowe "Wojny edytorowe"
|