sp-tutorial 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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"
|