|
|
![]() |
||||
| Info Person Gallery Computer Internet Fun Sonstiges Sitemap Suche Kontakt | |||||
Quick-Index
Lange Tipps - Kurze Tipps - Literatur
Ich finde die Kommandozeile unter Unix (und somit auch Linux) eine wunderbare Möglichkeit um sich kreativ zu betätigen. Was mir in meinem Admin-/Useralltag so unterkommt und was ich für interessant befinde sammle ich an dieser Stelle. Verbesserungsvorschläge, Kommentare, Feedback und Ergänzungen sind natürlich willkommen.
Eine chroot-Umgebung ist eine Technik auf Unix-Systemen, um Prozesse in eine restriktierte und isolierte Umgebung (im Dateisystem) einzusperren. Auf Linux-Systemen kann man so eine chroot-Umgebung sehr einfach aufbauen. Wolfgang Fuschlberger stellt auf www.fuschlberger.net/programs/ssh-scp-chroot-jail/ ein Skript zur Verfügung das alle relevanten Schritte automatisch durchführt. Ich habe Bugs und Informationen die mir beim Erstellen einer chroot-Umgebung aufgefallen sind auf einer eigenen kleinen Webpage festgehalten.
Einfügen von markiertem Text erfordert den Einsatz der mittleren Maustaste. Wer nicht gerne mit der Maus arbeitet oder wem das Emulieren der mittleren Maustaste auf einer zwei Tasten Maus nicht leicht von den Fingern geht, kann sich auch mit SHIFT-INSERT behelfen. Diese Tastenkombination funktioniert in allen Terminal Applikationen und in vielen X Anwendungen.
Einige Hersteller von Distributionen bieten ISO Abbilder der Installations CDs zum Download an. Diese Abbilder lassen sich - eine entsprechend schnelle Leitung oder genügend Geduld vorausgesetzt - herunterladen und auf CD brennen. Ist gerade kein Brenner verfügbar können ISO Abbilder auch direkt verwendet werden. Mit folgendem Kommando hängt man eine Datei direkt im Filesystem ein:
mount Dateiname.iso /mnt -t iso9660 -o ro,loop=/dev/loop0
Das CD Abbild steht nun unter dem Verzeichnis /mnt zum Lesen zur Verfügung. Zum Schreiben eignet sich ein CD Abbild natürlich nicht.
Soll eine Datei im Suchpfad editiert werden, kann auf die Angabe des vollständigen Pfades verzichtet werden. Es genügt ein "editorname `which dateiname`" um die Datei zu bearbeiten. Natürlich ist es dabei dann notwendig, das sich eine Datei mit diesem Namen nur einmal im Pfad befindet - ansonsten stellt man besser sicher, dass auch die richtige Datei bearbeitet wird. Und wer unvorsichtig ist bearbeitet eine binäre Datei ;-) (thx Alex)
Ein laufendes X lauscht normalerweise an Port 6000 nach eingehenden Verbindungen. Wer seinen Rechner ohne Netz stand-alone betreibt, hat aber selten den Wunsch sich von anderen Rechner zu verbinden. Dafür stellt ein offener Port immer ein Sicherheitsrisiko dar. Abhilfe schafft die Option "-nolisten tcp". Das Verbinden von fremden Rechner ist damit unmöglich.
Vergleicht man Systeme miteinander kommt es gelegentlich vor, dass auf einem der Systeme eine Datei vorhanden ist, die auf dem anderen fehlt. Fragt man sich, welches Paket diese Datei enthält so genügt folgendes Kommando, wenn das System auf RPM basiert:
rpm -qf /vollstaendiger_pfad/dateiname
Die Ausgabe ist der Name des rpm Paketes, welches diese Datei installiert hat.
Oft bekommt man von jemandem einen Tipp für eine gute Software, die man installieren möchte, aber es gibt Dependencies, oder die Software befindet sich vielleicht sogar schon auf der Platte. Bei RPM-Systemen hilft folgendes Kommando:
rpm -qa | grep packetname
Zum Beispiel "rpm -qa | grep ssh" gibt alle Paketnamen aus, die den Ausdruck "ssh" im Namen enthalten, dazu gehören auch alle Pakete der Serie OpenSSH.
Logfiles können sehr schnell sehr groß werden, lassen sich aber nicht immer ohne weiteres löschen. Läuft der Prozess noch, der das Logfile geöffnet hat, kommt es zu Problemen. Ein einfacher Weg schnell wieder Platz zu schaffen ist, die Datei zu überschreiben. Mit folgendem Befehl setzt man die Dateigröße auf 0 Byte:
cat /dev/null > logfileNoch kürzer ist folgende Variante (danke für den Hinweis - Michael Matzick!):
echo -n > logfileoder in Bourne-Shells:
:> logfile
Was macht man, wenn man einmal nur Verzeichnisse gelistet haben will?
ls -ld | grep '^d'behelfen. Wildcards sind dabei natürlich möglich. Ein "ls -ld a* | grep '^d'" zeigt zum Beispiel nur Unterverzeichnisse, die mit a beginnen.
Björn Albers hat mich netterweise auf eine Variante die ohne grep auskommt hingewiesen:
ls -ld */.
Die Wildcard erfasst alle Dateien mit einem Link auf sich selbst, also alle Unterverzeichnisse im aktuellen Verzeichnis.
Mit der zsh kann man auch gleich versteckte Verzeichnisse anzeigen:
ls -dl */(D)
Mit dem grep Kommando kann man innerhalb von Dateien nach Zeilen suchen, die einen bestimmten Text enthalten. Gelegentlich sucht man aber nach zwei oder mehreren Alternativen, also nach allen Zeilen, die entweder den einen oder den anderen Text enthalten. Hier hilft ein regulärer Ausdruck weiter. Mit "grep -E "Text1|Text2" *" werden alle Zeilen ausgegeben, die Text1 oder (|) Text2 enthalten. Sollen weitere Alternativen gefunden werden, kann die Liste entsprechend verlängert werden.
sed 's/.$//' dosfile > unixfile # assumes that all lines end with CR/LF
sed 's/^M$//' dosfile > unixfile # in bash/tcsh, press Ctrl-V then Ctrl-M
sed 's/\x0D$//' dosfile > unixfile # gsed 3.02.80, but top script is easier
awk '{sub(/\r$/,"");print}' # assumes EACH line ends with Ctrl-M
gawk -v BINMODE="w" '1' infile >outfile # in DOS environment; cannot be done with
# DOS versions of awk, other than gawk
tr -d \r < dosfile > unixfile # GNU tr version 1.22 or higher
tr -d '\015' < dosfile > unixfile # use octal value for "\r" (see man ascii)
tr -d '[\015\032]' < dosfile > unixfile # sometimes ^Z is appended to DOS-files
vim -c ":set ff=unix" -c ":wq" file # convert using vim
vim -c "se ff=dos|x" file # ... and even shorter ;)
recode ibmpc..lat1 file # convert using recode
echo -e "s/\r//g" > dos2unix.sed; sed -f dos2unix.sed < dosfile > unixfile
Anmerkung: Das ^M wird dabei durch Halten der Ctrl-Taste und Drücken der Tasten V und M (nacheinander, während Ctrl fest gehalten wird!) erzeugt. Die End-of-Lines sind wie folgt definiert:
Mac:CTRL-M [0x0d] Unix:CTRL-J [0x0a] DOS/Windows:CTRL-M+CTRL-J [0x0d 0x0a]
tr '\r' '\n' < macfile > unixfile
recode mac:lat1 < macfile > unixfile # pinfo recode && recode -l | grep -i mac
awk '{ gsub("\r", "\n"); print $0;}' macfile > unixfile
perl -p -e 's/\r/\n/g' < macfile > unixfile
dd if=/dev/fd0 of=floppyimageExakte Kopie der Diskette wird unter floppyimage abgelegt.
dd if=floppyimage of=/dev/fd0Dadurch wird das Floppyimage wieder auf eine Diskette zurückkopiert.
dd if=/dev/hda2 bs=512 count=1 of=/floppy/boot.sekJetzt Windows booten und die Datei boot.sek von der Diskette in das Wurzelverzeichnis der Partition kopieren, auf der Windows installiert ist. Jetzt die Datei C:\boot.ini mit einem Text-Editor bearbeiten (bei Problemen den Schreibschutz der Datei entfernen). Jetzt in der Datei die Zeile
c:\boot.sek="Linux"Fertig - jetzt kann Linux aus dem Windows-Bootmanager heraus gestartet werden.
netstat -pafür detaillierte Informationen zu den Sockets.
netstat -a -n | grep "^tcp" | cut -c 68- | sort | uniq -c | sort -num zu sehen, wieviele Sockets in welchem Status sind.
cat /proc/net/sockstatum die Anzahl der aktuell geöffneten Sockets zu erhalten.
fuser -n tcp 5006 | sed -e 's/.*: *//'um anzuzeigen, welche Prozess-IDs einen bestimmten TCP-Socket verwenden.
mmv '* *' '1_#2' # achtung: ersetzt nur ein Vorkommen eines LeerzeichensUmbenennen von dateiname1.avi in dateiname01.avi für alle Dateien mit Zahlen von 1-9:
mmv 'dateiname?.avi' 'dateiname0#1.avi'
mplayer -ao pcm -aofile $DATEIoder
mencoder mms://datei.wmv -o blub -ovc copy -oac copy
avimerge -i *.avi -o blub.avimpg-Dateien:
$ cat *.mpg > blub.mpgwmv-Dateien (achtung - sehr ressourcenhungrig!):
cat *.wmv | mencoder - -oac copy -ovc copy -ofps 25 -o blub.wmv # funktioniert aber leider nicht wie gewuenscht, deshalb: mencoder file1.wmv -ovc lavc -oac lavc -ofps 25 -srate 48000 -o file1.avi mencoder file2.wmv -ovc lavc -oac lavc -ofps 25 -srate 48000 -o file2.avi avimerge -i file1.avi file2.avi -o blub.avi
xset b 50 440 100oder mit echo:
echo -e "\a"
setterm -bfreq 440 -blength 100oder wieder mit echo:
echo -e "\a"
ldd programmnameoder
ldd `which programmname`oder
which programmname | xargs ldd
fg $$bzw.
bg $$bzw. geht natürlich auch mit fg $1, fg $2 und CO.
TMOUT=180Bewirkt, dass man nach 180/60 = 3 Minuten ausgeloggt wird.
strings filename.doc | fmt | less
/sbin/runleveloder
ps auxw | grep 'init \[[0-6]\]'
/sbin/ifconfig $INTERFACE | sed -n 's/.*RX bytes:[^(]*(\([^)]*\)).*/\1/p'Gesendet:
/sbin/ifconfig $INTERFACE | sed -n 's/.*TX bytes:[^(]*(\([^)]*\)).*/\1/p'
$ man bash | col -b | sed -n '/^ *MACHTYPE/,/^$/p'
export LC_ALL=C; /sbin/ifconfig $DEVICE | \
awk '/inet addr/{ split($2,foo,":") ; print foo[2] }'
/sbin/ifconfig $DEVICE | awk '/inet/ { print $2 } ' | sed -e s/addr://
/sbin/ifconfig $DEVICE | fgrep "inet addr:" | \
sed "s/^.*inet addr:\([0-9\.]*\).*$/\1/"
/sbin/ifconfig $DEVICE | sed -n 's/.*addr:\([0-9.]*\).*/\1/p'
zcat /usr/share/man/man1/bash.1.gz | groff -man > ~/bash.1.psDass es noch einfacher geht hat mir Andreas Gutowski gemailt:
man -t bash > bash.ps
find / -type l -print | perl -nle '-e || print'
ls --sort=t /dev -l | tail -n1 | awk '{print $8 " " $7 " " $9}'
aber auf manchen Systemen könnte obiges schiefgehen, dann sollte man folgendes machen:
ls --sort=t /dev -l | tail -n1 | awk '{print $7 " " $6 " " $8}'
dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8
tr ' ' '\n' < datei.txt | sort | uniq -c | sort -nr
echo "GET / HTTP/1.0\r\n\r\n" | netcat www.michael-prokop.at 80
egrep -v '(#|^$)' .vimrc | wc
antiword -p a4 pflichtenheft.doc > foo.ps
useradd -g popusers -s /bin/false superdau
xrdb -q |grep -i emacs
host -t mx iwb.tu-graz.ac.at
xdpyinfo | grep release
nmap -sP 193.170.227.0/21 && arp -a > textfile
tar -cz * | ssh backupserver "cat - > /backups/backup.tgz"oder noch eleganter via:
tar cpz * --rsh-command=/usr/bin/ssh -f backupserver:/backups/backup.tgz(Danke an Tom Braeuer für den Hinweis!)
head -2 /proc/net/snmp | cut -d' ' -f17
ipcs:-)
trap -l
procinfo -aDieser Befehl ist ein Ersatz fuer das manuelle Auslesen des /proc-Dateisystems.
ldd -v /path/to/filegibt aus, welche gemeinsamen Bibliotheken ein Programm oder eine andere Bibliothek verwendet und zeigt auch an, wo diese Bibliotheken im System zu finden sind für den aktuellen LD_LIBRARY_PATH.
fuseroder
lsof
time emacs -kill && time vim t -c :q
find / -type f \( -perm +4000 -o -perm +2000 \) -print
xwininfo -int | grep "Window id:" | cut -d ' ' -f 4
xprop WM_CLASS
locale -ck LC_MESSAGES
dd if=/dev/urandom bs=14 count=1 | hexdump | cut -c 9-
--> Links, Literatur und Dokumentation