Linux FAQ

Kwiecień 29th, 2011 Zostaw komentarz Idź do komentarzy

Linux FAQ

Wystarczy użyć skryptu takiego jak poniżej:

#!/bin/sh
find $1 -depth -type d -exec \
sh -c 'cd "{}"; for i in *; do mv "$i" "`echo $i | tr [:upper:] [:lower:]`";\
done' \;

Uruchomiony z parametrem - nazwą katalogu - zmieni nazwy wszystkich plików we wszystkich podkatalogach danego katalogu na pisane małymi literami. Można go (skrypt) zapisać do pliku i nazwać np. "tolower". Aby plik był wykonywalny trzeba nadać mu odpowiednie prawa chmod +x nazwa_pliku

Lub:

Z wielkich liter na małe:

for stary in *.HTM ; do
nowy="$(echo $stary | tr '[:upper:]' '[:lower:]')"
mv "$stary" "$nowy"
done

Z małych na wielkie:

for stary in *.HTM ; do
nowy="$(echo $stary | tr '[:lower:]' '[:upper:]')"
mv "$stary" "$nowy"
done

W niektórych dystrybucjach są do tego gotowe programy: unixtodos (ew. unix2dos) i dostounix (dos2unix). Jednak samodzielne napisanie takich skryptów nie jest trudne: konwersji dos->unix dokonuje się za pomocą jednolinijkowego polecenia:

cat plik_dosowy | tr -d '\r' > plik_unixowy

A to polecenie zmieniające pliki unixa na format dosa (przykład dla basha):

cat plik_unixowy | sed 's/$/'`echo -ne \\\r`'/' > plik_dosowy

Powyższy przykd (unix2dos) pochodzi z pliku "HANDY ONE-LINERS FOR SED", autorstwa (skompilowane przez) Erica Pementa. Plik można znaleźć

Jako shell daj użytkownikowi /usr/bin/passwd i dopisz /usr/bin/passwd do pliku /etc/shells. Dzięki temu będzie on mógł się zalogować aby zmienić hasło.
A jeżeli chcesz go i tej możliwości pozbawić to zamiast passwd daj mu jako shell program false.

Wysyłanie maila z lini poleceń:

echo "jakaś treść" | mail -s "temat wiadomości" adres@gdzies.pl 

Wysyłanie maila z załącznikiem z linii poleceń:

uuencode plik.txt plik.txt | mail -s "temat wiadomości" adres@gdzies.pl 
  useradd -o -u 0 -g 0 nazwa_usera 

Chcialbym aby pewna grupa userow miala dostep do pewnej sciezski dostepu do ktorej nie maja inne grupy jak to ustawic w sposob globalny?

W /etc/profile
if [ `id -g` -eq ]; then
PATH='ścieżka dla konkretnej grupy'
else
PATH='ścieżka dla reszty'
fi
export PATH
ls /home 

lub

 awk 'BEGIN{FS=":"} $3>499{print$1}' /etc/passwd 

lub

 cat /etc/passwd

Można zabić mu powłokę:

kill -9 pid_np_basha_usera 

Do wylogowywania kogoś jest

 skill -KILL -v pts/* 

gdzie gwiazdka to numer konsoli

Zabijanie wszystkich procesów usera:

skill -9 nazwa_usera
chage -l uzytkownik

Tworzymy usera a następnie:

 passwd -d

Chciałbym żeby rekursywnie zrobić:
- pliki na "rw-r--r--"
- katalogi na "rwxr-xr-x"

find www_root_dir -type d -exec chmod 755 {} \; -o -type f -exec chmod 644 {} \; 
userdel -r uzytkownik
usermod -l

Zawartość /etc/motd jest wypisywana po zalogowaniu.
Zawartość /etc/issue i /etc/issue.net przed loginem.

W celu zapobieżenia przypadkowego skasowania plików /etc/passwd, /etc/shadow, /etc/group oraz /etc/gshadow należy dla tych plików ustawić tzw. "immutable bit". Robimy to wywołując komendę:

chattr +i plik 

Sposób 1

Najprościej (jeśli mamy dostęp do sieci) wydajemy polecenie:

perl -MCPAN -e shell 

system zada nam kilka pytan o lokazlizację wielkość katalogu cache itd., nasępnie gdy pojawi się znak zachęty: cpan> instalujemy moduły wydając polecenie:

install Date::Calc 

gdzie Date::Calc to nazwa instalowanego modułu.

Sposób 2

1. Ściągamy Perl module z http://www.cpan.org/ lub innej strony.
2. Rozpakowujemy i wydajemy polecenia:

perl Makefile.PL
make
make test
make install 

Można wyciąć resztę na firewallu:

iptables -A INPUT -p tcp -s 192.168.0.0/16 --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --dport 21 -j DROP 

Wydajemy polecenie:

sleep 6h 30m; halt -p 

gdzie: 6h 30m to 6 godzin 30 minut.

sed -e s/tekst/innyteks/ plik> plik.tmp; mv -f plik.tmp plik 

lub np. za pomocą perla:

perl -pi -e "s/tekst/innytekst/" plik 
sed -e s/tekst/innyteks/g plik> plik.tmp; mv -f plik.tmp plik 

(powtorzenia wyrazu w jednej linijce tez zmieni)

Chcemy zamienić spacje w nazwach plików na podkreślenia, czyli zamienić nazwy: "nazwa pliku przed zmianą.txt" na "nazwa_pliku_po_zmianie.txt".

find ./ -type f -exec rename 's/ /_/g' {} \; 

lub:

for i in *\ * ; do mv "$i" "${i//\ /_}" ; done 

lub:

find . -name "* *" | while read; do
mv "$REPLY" "${REPLY// /_}"
done

Chcemy zamienić htm na html w nazwach wielu plików, czyli zamienić nazwy: "nazwa_pliku_przed_zmianą.htm" na "nazwa_pliku_po_zmianie.html".

Rozwiązanie 1:

for i in `find katalog_z_plikami_htm -name '*.htm'`; do mv "$i" "${i}l"; done 

Uwagi: Zamiast katalog_z_plikami_htm może być też oczywiście np. kropka ".".

Rozwiązanie 2:

for a in *.htm; do mv $a `basename $a .htm`.html; done 

Rozwiązanie 3:

mmv \*.htm #1.html 

Uwagi: Program mmv ma większe możliwości niż pokazany trywialny przykład.

find . -type f -maxdepth 10 | wc -l

Uwagi: parametr f pozwala na nie branie pod uwagę dowiązań symbolicznych i katalogów; maxdepth określa jaka głębokość poziomu katalogów jest uwzględniana, wartość maxdepth 0 oznacza by testy i akcje stosować tylko do argumentów wiersza poleceń.

wc -l plik 

Chcemy policzyć ile podkatalogów mamy w danym katalogu lub rekurencyjnie ile mamy katalogów w wielu podkatalogach danego katalogu.

Rozwiązanie 1:

ls -l| grep ^d| wc -l 

Uwagi: Nie są uwzględniane w liczeniu dowiązania i katalogi ukryte; dodaj opcje -a po ls, żeby policzyć również katalogi ukryte w danym katalogu (niestety wraz z katalogami "." oraz ".."; jeśli nie chcesz ich liczyć patrz rozwiązanie 2 lub 3) oraz -R, jeśli chcesz liczyć rekurencyjnie.

Rozwiązanie 2:

ls -lAR| grep ^d| wc -l 

Uwagi: Skrypt działa tak samo jak w "rozwiązaniu 1" dla opcji -laR do ls, ale nie liczy katalogów "." oraz "..".

Rozwiązanie 3:

ls -laR | grep ^d | awk '{print $9}' | egrep -v '^\.{1,2}$' | wc -l 

Uwagi: Skrypt działa tak samo jak w "rozwiązaniu 1" dla opcji -laR do ls, ale nie liczy katalogów "." oraz "..".

Rozwiązanie 4:

find . -type d | wc -l 

Uwagi: bez parametru -maxdepth liczy bez ograniczeń wgłąb struktury katalogów rekurencyjnie, ponadto uwzględnia zawsze katalogi ukryte oraz katalog ".".

Rozwiązanie 5:

find . -type d | egrep -v '^\.{1,2}$' | wc -l 

Uwagi: Skrypt działa tak samo jak w "rozwiązaniu 4", ale nie liczy katalogu ".". Ponadto jeśli zamiast katalogu startowego (powyżej : . ) poda się pełną ścieżkę (np. /etc) skrypt zawsze da wynik o 1 większy, ponieważ liczy wtedy także katalog z którego zaczyna (gdy jest '.', to jest to wychwytywane przez egrep).

W jaki sposób z pliku html wydobyć automatycznie adresy e-mail będące w tym pliku i umieścić je w jednej kolumnie w pliku tekstowym?

grep 'mailto:' plik |sed -e 's/^.*mailto://' |sed -e 's/">.*$//' > plik.txt 

Uwagi: Zamiast plik podstawiamy nazwę przeszukiwanego pliku, można też oczywiście *

Narzędzia i sposoby do pakowania i rozpakowywania archiwów:

Rozpakowanie plików *.tar.gz:

tar -xvzf nazwa_pliku.tar.gz
  • x - extract,
  • v - verbose (wypisywanie nazw wszystkich plików),
  • z - archiwum skompresowane programem gzip,
  • f - plik.

 

Rozpakowywanie plików typu *.bz2:

tar -xvjf nazwa_pliku*tar.bz2
tar -xvf nazwa_pliku*tar.bz2
  • j - oznacza archiwum bz2.

 

Rozpakowywanie plików *.zip

unzip nazwa_pliku.zip

 

Rozpakowywanie plików typu *.tar:

tar xvf plik.tar

 

Pakowanie ogólnie wygląda tak:

tar -czf backup.tar.gz /katalog/do/spakowania,
tar -cjf backup.tar.bz2 /katalog/do/spakowania.
zip -r backup.zip /katalog/do/spakowania.

Sprawdzanie sumy kontrolnej MD5SUM:

md5sum plik.iso 

Montowanie:

mount -o loop -t iso9660 plik.iso /mnt/iso 

Skanujemy sami siebie:

nmap -sT -sU localhost 

lsof:

lsof -i -P 

netstat:

netstat -tpn
  1. Brak komentarzy
  1. Brak jeszcze trackbacków
*