Jednolinijkowiec to czasami złe określenie na polecenia które wykonujemy w konsoli ;-) Na nasze szczęście czasy terminala 80x25 już dawno odeszły do lamusa i linia nie musi się kończyć na 80 znakach... ale nawet te bardzo krótkie komendy mogą znacznie ułatwić życie.
1. rm: cannot remove 'plik': Permission denied
Próbujesz usunąć plik, założyć katalog, lub wykonać coś co wymaga wyższych uprawnień... masz w systemie sudo? spróbuj więc tak:
$ touch plik
touch: cannot touch 'plik': Permission denied
$ sudo !!
sudo touch plik
$ ls
plik
$sudo !! - powtarza ostatnią komendę, poprzedzając ją wywołaniem sudo.
2. "test" E212: Nie mogę otworzyć pliku do zapisu
Wprowadzasz modyfikację w pliku konfiguracyjnym, używasz do tego Vim'a, próbujesz zapisać zmiany i okazuję się, że nie masz uprawnień... zostaje Ci zapisanie pliku w innym katalogu, przeskoczenie na użytkownika root i podmiana pliku, ale nie jest to wygodne rozwiązanie, spróbuj może tego:
:w !sudo tee %
tee czyta wszystko ze standardowego wejścia i przesyła kopię na standardowe wyjście/pliku, poprzedzając wszystko wywołaniem sudo i przepisując do tego samego pliku.
3. ctrl+r
Używasz bash'a? zdarza Ci się często wykonywać podobne komendy? zamiast history | grep polecenie, spróbuj użyć wyszukania wciskając ctrl+r, jak? wciśnij ctrl+r i zacznij wpisywać dowolną część komendy, jeśli została dopasowana to enterem możesz ją wywołać, jeśli to nie jest ta komenda to wciskając kolejny raz ctrl+r przechodzisz do następnej:
(reverse-i-search)`echo': echo $SRT|awk -F.txt '{print $1 }'
w tym przykładzie wcisnąłem ctrl+r i wpisałem jedynie "echo", bash znalazł mi to co chciałem, echo $SRT|awk -F.txt '{print $1 }'
4. ascii code
Potrzebujesz szybko sprawdzić jaki jest kod ascii literki? jeśli posiadasz przeglądarkę WWW i chce Ci się, to możesz zrobić to przez stronę http://www.asciitable.com, ale znacznie szybciej będzie wpisać w konsoli:
$ man 7 ascii
chyba, że nie masz zainstalowanych manuali... ;-)
5. Ile transferu miesięcznie wykorzystuję?
Zainstaluj vnstat, który będzie pilnował ile danych odebrał/wysłał serwer.
# apt-get install vnstat
od tego momentu będą zbierane statystyki, które możesz wyświetlić poleceniem vnstat:
# vnstat -m
eth0 / monthly
month rx | tx | total | avg. rate
Dec '10 837.85 GiB | 29.46 GiB | 867.31 GiB | 2.72 Mbit/s
Jan '11 499.82 GiB | 81.34 GiB | 581.16 GiB | 1.82 Mbit/s
Feb '11 68.59 GiB | 118.40 GiB | 187.00 GiB | 648.41 kbit/s
Mar '11 40.48 GiB | 214.07 GiB | 254.54 GiB | 797.22 kbit/s
Apr '11 65.07 GiB | 295.16 GiB | 360.23 GiB | 1.17 Mbit/s
May '11 89.22 GiB | 219.48 GiB | 308.70 GiB | 966.85 kbit/s
Jun '11 78.38 GiB | 269.21 GiB | 347.58 GiB | 1.70 Mbit/s
estimated 118.31 GiB | 406.40 GiB | 524.71 GiB |
6. mount na mount
Popełniłeś literówkę, błąd, lub zrobiłeś cokolwiek... okazało się, że zamountowałeś coś np. /dev/sdc1 w lokalizacji /var/log/, ale po miesiącu przypomniałeś sobie, że pod mountem są istotne pliki z logami... i chcesz się do nich dostać, ale bez robienia umount, możesz tu skorzystać z opcji mountowania bind.
# mount /dev/sdc1 /var/log
# ls -la /var/log/
total 116
drwxr-xr-x 22 root root 4096 2011-04-07 06:27 .
drwxr-xr-x 17 root root 4096 2011-06-02 10:54 ..
drwxr-xr-x 2 root root 4096 2011-06-02 22:02 nowe_logi
drwxr-xr-x 3 root root 4096 2011-06-02 10:59 apache
...
zamontowałem partycję /dev/sdc1 na katalog /var/log/, mam teraz tam katalogi nowe_log oraz apache, ale stare pliki zostały przykryte.
# mkdir /tmp/test
# mount -o bind / /tmp/test/
# ls /tmp/test/var/log/alternatives.log auth.log debug dpkg.log.2.gz kern.log.3.gz minidlna.log squid user.log.2.gz
...
wykonałem bind katalogu głównego / (zawierającego /var/log), do katalogu /tmp/test i takim szybkim sposobem uzyskałem dostęp do katalogów i plików które zostały przykryte mountem /dev/sdc1.
7. jak zapisać komunikację klient serwer WWW
Na to jest wiele sposobów, od tcpdump'a, ethereal'a, wireshark'a, po bardziej przyjazne np. tcpflow który zapisuje oddzielnie w plikach żądania w sposób bardzo czytelny:
# mkdir flow
# cd flow/
polecam utworzenie katalogu, tcpflow zapisuje wszystko w oddzielnych plikach ;-) tak łatwiej to później usunąć.
# tcpflow -i eth0 port 80
tcpflow[32028]: listening on eth0
^C
w katalogu pojawiły się nam pliki (każdy reprezentuje żądanie/odpowiedź).
# cat 0xx.0xx.xxx.0xx.57262-212.077.100.101.00080
GET / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: www.wp.pl
User-Agent: lwp-request/5.834 libwww-perl/5.837
8. przycinamy pliki
Usługa wygenerowała nam pliki logów o masakrycznych rozmiarach, gigabajty, terabajty... ale nie chcemy jej restartować tylko dlatego, że zabieramy się za czyszczenie, co można zrobić? możemy skopiować plik obok, przyciąć go i spakować bez zabierania dostępu do deskryptora pliku, dzięki temu nasza aplikacja nie powinna wymagać restartu.
nasz plik:
-rw-r--r-- 1 root root 104857600 2011-06-20 21:17 test.log
# cp test.log test.log.old; cat /dev/null > test.log; gzip test.log.old
# ls -la
total 108
drwxr-xr-x 2 root root 4096 2011-06-20 21:20 .
drwxr-xr-x 54 jamzed jamzed 4096 2011-06-20 21:11 ..
-rw-r--r-- 1 root root 0 2011-06-20 21:20 test.log
-rw-r--r-- 1 root root 101804 2011-06-20 21:20 test.log.old.gz
kopiujemy plik test.log obok pod nazwą test.log.old, cat /dev/null > do pliku powoduje jego wyzerowanie (nie usunięcie pliki, ale wyczyszczenie), gzip pakuje, dzięki temu możemy zaoszczędzić czasami duuuużo miejsca (świetne zastosowanie dla logów np. baz danych MySQL)
9. usuwanie/przesuwanie plików starszych niż ...
Usuwanie plików starszych niż 100 dni,
# find /var/log/ -iname '*.log' -mtime +100 -delete
gdybyśmy chcieli szukać plików nowszych niż 100 dni, należałoby wywołać find z parametrem -mtime -100.
Przesuwanie plików starszych niż 60 dni do innego katalogu:
# find /var/log/ -iname '*.log' -mtime +60 -exec mv '{}' /var/log/old/ ;
10. szybka kopia pliku
Czyli coś co powinieneś wykonywać przed każdą edycją pliku z konfiguracją ;-)
# cp config.cfg{,.bak}; ls config*
config.cfg config.cfg.bak
nie musisz wpisywać cp config.cfg config.cfg.bak, wystarczy samo cp plik{,.bak}.
A jakie są wasze propozycje?