#root - rootuser.eu

Ich bin root, ich darf das!

httping

2013-07-05, getagged als cli, http
Mit dem Kommando httping lässt sich einfach und schnell die Antwortzeit einer URL ermitteln. Das Kommando kennt viele Optionen, so lässt sich mit (-b) die Übertragungsgeschwindigkeit anzeigen und (-G) mach GET-Request anstatt HEAD-Request und macht die Anfrage so realistischer:
root@host:~# httping -c 5 -b -G -g http://blog.rootuser.eu
PING blog.rootuser.eu:80 (http://blog.rootuser.eu):
connected to blog.rootuser.eu:80, seq=0 time=105.71 ms  258KB/s
connected to blog.rootuser.eu:80, seq=1 time=108.00 ms  249KB/s
connected to blog.rootuser.eu:80, seq=2 time=108.22 ms  253KB/s
connected to blog.rootuser.eu:80, seq=3 time=107.83 ms  254KB/s
connected to blog.rootuser.eu:80, seq=4 time=107.52 ms  254KB/s
--- http://blog.rootuser.eu ping statistics ---
5 connects, 5 ok, 0.00% failed
round-trip min/avg/max = 105.7/107.5/108.2 ms
Transfer speed: min/avg/max = 249/253/258 KB

HTTP-Header mit wget oder curl lesen

2013-03-21, getagged als cli, curl, http, wget
Oft möchte ich nur den Statuscode einer bestimmten URL abfragen oder den HTTP-Header der Server-Antwort sehen.

Das geht auf der Konsole mit dem Kommando wget:
root@host:~# wget --server-response --spider http://www.debian.org/

Spider-Modus eingeschaltet.  Prüfe ob die Datei auf dem Server existiert.
--2013-03-21 22:02:18--  http://www.debian.org/
Auflösen des Hostnamen »www.debian.org (www.debian.org)«... 86.59.118.148, 2001:858:2:2
:214:22ff:fe0d:7717
Verbindungsaufbau zu www.debian.org (www.debian.org)|86.59.118.148|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 
  HTTP/1.1 200 OK
  Date: Thu, 21 Mar 2013 21:02:18 GMT
  Server: Apache
  Content-Location: index.en.html
  Vary: negotiate,accept-language,Accept-Encoding
  TCN: choice
  Last-Modified: Thu, 21 Mar 2013 19:27:22 GMT
  ETag: "399f-4d87453e27a80"
  Accept-Ranges: bytes
  Content-Length: 14751
  Cache-Control: max-age=86400
  Expires: Fri, 22 Mar 2013 21:02:18 GMT
  Keep-Alive: timeout=15, max=100
  Connection: Keep-Alive
  Content-Type: text/html
  Content-Language: en
Länge: 14751 (14K) [text/html]
Datei auf dem Server existiert und könnte weitere Links enthalten,
aber Rekursion ist abgeschaltet -- kein Download.

Noch eleganter lässt sich das mit curl bewerkstelligen:
root@host:~# curl -I www.debian.org

HTTP/1.1 200 OK
Date: Thu, 21 Mar 2013 21:08:29 GMT
Server: Apache
Content-Location: index.en.html
Vary: negotiate,accept-language,Accept-Encoding
TCN: choice
Last-Modified: Thu, 21 Mar 2013 19:27:22 GMT
ETag: "399f-4d87453e27a80"
Accept-Ranges: bytes
Content-Length: 14751
Cache-Control: max-age=86400
Expires: Fri, 22 Mar 2013 21:08:29 GMT
Content-Type: text/html
Content-Language: en

dstat - eine echte top-Alternative

2013-03-05, getagged als cli, linux, top
Das Tool dstat vereinigt viele Systemanalyse-Funktionen in einem Kommando.

Unix-Timestamp umrechnen

2012-06-26, getagged als bash, cli, linux
Immer wieder kommt es vor, dass ich einen Unix-Timestamp (Anzahl Sekunden seit dem 01.Januar 1970, 0:00 Uhr) in eine lesbare Zeit umwandeln muss. Zwar gibt es dazu auch Webseiten und Browser-Addons die das können, aber einen Befehl direkt auf der Konsole zu haben, ist meistens einfach praktischer.

Da mir kein Befehl bekannt ist, der das direkt bewerkstelligen kann, habe ich mir für die Bash zwei kleine Funktionen gebaut, eine um vom Unix-Timestamp zur lesbaren Zeit umzurechnen und eine für die umgekehrte Richtung:
# Unix-Timestamp to readable time
function uts2rt() { 
  echo $@ | awk '{print strftime("%X, %x", $1)}'
}

# readable time to Unix-Timestamp
function rt2uts() {
  date -d "$(echo $@)" "+%s" || echo " please type date as format YYYY-MM-DD HH:MM:SS"
}
Für die erste Funktion ist allerdings die erweiterte awk-Variante der Free Software Foundation mit dem Namen gawk erforderlich. Diese ist aber mit aptitude install gawk schnell installiert.
Bei letzter Funktion hat es sich als große Hilfe erwiesen, das definierte Format im Fehlerfall anzuzeigen.

Und so sieht das dann aus, wenn man diese Funktionen auf der Konsole nutzt:
root@host:~# uts2rt 1234567890
00:31:30, 14.02.2009

root@host:~# rt2uts 2008-06-17 15:30:49
1213709449

Gelöschte Datei wiederherstellen

2012-06-21, getagged als cli, filesystem, linux
Wie kann man eine gelöschte Datei eines noch aktiven Prozesses wiederherstellen?
Vor kurzem habe ich versehentlich eine wichtige Log-Datei gelöscht. War diese Datei von einem aktiven Prozess geöffnet und ist dieser Prozess noch nicht gestorben, ist es sehr einfach diese Datei wiederherzustellen.
Alles was man dazu braucht ist das Werkzeug lsof.

Hier ein Beispiel:

Nehmen wir an, ich habe versehentlich die Datei /var/log/messages gelöscht und möchte sie wiederherstellen. Unter Linux weiß man, dass diese Datei in der Regel vom rsyslogd (oder auf älteren Systemen von syslogd) geöffnet wird. Mittels lsof kann ich mir das bestätigen und die zuständige PID erfahren:
root@host:~# lsof | grep var/log/messages
rsyslogd  1009   syslog   2w   REG   252,0   73541   6160750 /var/log/messages (deleted)
Hier gibt es ein paar Informationen über die vermeindlich gelöschte Datei. In der letzten Spalte gibt es auch den Hinweis, dass es sich um eine bereits gelöschte Datei handelt. Mit Hilfe der PID (hier 1009) und der Nummer des FileDescriptors (hier 2w, das 'w' steht für schreibenden Zugriff) kann man nun die Datei aus dem /proc-Dateisystem zurückholen:
root@host:~# cp /proc/1009/fd/2 messages.backup
Und schon hat man die Datei wieder zurück.

Anders sieht das aus, wenn man eine Datei wiederherstellen möchte für die es KEINEN aktiven Prozess mehr gibt. Hier kann ein Blick auf das Tool extundelete nicht schaden.

Willkommen

2012-06-20
Willkommen auf meinem Blog.
In erster Linie für mich selber gedacht, wird es vielleicht auch dem Einen oder Anderen helfen die Linux-Kommandozeile effektiver zu nutzen. Es sei noch erwähnt, dass ich fast ausschließlich auf Debian-basieren Systemen arbeite, wo (fast) jedes Werkzeug mit einem einfachen
aptitude install paketname
nachinstalliert werden kann.