Suchen & Ersetzen | ||
---|---|---|
/ORA- | nach „Ora-“ suchen | |
/ | letzte Suche wiederholen | |
n | letzte Suche wiederholen | |
:s/Error/Fehler/ | in aktueller Zeile suchen & ersetzen | |
:2,12s/Error/Fehler/ | in Zeile 2 bis 12 suchen & ersetzen | |
:%s/Error/Fehler/ | in allen Zeilen suchen & ersetzen | |
Zeilen | ||
J | aktuelle Zeile an das Ende der vorhergehenden Zeile anhängen | |
:set number | Zeilennummer anzeigen | |
Löschen | ||
:2,12d | Zeilen 2 bis 12 löschen | |
:.,$d | alle Zeilen löschen („.“ = Anfang der Datei, „$“ = Ende der Datei) | |
Multiple Files | ||
:n | nächste Datei | |
:e# | vorherige Datei | |
:rew | gehe zur ersten Datei | |
:ar | Liste alle offenen Dateien auf |
vi graphical cheat sheet ⇒ http://www.viemu.com/vi-vim-cheat-sheet.gif
Zippt alle Dateien in einem Verzeichnis
tar cfvz archive.tar.gz /verzeichnis/
Entpackt
tar xfvz archive.tar.gz
Zeige nur die lokalen Filesystem „-l“ an und ein total „–total“, und das alles in einer Zeile in human readable format „-Ph“
df -Ph -l --total
Zeilennummer mit ausgeben
grep -n "ORA-" alert.log
Zeilenweise um einen Treffer ausgeben mit Schalter -C
grep -C 3 "ORA-" alert.log
Treffer auschließen mit Schalter -v
grep -v "ORA-00" alert.log
Case insensitive suchen mit Schalter -i
grep -i "ORA-" alert.log
Nach mehr als einen Wort suchen Schalter -w mit „<suchwort2>\|<suchwort2“ als Regex, auf den \ achten!
grep -w "Service name\|Preferred instances" # oder besser grep --color -E "2005|2009"
Nur Dateinamen mit ausgegben -H, hilfreich beim Einsatz mit find:
find . -name "*.log" -exec grep -H clock {} \;
Recursive über Unterverzeichnisse suchen mit Schalter -R
grep -R 'my_file' /dir/
Suche einen Text und überspringe alles was nicht gelesen werden kann:
find / -mount \! -readable -prune -o -path /dev -prune -o -name 'util_cmd' -ls
see http://stackoverflow.com/questions/762348/how-can-i-exclude-all-permission-denied-messages-from-find
Suche alle Files mit gesetzten S Bit und liste die Datei auf:
find . -type f -perm -4000 -exec ls -ld {} \;
Finde alle mit -mtime die nicht älter als x tage sind: (Man Page: -mtime n File's data was last modified n*24 hours ago )
find . -name "*_lgwr_*.trc" -mtime -1 -exec grep -H -A 1 "*** 2014-04-29 " {} \;
Finde all die älter als 160 Tage sind:
#Liste die Anzahl über die Tage auf: ls -la | awk '{ print $7 "-" $6 }' | sort | uniq -c #Alternativ über stat !Langsamer find . -name "*.aud" -exec stat -c %y {} \; | awk '{ print $1 }' | sort | uniq -c #Lösche Dateien die älter als 160 Tage sind: find . -name "*" -mtime +160 -exec rm {} \;
Finde alle Links die auf diese Datei zeigen über die inode id
ls -i iscsilogin.sh 526122 iscsilogin.sh cd /etc find . -follow -inum 526122 ./rc.d/init.d/iscsilogin.sh
Zeige die Ordner Größe an:
find . -maxdepth 1 -type d -print | xargs du -sm | sort -rn
Zeige die 5 ältesten und neuesten Dateien:
#älteste ls -ltr | head -5 #neuste ls -ltr | tail -5
Mehr Beispiele: http://content.hccfl.edu/pollock/unix/findcmd.htm
Zähle alle Dateien in diesem Directory:
find ${DATA_DIR}/* -maxdepth 0 -type f | wc -l
Mit dem stat befehlt lassen sich alle Datei Eigenschaften einfach auswerten
LASTTOUCH=$(stat -c %y backuo.log) LASTTOUCH=${MODDATE%% *} echo $LASTTOUCH
Wieviel Platz belegt ein Verzeichnis:
# eingeschränkt auf eine Ebene: du --max-depth=1 -h .
Alternatives Werkzeug ncdu, siehe ⇒ http://dev.yorhel.nl/ncdu
# install yum install http://download.opensuse.org/repositories/utilities/RHEL_6/i686/ncdu-1.10-13.2.i686.rpm #start ncdu
Alle Dateien die größer als 1GB sind:
find / -type f -size +1048576
Beispiel nur das Kommando soll angezeigt werden:
ps -o cmd afx /u00/app/oracle/oem/12.1.0/agent/agent_inst/sysman/log/emagent.n \_ /u00/app/oracle/run.sh -root #Falls Treffer in der zweiten Zeile die führenden \ wieder entferenen ps -o cmd afx |grep -v grep | grep "root" | sed -e s/"\\\\_ "/""/g #gibt nur noch aus: /u00/app/oracle/run.sh -root
ps aux
Textausgabe in einer Pipe wiederum als Argument für ein nachfolgendes Programm verwenden.
Hier ein gutes Beispiel: http://sidvind.com/wiki/Xargs_by_example
find . -name "*_lgwr_*.trc" -exec ls -ld {} \; | xargs -0 echo
Leider ist mir bisher nicht gelungen dazu die richtige Escape Squence zu finden.
Beispiel
ps uafx | grep smon | awk '{ print "@"$1"@" }' | sed -e s/"@"/"'"/g 'oracle' 'oracle2'
„-F“ Fild Seperator setzen - Suche in aktueller Zeile mit /<suchstring>/ und Ausgabe des zweiten Wertes:
awk -F: ' /grid/ {print $2}' /etc/oratab
einen Befehl alle n sekunden wiederholen
watch -n 10 "df | grep backup"
who -b system boot 2013-01-21 04:51 uptime # see the value behind up!
who -r run-level 3 2014-07-30 06:47 last=S
who -u
Auf drei Knoten unter den User Oracle Key's erzeugen und dann verteilen
As User oracle on node 1 #generate key on every node ssh-keygen -t rsa ssh cGPIrac2 ssh-keygen -t rsa ssh cGPIrac3 ssh-keygen -t rsa # Copy public key from one node to the other #2/3 to 1 ssh cGPIrac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ssh cGPIrac3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #1/3 to 2 ssh cGPIrac2 ssh cGPIrac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ssh cGPIrac3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #1/2 to 3 ssh cGPIrac3 ssh cGPIrac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ssh cGPIrac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Per Schleife und ssh :
for i in {1..4}; do ssh gpi-nosql0$i "hostname ;date ; exit"; done
Eine Test Datei mit mit 1GB Größe mit dd anlegen:
dd if=/dev/zero of=copy_test_file.dmp bs=1M count=1000
In allen Dateien eines Verzeichnisses das vorkommen eines wortes durch ein anderes ersetzen.
!/bin/bash for file in $(grep -l -R $searchterm $startdirectory) do sed -e "s/$searchterm/$replaceterm/ig" $file > /tmp/tempfile.tmp mv /tmp/tempfile.tmp $file echo "Modified: " $file done
Mit du und sort die großen Daten suchen
du -skx * | sort -nk 1,1
lsof hilft hier weiter
unter /usr/sbin oder /sbin
lsof | grep oracle
fuser - wer verwendet das Verzeichnis
unter /sbin
/sbin/fuser -m -a -v $ORACLE_HOME
Über die Datei /proc/<sid>/status kann geprüft werden, mit welchen Rechten ein Prozess in Linux gestartet wurde.
ps uafx | grep LISTENER oracle 1777 .... cat /proc/9177/status Name: tnslsnr State: S (sleeping) SleepAVG: 98% Tgid: 9177 Pid: 9177 PPid: 1 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 502 502 502 502 FDSize: 512 Groups: 602 703 1004 1009 1044 1006 1630 ...
Auf einer Maschine soll vorab gepürft werden ob der Listener ereichbar wäre. Leider ist aber noch nichts zum prüfen installiert.
Ziel: Testen ob in einer FW schon der Port freigeschaltet ist, im Beispiel der 1521:
mit nc (siehe Manpage nc eine Listen Port auf dem Target erzeugen:
# start on server a process on port 1521 # ein Port nc -l $HOSTNAME 1521 # nc gleichzeitig auf mehreren ports starten export first_port=3100 export last_port =3140 for (( i = first_port; i <= last_port; i++ )) do nc -l $HOSTNAME ${i} & done
Mehr über nc siehe hier http://www.sans.org/security-resources/sec560/netcat_cheat_sheet_v1.pdf
Mit telnet oder curl dann vom Client testen ob der Server unter diesem Port erreichbar ist:
telnet my_server_name 1521 #alternativ wenn kein Telnet mehr zur Verfügung steht: curl http://my_server_name:1521 #alternativ mit nc mit der z option nc -z my_server_name 1521 Connection to my_server_name 1521 port [tcp/*] succeeded! # alternativ mit nc über einen ganzen Port Range nc -z my_server_name 5100-5140 # timing time yes | nc -z my_server_name 1521 real 0m0.004s user 0m0.002s sys 0m0.002s # alternativ mit gnu time /usr/bin/time -f %E nc -z my_server_name 6838
Alle Packete von und zu einem Host protokollieren:
# -X mit dem Content der Packete! tcpdump -nnvvSX <host_name or IP>
mit fstune -l <dev> kann diese Information angezeigt werden
tune2fs -l /dev/sda
siehe auch ⇒ http://www.howtoadvice.com/Ext3Max
crontab -e # Minute Hour Day of Month Month Day of Week Command # (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat) 01 14 20 02 * /home/oragpi/scripts/call_rman_script.sh
Einen Befehl zur Ausführung sofort zur Crontab einmalig hinzufügen:
at now >script.sh # close and start the script with ^d
Ein Guter Generator ⇒ https://crontab-generator.org/
cat /proc/cmdline
Schalter:
Zum Beispiel um die Netzwerkkarten anzueigen:
# lshw -class network
Gelegentlich wird eine IP Adresse als HEX Wert ausgeben. Ein Beispiel ist die Output von „onsctl debug“ im Oracle Real Application Cluster.
onsctl debug ... b42 0000:0000:0000:0000:0000:ffff:0aB8:7c12 .. # Umwandeln mit # auf die großschreibung achten! for i in A B8 7C 12 do printf "%d." $(echo "ibase=16; $i" | bc) done # oder als kleine Funktion hexIP_decIP(){ echo -n $(echo "ibase=16; $1" | bc). echo -n $(echo "ibase=16; $2" | bc). echo -n $(echo "ibase=16; $3" | bc). echo -n $(echo "ibase=16; $4" | bc) }
Mit Yum ein normales RPM Packet installieren, um zum Beispiel Chrome auf einem Server ohne Internet Zugang.
Schalter –nogpgcheck und Parameter localinstall:
yum --nogpgcheck localinstall google-chrome-stable_current_x86_64.rpm
Zwei Datein Spalten weise zusammen fügen:
data1
A B C D
data2
10 20 30 40
Zusammenfügen mit einen „,“ als Trenner:
paste -d "," data1 data2 A,10 B,20 C,30 D,40
Alternativ Daten Transponieren mit „paste -s“
paste -s data1 data2 A B C D 10 20 30 40
Quelle ⇒ http://www.problem-hilfe.de/linux/h/Shells/paste.html
cat data1 data2 > data3
Tool pargs
siehe http://www.c0t0d0s0.org/archives/4779-Less-known-Solaris-Features-Getting-the-command-line-and-environment-of-running-processes.html
Immer daran denken die checksum von Installationspaketen zuprüfen, nicht das was fehlt!
digest -v -a md5 p8202632_10205_SOLARIS64.zip md5 (p8202632_10205_SOLARIS64.zip) = 4caeb39adc1aac52e6146f970e9378d6
echo $(hostname).$(domainname)
#Betriebsystem /usr/bin/isainfo -kv 64-bit amd64 kernel modules # #für die installierte Oracle Version file $ORACLE_HOME/bin/oracle oracle: ELF 64-bit LSB executable AMD64 Version 1, dynamically linked, not stripped