<?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>linux &#8211; Uroš Vovk</title>
	<atom:link href="https://www.urosvovk.com/tag/linux-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.urosvovk.com</link>
	<description>Uroš Vovk home page</description>
	<lastBuildDate>Tue, 03 Mar 2026 21:15:58 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Bandwidth usage report per IP address</title>
		<link>https://www.urosvovk.com/bandwidth-usage-report-per-ip-address/</link>
					<comments>https://www.urosvovk.com/bandwidth-usage-report-per-ip-address/#comments</comments>
		
		<dc:creator><![CDATA[Uroš]]></dc:creator>
		<pubDate>Fri, 01 Jun 2018 13:04:54 +0000</pubDate>
				<category><![CDATA[Linux Stuff]]></category>
		<category><![CDATA[Network Stuff]]></category>
		<category><![CDATA[accounting]]></category>
		<category><![CDATA[bandwidth usage]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mikrotik]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[python 2.7]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[RouterOS]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sqlite3]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[traffic]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">http://www.urosvovk.com/?p=858</guid>

					<description><![CDATA[I created a simple python script for collecting data from mikrotik accounting (documetation) feature. Here is my &#8220;mik_collector.py&#8221; script: all you need to change is router_ip variable to match your router IP after that you can run this script simply with this command: python mik_collector.py this will collect data from mikrotik every 5 seconds and store &#8230; <a href="https://www.urosvovk.com/bandwidth-usage-report-per-ip-address/" class="more-link">Continue reading <span class="screen-reader-text">Bandwidth usage report per IP address</span></a>]]></description>
										<content:encoded><![CDATA[<p>I created a simple python script for collecting data from mikrotik accounting (<a href="https://wiki.mikrotik.com/wiki/Manual:IP/Accounting" target="_blank" rel="noopener">documetation</a>) feature.</p>
<p>Here is my &#8220;mik_collector.py&#8221; script:<br />
<script src="//pastebin.com/embed_js/xCYZ9Cf8"></script></p>
<p>all you need to change is <em><strong>router_ip</strong></em> variable to match your router IP</p>
<p>after that you can run this script simply with this command:</p>
<pre>python mik_collector.py</pre>
<p>this will collect data from mikrotik every 5 seconds and store it in data.db sqlite3 database in the same directory as the script is.</p>
<p>All you need to do at mikrotik side is to enable accounting feature:</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-861" src="http://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_1.png" alt="" width="395" height="314" srcset="https://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_1.png 395w, https://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_1-300x238.png 300w" sizes="(max-width: 395px) 100vw, 395px" /> <img decoding="async" class="aligncenter size-full wp-image-862" src="http://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_2.png" alt="" width="303" height="185" srcset="https://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_2.png 303w, https://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_2-300x183.png 300w" sizes="(max-width: 303px) 100vw, 303px" /> <img decoding="async" class="aligncenter size-full wp-image-863" src="http://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_3.png" alt="" width="272" height="136" /></p>
<p>If you want to analyze your collected data you can do it with sqlite3 command from Ubuntu command prompt:</p>
<pre>sqlite3 data.db "select * from sum_per_month order by month"</pre>
<p>like this:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-864" src="http://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_4.png" alt="" width="704" height="420" srcset="https://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_4.png 704w, https://www.urosvovk.com/wp-content/uploads/2018/06/mik_acc_4-300x179.png 300w" sizes="auto, (max-width: 704px) 100vw, 704px" /></p>
<p>you can write your own queries, all data is stored in a table named accounting. You can share your query in the comments :)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.urosvovk.com/bandwidth-usage-report-per-ip-address/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Check log files with grep</title>
		<link>https://www.urosvovk.com/check-log-files-with-grep/</link>
		
		<dc:creator><![CDATA[Uroš]]></dc:creator>
		<pubDate>Fri, 21 Sep 2012 10:15:07 +0000</pubDate>
				<category><![CDATA[Linux Stuff]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[script]]></category>
		<guid isPermaLink="false">http://urosv.wordpress.com/?p=225</guid>

					<description><![CDATA[I sometime need to check some logs and I do this with this command: egrep -o "p1&#124;p2&#124;...&#124;pn" filename &#124; sort &#124; uniq -c Example: egrep -o "success&#124;error&#124;fail" test_file &#124; sort &#124; uniq -c Sample input: test started at 00:00 test delete fail test error test connect success test insert success test started at 00:00 test &#8230; <a href="https://www.urosvovk.com/check-log-files-with-grep/" class="more-link">Continue reading <span class="screen-reader-text">Check log files with grep</span></a>]]></description>
										<content:encoded><![CDATA[<p>I sometime need to check some logs and I do this with this command:</p>
<pre>egrep -o "p1|p2|...|pn" filename | sort | uniq -c</pre>
<h1>Example:</h1>
<pre>egrep -o "success|error|fail" test_file | sort | uniq -c</pre>
<h2>Sample input:</h2>
<pre>test started at 00:00
test delete fail
test error
test connect success
test insert success
test started at 00:00
test delete fail
test error
test connect success
test insert success
test started at 00:00
test delete  fail
test error
test connect success
test insert success
test started at 00:00
test delete  fail
test error
test connect success
test insert success</pre>
<h2>Sample output:</h2>
<pre>4 error
4 fail
8 success</pre>
<h1>How it works?</h1>
<p><span id="more-225"></span></p>
<pre>egrep -o "success|error|fail" test_file</pre>
<h3>From grep manual:</h3>
<p><strong>egrep</strong> &#8211; print lines matching a pattern<br />
<strong>-o</strong> &#8211; Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.</p>
<p><strong>&#8220;success|error|fail&#8221;</strong> &#8211; patterns<br />
<strong>test_file</strong> &#8211; input file</p>
<p>If we run only egrep -o &#8220;success|error|fail&#8221; test_file we get this:</p>
<pre>fail
error
success
success
fail
error
success
success
fail
error
success
success
fail
error
success
success</pre>
<p>next we need to send grep output to sort:</p>
<pre>| sort</pre>
<h3>From sort manual:</h3>
<p><strong>sort</strong> &#8211; sort lines of text files</p>
<p>After sort is completed we have this:</p>
<pre>error
error
error
error
fail
fail
fail
fail
success
success
success
success
success
success
success
success</pre>
<p>now we need to send sort output to uniq command:</p>
<pre>| uniq -c</pre>
<h3>From uniq manual:</h3>
<p><strong>uniq</strong> &#8211; report or omit repeated lines<br />
<strong>-c</strong> &#8211; prefix lines by the number of occurrences</p>
<p>After this, we have what we wanted:</p>
<pre>4 error
4 fail
8 success</pre>
<p>This is all for today. I hope that this will help you to check huge log files!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Backup (from command line)/Restore OpenFiler</title>
		<link>https://www.urosvovk.com/backup-openfiler-from-command-line/</link>
		
		<dc:creator><![CDATA[Uroš]]></dc:creator>
		<pubDate>Tue, 21 Feb 2012 08:50:24 +0000</pubDate>
				<category><![CDATA[Linux Stuff]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openfiler]]></category>
		<category><![CDATA[restore]]></category>
		<guid isPermaLink="false">http://urosv.wordpress.com/?p=165</guid>

					<description><![CDATA[Backup Openfiler When I need a Openfiler backup for the first time, I did this: 1. Log in OpenFiler Web UI 2. Click System 3. Click Backup/Restore 4. Click Download This works well if you have time to do this steps every day&#8230; but if you don&#8217;t want to do this steps every day, you &#8230; <a href="https://www.urosvovk.com/backup-openfiler-from-command-line/" class="more-link">Continue reading <span class="screen-reader-text">Backup (from command line)/Restore OpenFiler</span></a>]]></description>
										<content:encoded><![CDATA[<h2>Backup Openfiler</h2>
<p>When I need a Openfiler backup for the first time, I did this:</p>
<p>1. Log in OpenFiler Web UI<br />
2. Click System<br />
3. Click Backup/Restore<br />
4. Click Download</p>
<p>This works well if you have time to do this steps every day&#8230; but if you don&#8217;t want to do this steps every day, you must find another way to do daily backups&#8230;</p>
<p>After my little research, I find out that when I click on Backup/Restore, Openfiler cal this file: https://openfiler:446/admin/system_backup.html</p>
<p>I examined the content of this file and finded out, that all you need to backup your OpenFiler configuration is this:<br />
<span id="more-165"></span></p>
<pre>
export LANG=C; /usr/bin/sudo grep /mnt/ /etc/fstab &gt; /opt/openfiler/etc/fstab_mnt
export LANG=C; /usr/bin/sudo /bin/tar --ignore-failed-read -cPpzf / --exclude /opt/openfiler/etc/httpd/logs --exclude /opt/openfiler/etc/update.log /opt/openfiler/etc/</pre>
<p>After that, I created a script to put in my crontab, which backup Openfiler configuration every day. I keep only backups newer then 7 dasy, older backups are deleted.</p>
<h3>Here is my script</h3>
<pre>
BCKNAME="OpenFiler_`hostname`_`date "+%Y-%d-%m"`.tgz"
BCKFOLDER="/root/backup"
BCKCNT=`ls -1 $BCKFOLDER/OpenFiler_* | grep -c OpenFiler_`

function bck {
	export LANG=C; /usr/bin/sudo grep /mnt/ /etc/fstab &gt; /opt/openfiler/etc/fstab_mnt
	export LANG=C; /usr/bin/sudo /bin/tar --ignore-failed-read -cPpzf $1 --exclude /opt/openfiler/etc/httpd/logs --exclude /opt/openfiler/etc/update.log /opt/openfiler/etc/
}

cd $BCKFOLDER

if [ $BCKCNT -gt 7 ];
then
	ls -tr -1 OpenFiler_*.tgz | tail -n 8 | head -n1 | xargs -I{} find $BCKFOLDER -name "OpenFiler_*.tgz" -not -newer {} | xargs rm
	bck $BCKFOLDER/$BCKNAME
else
	bck $BCKFOLDER/$BCKNAME
fi</pre>
<h3>How it works</h3>
<p>This is a backup name (like OpenFiler_UrosOF_2012-21-02.tgz)</p>
<pre>
BCKNAME="OpenFiler_`hostname`_`date "+%Y-%d-%m"`.tgz"</pre>
<p>Backup destination</p>
<pre>
BCKFOLDER="/root/backup"</pre>
<p>This count backups already in backup folder</p>
<pre>
BCKCNT=`ls -1 $BCKFOLDER/OpenFiler_* | grep -c OpenFiler_`</pre>
<p>Function to export all OpenFiler configuration files.<br />
$1 -&gt; function parameter: backup location/name</p>
<pre>
function bck {
	export LANG=C; /usr/bin/sudo grep /mnt/ /etc/fstab &gt; /opt/openfiler/etc/fstab_mnt
	export LANG=C; /usr/bin/sudo /bin/tar --ignore-failed-read -cPpzf $1 --exclude /opt/openfiler/etc/httpd/logs --exclude /opt/openfiler/etc/update.log /opt/openfiler/etc/
}</pre>
<p>Change directory to backup directory and check if backup folder contains more than 7 backups, if yes remove older backups and create a new one, else just create a new backup</p>
<pre>
cd $BCKFOLDER
if [ $BCKCNT -gt 7 ];
then
	ls -tr -1 OpenFiler_*.tgz | tail -n 8 | head -n1 | xargs -I{} find $BCKFOLDER -name "OpenFiler_*.tgz" -not -newer {} | xargs rm
	bck $BCKFOLDER/$BCKNAME
else
	bck $BCKFOLDER/$BCKNAME
fi</pre>
<h2>Restore Openfiler</h2>
<p>1. Log in OpenFiler Web UI<br />
2. Click System<br />
3. Click Backup/Restore<br />
4. Browse to your backup file<br />
5. Click Upload</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Auto complete for already used command line commands?</title>
		<link>https://www.urosvovk.com/command-line-auto-complete/</link>
		
		<dc:creator><![CDATA[Uroš]]></dc:creator>
		<pubDate>Fri, 29 Apr 2011 14:55:38 +0000</pubDate>
				<category><![CDATA[Linux Stuff]]></category>
		<category><![CDATA[auto-complete]]></category>
		<category><![CDATA[history]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[terminal]]></category>
		<guid isPermaLink="false">http://urosv.wordpress.com/?p=97</guid>

					<description><![CDATA[To use auto-complete of already used command line command we just need to edit the following lines: sudo vim /etc/inputrc 1. Uncomment the following lines: #”e[5~”: history-search-backward #”e[6~”: history-search-forward If you don&#8217;t have this two lines just add them to the end of file (without #) 2. Logout/login &#8212; Now you can try to write &#8230; <a href="https://www.urosvovk.com/command-line-auto-complete/" class="more-link">Continue reading <span class="screen-reader-text">Auto complete for already used command line commands?</span></a>]]></description>
										<content:encoded><![CDATA[<p>To use auto-complete of already used command line command we just need to edit the following lines:<br />
<span id="more-97"></span></p>
<pre>sudo vim /etc/inputrc</pre>
<p>1. Uncomment the following lines:</p>
<pre>#”e[5~”: history-search-backward
#”e[6~”: history-search-forward</pre>
<p>If you don&#8217;t have this two lines just add them to the end of file (without #)</p>
<p>2. Logout/login</p>
<p>&#8212;<br />
Now you can try to write some command listed in history&#8230; </p>
<p>like&#8230;</p>
<pre>ls -lah</pre>
<p>write</p>
<pre>ls</pre>
<p>and press</p>
<p><kbd style="border:1px solid #aaa;color:#444;-moz-box-shadow:0 0 3px rgba(0,0,0,.2);-webkit-box-shadow:0 0 3px rgba(0,0,0,.2);box-shadow:0 0 3px rgba(0,0,0,.2);padding:2px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;">Page Up</kbd> or <kbd style="border:1px solid #aaa;color:#444;-moz-box-shadow:0 0 3px rgba(0,0,0,.2);-webkit-box-shadow:0 0 3px rgba(0,0,0,.2);box-shadow:0 0 3px rgba(0,0,0,.2);padding:2px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;">Page Dn</kbd> to navigate trough your history file in search of commands that starts with &#8220;ls&#8221;</p>
<p>If you did everything right it should auto-complete your command&#8230;</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
