Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:vi

Wichtige Shell Befehle für den DBA unter Linux / Solaris

Linux

VI Befehle

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
Jaktuelle Zeile an das Ende der vorhergehenden Zeile anhängen
:set numberZeilennummer anzeigen
Löschen
:2,12dZeilen 2 bis 12 löschen
:.,$dalle Zeilen löschen („.“ = Anfang der Datei, „$“ = Ende der Datei)
Multiple Files
:nnächste Datei
:e#vorherige Datei
:rewgehe zur ersten Datei
:arListe alle offenen Dateien auf


vi graphical cheat sheet ⇒ http://www.viemu.com/vi-vim-cheat-sheet.gif


Tar

Zippt alle Dateien in einem Verzeichnis

tar cfvz archive.tar.gz /verzeichnis/

Entpackt

tar xfvz archive.tar.gz 

df

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

grep

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/

Find

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

Änderungsdatum einer Datei mit stat

Mit dem stat befehlt lassen sich alle Datei Eigenschaften einfach auswerten

LASTTOUCH=$(stat -c %y backuo.log)
LASTTOUCH=${MODDATE%% *}
echo $LASTTOUCH

du

Wieviel Platz belegt ein Verzeichnis:

# eingeschränkt auf eine Ebene:

du --max-depth=1 -h .

Alternatives Werkzeug ncdu, siehehttp://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

ps

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

  • USER = user owning the process
  • PID = process ID of the process
  • %CPU = It is the CPU time used divided by the time the process has been running.
  • %MEM = ratio of the process’s resident set size to the physical memory on the machine
  • VSZ = virtual memory usage of entire process
  • RSS = resident set size, the non-swapped physical memory that a task has used
  • TTY = controlling tty (terminal)
  • STAT = multi-character process state
  • START = starting time or date of the process
  • TIME = cumulative CPU time
  • COMMAND = command with all its arguments

Xargs

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

AWK

Ein einfache Hochkomma in einer Ergebnissliste erzeugen beim Aufruf von AWK in der Bash

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'
Mit Field Seperator und Such Ausdruck Wert aus einer Datei lesen

„-F“ Fild Seperator setzen - Suche in aktueller Zeile mit /<suchstring>/ und Ausgabe des zweiten Wertes:

awk -F: ' /grid/ {print $2}' /etc/oratab 

watch

einen Befehl alle n sekunden wiederholen

watch -n 10 "df | grep backup"

who

last reboot
who -b
 system boot  2013-01-21 04:51
 
uptime
 
# see the value behind up!
Aktueller Run Level
who -r
         run-level 3  2014-07-30 06:47                   last=S
Wer ist angemeldet
who -u

ssh key austausch

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

Befehle auf meheren Knoten ausführen

Per Schleife und ssh :

for i in {1..4}; do ssh gpi-nosql0$i "hostname ;date ; exit"; done

Datei erzeugen mit dd

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 Änderungen durchführen

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

Was liegt hier so großes im Verzeichnis herum?

Mit du und sort die großen Daten suchen

 du -skx * | sort -nk 1,1

Wer hat welche Datei gerade offen - show open files

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

Unter welchen Rechten läuft ein Prozess wie der listner

Ü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
...

Firewall - Open Ports vom Client testen

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

TCP Dump

Alle Packete von und zu einem Host protokollieren:

# -X mit dem Content der Packete!
 
tcpdump -nnvvSX  <host_name or IP>
Siehe auch

Blocksize eines Filesystems und die maximale Größe einer Datei

mit fstune -l <dev> kann diese Information angezeigt werden

 tune2fs -l /dev/sda

siehe auch ⇒ http://www.howtoadvice.com/Ext3Max


Crontab:

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

see http://www.pantz.org/software/cron/croninfo.html

Cron Tab Examples

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/


Mit welchen Parametern wurde der Kernel gestartet

cat /proc/cmdline

strace - was wird von einem Programm alles verwendet/aufgerufen

Schalter:

  • -f - Child Prozesse mit ein beziehen ( mit -ff und -o <output_file> pro child eine eigene Output Datei )
  • -e - filteren zum Bespiel nur auf read oder open Calls

Welche Hardware ist installiert

Zum Beispiel um die Netzwerkkarten anzueigen:

# lshw -class network

Hex IP Adressen interpretieren

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)
}

Yum

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

Dateien zusammen fügen

Paste

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


Dateien anhängen

cat data1  data2 > data3

Bash Scripting Examples

Solaris

Prozess Argumente anzeigen

md5 solaris anzeigen

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

Hostname mit Domain anzeigen lassen

 echo $(hostname).$(domainname)

32/64 bit Kernel ?? in solaris anzeigen

#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
				

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
linux/vi.txt · Zuletzt geändert: 2022/06/07 10:31 von gpipperr