<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The black box of life &#187; Unix</title>
	<atom:link href="http://www.michael-schwenk.de/tag/unix/feed" rel="self" type="application/rss+xml" />
	<link>http://www.michael-schwenk.de</link>
	<description></description>
	<lastBuildDate>Fri, 03 Jun 2011 13:09:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>One line global search and replace on Linux</title>
		<link>http://www.michael-schwenk.de/2008/11/07/ubicomp/one-line-global-search-and-replace-on-linux</link>
		<comments>http://www.michael-schwenk.de/2008/11/07/ubicomp/one-line-global-search-and-replace-on-linux#comments</comments>
		<pubDate>Fri, 07 Nov 2008 15:25:27 +0000</pubDate>
		<dc:creator>Michel</dc:creator>
				<category><![CDATA[Ubicomp]]></category>
		<category><![CDATA['s/foo/bar/g']]></category>
		<category><![CDATA[Command line]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[Global Search & Replace]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Search & Replace]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Zeichenkette]]></category>

		<guid isPermaLink="false">http://www.michael-schwenk.de/?p=321</guid>
		<description><![CDATA[Beim Kopieren einer Applikation auf eine andere physikalische Umgebung kann es vorkommen, dass in x-beliebig vielen Dateien ein ganz bestimmter String [damit meine ich die Zeichenkette ] (z.B. der absolute Pfad oder der Hostname) ersetzt werden muss. Jetzt kann man den fehleranf&#228;lligen Weg gehen und jede Datei einzeln editieren. Effektiver ist es jedoch, einen einzigen [...]]]></description>
			<content:encoded><![CDATA[<p>Beim Kopieren einer Applikation auf eine andere physikalische Umgebung kann es vorkommen, dass in x-beliebig vielen Dateien ein ganz bestimmter String [damit meine ich die Zeichenkette <img class="superemotions" title="{#superemotions_dlg.lol}" alt="{#superemotions_dlg.lol}" border="0" src="http://www.michael-schwenk.de/wp-includes/images/smilies/icon_lol.gif" />] (z.B. der absolute Pfad oder der Hostname) ersetzt werden muss. Jetzt kann man den fehleranf&#228;lligen Weg gehen und jede Datei einzeln editieren. <img class="superemotions" title="{#superemotions_dlg.rolleyes}" alt="{#superemotions_dlg.rolleyes}" border="0" src="http://www.michael-schwenk.de/wp-includes/images/smilies/icon_rolleyes.gif" /></p>
<p><span id="more-321"></span>Effektiver ist es jedoch, einen einzigen Befehl auszuf&#252;hren und der global, also auch rekursiv, den String sucht und ersetzt.</p>
<blockquote>
<div class="code short">
<p style="font-family: Courier New,Courier,mono;">find . -type f | xargs sed -i .bak &#8216;s/alterString/neuerString/g&#8217;</p>
</div>
</blockquote>
<p>Dieser Befehl durchsucht jede Datei in dem Verzeichnis. Sie wird zun&#228;chst ge&#246;ffnet, dann wird nach &#8220;alterString&#8221; gesucht. Wird dieser gefunden, wird ein Backup der Datei *.bak erstellt und erst dann wir der bisherige String durch &#8220;neuerString&#8221; ersetzt.</p>
<p>Ist man sich der Sache sicher, was man tut, kann man z.B. die Backup-Option ausschalten</p>
<blockquote>
<p style="font-family: Courier New,Courier,mono;">find . -type f | xargs sed -i &#8216;s/alterString/neuerString/g&#8217;</p>
</blockquote>
<p>Das funktioniert zwar, aber es gibt gravierende Nachteile: Es wird jede Datei ber&#252;hrt, unabh&#228;ngig davon ob der gew&#252;nschte String vorkommt, und es gibt einen Konflikt mit dem Schr&#228;gstrich bei Pfadangaben. Dieser muss dann mit &#8220;\&#8221; maskiert werden. F&#252;r die Maskierung s&#228;he der Befehl nun so aus:</p>
<blockquote>
<p style="font-family: Courier New,Courier,mono;">find . -type f | xargs sed -i &#8216;s/alter\/String/neuer\/String/g&#8217;</p>
</blockquote>
<p>Damit das System nicht unn&#246;tig belastet wird und nicht jede Datei einzeln ber&#252;hrt wird, muss der Befehl um eine weitere Option erweitert werden.</p>
<div class="code short">
<blockquote>
<p style="font-family: Courier New,Courier,mono;">find . -type f | xargs grep -l &#8216;alter\/String&#8217; | xargs sed -i &#8221; -e &#8216;s/alter\/String/neuer\/String/g&#8217;</p>
</blockquote>
<p>Jetzt werden alle Dateien gesucht, es werden aber lediglich die Dateien ber&#252;hrt, in denen &#8220;alter/String&#8221; vorkommt, und dieser wird dann durch &#8220;neuer/String&#8221; ersetzt.</p>
<p>Mein Fazit: Feine Sache!</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.michael-schwenk.de/2008/11/07/ubicomp/one-line-global-search-and-replace-on-linux/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SCP Hintergrundprozess</title>
		<link>http://www.michael-schwenk.de/2008/05/23/ubicomp/scp-hintergrundprozess</link>
		<comments>http://www.michael-schwenk.de/2008/05/23/ubicomp/scp-hintergrundprozess#comments</comments>
		<pubDate>Fri, 23 May 2008 10:08:23 +0000</pubDate>
		<dc:creator>Michel</dc:creator>
				<category><![CDATA[Ubicomp]]></category>
		<category><![CDATA[Background Process]]></category>
		<category><![CDATA[File transfer]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[SCP]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://www.michael-schwenk.de/?p=213</guid>
		<description><![CDATA[Um Daten von einem Rechner auf einen anderen remote zu &#252;bertragen, besteht die M&#246;glichkeit, SCP (Secure Copy) zu nutzen. Ein Beispiel: $ scp /folder/tranfer-file-name username@remote.host.net: /folder/destination-file-name Das Passwort des Users auf dem Remote-Rechner wird nach Best&#228;tigen des Befehls angefordert. Danach muss man warten, bis die &#220;bertragung der Datei abgeschlossen ist. F&#252;r kleine Datenmengen ist das [...]]]></description>
			<content:encoded><![CDATA[<p>Um Daten von einem Rechner auf einen anderen remote zu &#252;bertragen, besteht die M&#246;glichkeit, <em>SCP</em> (Secure Copy) zu nutzen.</p>
<p><span id="more-213"></span>Ein Beispiel:</p>
<blockquote>
<pre class="out">$ <span style="color: #000080;">scp</span> /folder/tranfer-file-name username@remote.host.net:
   /folder/destination-file-name</pre>
</blockquote>
<p>Das Passwort des Users auf dem Remote-Rechner wird nach Best&#228;tigen des Befehls angefordert. Danach muss man warten, bis die &#220;bertragung der Datei abgeschlossen ist. F&#252;r kleine Datenmengen ist das okay, aber bei gr&#246;&#223;eren Mengen, sagen wir beispielsweise 40 GB, oder bei instabilem Netzwerk, ist es l&#228;stig, die Verbindung zum Quellrechner aufrecht zu halten (was beim instabilen Netz schon fast zur Verzweiflung f&#252;hrt). Um dem aus dem Weg zu gehen, kann <em>SCP</em> als Hintergrundprozess ausgef&#252;hrt werden:</p>
<blockquote>
<pre class="out">$ <span style="color: #000080;">scp</span> /folder/tranfer-file-name username@remote.host.net:
   /folder/destination-file-name &gt; /dev/null 2&gt;&amp;1</pre>
</blockquote>
<p>Auch in diesem Fall wird das Passwort des Users auf dem Remote-Rechner angefordert; nach dessen Eingabe und der Best&#228;tigung durch Enter, muss der Prozess mit <em>STRG + Z</em> unterbrochen werden. <em>SCP</em> liefert daraufhin folgenden Output:</p>
<blockquote>
<pre class="out"><span style="color: #003366;">[</span>1<span style="color: #003366;">]</span>+  Stopped        <span style="color: #000080;">scp</span> /folder/tranfer-file-name username@remote.host.net:
   /folder/destination-file-name &gt; /dev/null 2&gt;&amp;1</pre>
</blockquote>
<p>Damit der <em>SCP</em>-Prozess im Hintergrund fortgesetzt wird, muss folgender Befehl eingegeben werden:</p>
<blockquote>
<pre class="out">$ <span style="color: #003366;">bg</span></pre>
</blockquote>
<p>Diesmal sieht der Output von <em>SCP</em> so aus:</p>
<blockquote>
<pre class="out"><span style="color: #003366;">[</span>1<span style="color: #003366;">]</span>+ <span style="color: #000080;">scp</span> /folder/tranfer-file-name username@remote.host.net:
   /folder/destination-file-name &gt; /dev/null 2&gt;&amp;1 &amp;</pre>
</blockquote>
<p>Mit Eingabe von</p>
<blockquote>
<pre class="out">$ <span style="color: #003366;">jobs</span></pre>
</blockquote>
<p>kann kontrolliert werden, ob der Hintergrundprozess (noch) l&#228;uft. Wenn er noch l&#228;uft, sieht das Ergebnis so aus:</p>
<blockquote>
<pre class="out"><span style="color: #003366;">[</span>1<span style="color: #003366;">]</span>+  Running        <span style="color: #000080;">scp</span> /folder/tranfer-file-name username@remote.host.net:
   /folder/destination-file-name &gt; /dev/null 2&gt;&amp;1 &amp;</pre>
</blockquote>
<p>Um den Prozess wieder vordergr&#252;ndig ausf&#252;hren zu lassen, gen&#252;gt die Eingabe von</p>
<blockquote>
<pre class="out">$ <span style="color: #003366;">fg</span></pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.michael-schwenk.de/2008/05/23/ubicomp/scp-hintergrundprozess/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#246;schen des Listener Log-Files</title>
		<link>http://www.michael-schwenk.de/2007/11/26/ubicomp/dba/loschen-des-listener-log-files</link>
		<comments>http://www.michael-schwenk.de/2007/11/26/ubicomp/dba/loschen-des-listener-log-files#comments</comments>
		<pubDate>Mon, 26 Nov 2007 13:27:37 +0000</pubDate>
		<dc:creator>Michel</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Ubicomp]]></category>
		<category><![CDATA[Listener]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.michael-schwenk.de/?p=99</guid>
		<description><![CDATA[Die Datei listener.log wird bei jedem Zugriff auf die Datenbank beschrieben. Dadurch kann die Datei sehr schnell sehr gro&#223; werden. Sie sollte deshalb in regelm&#228;&#223;igen Abst&#228;nden kontrolliert und ggf. gesichert, gel&#246;scht und neu erstellt werden. Wenn Sie unter Windows schon einmal versucht haben, die Datei listener.log zu l&#246;schen oder umzubenennen, w&#228;hrend der TNS Listener Prozess [...]]]></description>
			<content:encoded><![CDATA[<p>Die Datei <em>listener.log</em> wird bei jedem Zugriff auf die Datenbank beschrieben. Dadurch kann die Datei sehr schnell sehr gro&#223; werden. Sie sollte deshalb in regelm&#228;&#223;igen Abst&#228;nden kontrolliert und ggf. gesichert, gel&#246;scht und neu erstellt werden. Wenn Sie unter Windows schon einmal versucht haben, die Datei listener.log zu l&#246;schen oder umzubenennen, w&#228;hrend der TNS Listener Prozess aktiv war, werden Sie festgestellt haben, dass Windows den File-Handler blockiert und einen Fehler ausgibt:</p>
<p class="MsoNormal"><span id="more-99"></span><span style="font-size: 10pt; font-family: 'Courier New';">C:\&gt;<strong>del C:\oracle\ora92\network\log\listener.log</strong></span><br />
<span style="font-size: 10pt; font-family: 'Courier New';">C:\oracle\ora92\network\log\listener.log<br />
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.</span></p>
<p class="MsoNormal">Viele DBAs stoppen an dieser Stelle einfach den TNS Listener Prozess, benennen die Datei um oder entfernen sie; danach starten sie den TNS Listener Prozess wieder. Das f&#252;hrt aber zu Verbindungsfehlern bei Benutzern, die in dieser Zeit versuchen, auf die Datenbank zuzugreifen.<br />
Selbst unter Unix kann es zu Problemen kommen, wenn versucht wird, die Datei listener.log umzubenennen, w&#228;hrend der TNS Listener Prozess aktiv ist. Wie Windows so blockiert auch Unix den File-Handler. Unter Unix <em>kann</em> allerdings die Datei gel&#246;scht werden, aber ORACLE wird beim n&#228;chsten Versuch, die Datei zu beschreiben, diese nicht neu anlegen. Der TNS Listener muss gestoppt und neu gestartet werden, damit die Datei listener.log neu angelegt werden kann.
</p>
<p class="MsoNormal">Hier ist f&#252;r Windows und Unix nun eine L&#246;sung, wie die Datei listener.log umbenannt oder gel&#246;scht werden kann, ohne den TNS Listener zu stoppen und neu zu starten:</p>
<table border="0" width="500">
<tbody>
<tr>
<td align="center"><span><strong>Windows</strong></span></td>
</tr>
<tr>
<td>C:\&gt; <strong>cd \oracle\ora92\network\log</strong></td>
</tr>
<tr>
<td>C:\oracle\ora92\network\log&gt; <strong>lsnrctl set log_status off</strong></td>
</tr>
<tr>
<td>C:\oracle\ora92\network\log&gt; <strong>rename listener.log listener.old</strong></td>
</tr>
<tr>
<td>C:\oracle\ora92\network\log&gt; <strong>lsnrctl set log_status on</strong></td>
</tr>
</tbody>
</table>
<table border="0" width="500">
<tbody>
<tr>
<td align="center"><span><strong>Unix</strong></span></td>
</tr>
<tr>
<td>% <strong>cd /u01/app/oracle/product/9.2.0/network/log</strong></td>
</tr>
<tr>
<td>% <strong>lsnrctl set log_status off</strong></td>
</tr>
<tr>
<td>% <strong>mv listener.log listener.old</strong></td>
</tr>
<tr>
<td>% <strong>lsnrctl set log_status on</strong></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.michael-schwenk.de/2007/11/26/ubicomp/dba/loschen-des-listener-log-files/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

