<?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>wp &#124; anoopdotnet &#187; shell</title>
	<atom:link href="http://wp.anoop.net/tag/shell/feed/" rel="self" type="application/rss+xml" />
	<link>http://wp.anoop.net</link>
	<description>yet another meaningless wordpress blog</description>
	<lastBuildDate>Mon, 06 Feb 2012 08:47:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
	<atom:link rel="hub" href="http://superfeedr.com/hubbub" />
			<item>
		<title>My vim settings</title>
		<link>http://wp.anoop.net/2010/11/my-vim-settings/</link>
		<comments>http://wp.anoop.net/2010/11/my-vim-settings/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 15:44:36 +0000</pubDate>
		<dc:creator>Anoop</dc:creator>
				<category><![CDATA[Meaningless]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vi]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://wp.anoop.net/?p=2039</guid>
		<description><![CDATA[From time to time, I find some settings for vi on remote systems that really kind of freak me out. The one I found recently was &#8216;incsearch&#8217; so I decided to use this opportunity to note down the settings I use on a daily basis. Hope you find some of these useful. syntax on   [...]]]></description>
			<content:encoded><![CDATA[<p>From time to time, I find some settings for vi on remote systems that really kind of freak me out. The one I found recently was &#8216;incsearch&#8217; so I decided to use this opportunity to note down the settings I use on a daily basis. Hope you find some of these useful.</p>
<p><code><br />
syntax on  <br />
set hlsearch<br />
set incsearch<br />
set ruler<br />
set showmatch<br />
</code></p>
<p><strong>syntax on</strong> is pretty obvious. If you&#8217;re writing code, it&#8217;s pretty smart about highlighting the code so it&#8217;s easier to read. It can be odd at first but I find it really useful and after a while, it becomes second nature.</p>
<p><strong>set hlsearch</strong> highlights your search terms so they&#8217;re easy to see. I like this option a lot. not everyone does. </p>
<p><strong>set incsearch</strong> searches as you type. It&#8217;s new to me so I&#8217;m still getting used to it but I think I can already see some uses for it.</p>
<p><strong>set ruler</strong> shows you where your cursor is at all times. I like this option a lot if only to tell me what line number I&#8217;m on. <strong>set number</strong> will also do this but I also find it irritating because it also interferes with my copy/paste habits.</p>
<p><strong>set showmatch</strong> is really useful if you&#8217;re a coder. If you&#8217;ve got somewhat complicated conditional statements or loops, this feature will show you where brackets match so you can find missing brackets and close the proper blocks.</p>
<p>Hope these help. I&#8217;ll update these as I find more. </p>
]]></content:encoded>
			<wfw:commentRss>http://wp.anoop.net/2010/11/my-vim-settings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Handy mkdir, rm, ls commands with {}</title>
		<link>http://wp.anoop.net/2009/10/handy-mkdir-rm-ls-commands-with/</link>
		<comments>http://wp.anoop.net/2009/10/handy-mkdir-rm-ls-commands-with/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 00:37:24 +0000</pubDate>
		<dc:creator>Anoop</dc:creator>
				<category><![CDATA[Geekdom]]></category>
		<category><![CDATA[Technobabble]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ls]]></category>
		<category><![CDATA[mkdir]]></category>
		<category><![CDATA[rm]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://wp.anoop.net/?p=183</guid>
		<description><![CDATA[I always find these commands handy when working with apache. Part of any VirtualHost config involves making the right directories and you can make your job easier by using curly braces. I suppose you could call it regular expressions. I don&#8217;t actually know the technical terms for it. I know it works in bash which [...]]]></description>
			<content:encoded><![CDATA[<p>I always find these commands handy when working with <a href="http://httpd.apache.org/" target="_blank">apache</a>.</p>
<p>Part of any <a href="http://httpd.apache.org/docs/2.0/vhosts/examples.html" target="_blank">VirtualHost</a> config involves making the right directories and you can make your job easier by using curly braces. I suppose you could call it regular expressions. I don&#8217;t actually know the technical terms for it. I know it works in bash which is what I use on a daily basis.</p>
<p>Learn how to create directories without having to issue multiple mkdir commands. This is a pretty simple one.</p>
<blockquote><p>mkdir -p /path/to/some/vhost/docs</p></blockquote>
<p>This is fairly straight forward. Make the parent directories if they don&#8217;t exist. So if <strong>/path/to/some/vhost/docs</strong> is what you want, and <strong>/path</strong> or any of it&#8217;s children don&#8217;t exist, then it will get created. It&#8217;s a fairly safe command because it intelligently checks before creating directories.</p>
<p>This example is a bit more complicated but it&#8217;s awesomeness will blow you away. I used this when I was making virtualhosts for multiple domains or even sub domains of the same parent.</p>
<blockquote><p>mkdir -p {sub1,sub2,sub3}.domain.com/{docs,logs,cgi-bin}</p>
<p>or</p>
<p>mkdir -p www.{domain1,domain2,domain3}.com/{docs,logs,cgi-bin}</p></blockquote>
<p>that command will create all your directories in the appropriate hierarchy so that you don&#8217;t need to issue multiple mkdir commands. It will create the parent directories for you as well. Here is what it does.</p>
<blockquote><p>$ find .<br />
.<br />
./www.domain1.com<br />
./www.domain1.com/cgi-bin<br />
./www.domain1.com/docs<br />
./www.domain1.com/logs<br />
./www.domain2.com<br />
./www.domain2.com/cgi-bin<br />
./www.domain2.com/docs<br />
./www.domain2.com/logs<br />
./www.domain3.com<br />
./www.domain3.com/cgi-bin<br />
./www.domain3.com/docs<br />
./www.domain3.com/logs</p></blockquote>
<p>You can also do that with ls.</p>
<blockquote><p>$ ls -d www.domain{1,2}*<br />
www.domain1.com    www.domain2.com</p></blockquote>
<p>Or even with rm</p>
<blockquote><p>$ rm -vr www.domain{1,3}*<br />
www.domain1.com/cgi-bin<br />
www.domain1.com/docs<br />
www.domain1.com/logs<br />
www.domain1.com<br />
www.domain3.com/cgi-bin<br />
www.domain3.com/docs<br />
www.domain3.com/logs<br />
www.domain3.com</p></blockquote>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://wp.anoop.net/2009/10/handy-mkdir-rm-ls-commands-with/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>is your Linux Fu strong? Harness the power of ‘find’</title>
		<link>http://wp.anoop.net/2009/07/is-your-linux-fu-strong-harness-the-power-of-find/</link>
		<comments>http://wp.anoop.net/2009/07/is-your-linux-fu-strong-harness-the-power-of-find/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 21:26:47 +0000</pubDate>
		<dc:creator>Anoop</dc:creator>
				<category><![CDATA[Technobabble]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://wp.anoop.net/?p=43</guid>
		<description><![CDATA[I love find There is no other way to put it. It&#8217;s such a fantastic tool and once you get used to it, you almost never use the sub par &#8220;locate&#8221; utility to find files. Some of my favorite find switches and one liners are listed below. Explanations too. Find all directories in the current [...]]]></description>
			<content:encoded><![CDATA[<p>I love <a href="http://linux.about.com/od/commands/l/blcmdl1_find.htm">find</a></p>
<p>There is no other way to put it. It&#8217;s such a fantastic tool and once you get used to it, you almost never use the sub par &#8220;locate&#8221; utility to find files.</p>
<p>Some of my favorite find switches and one liners are listed below. Explanations too.</p>
<p>Find all directories in the current directory only without going any deeper that start with &#8220;20&#8243;. Note that I have included &#8216;-mindepth 1&#8242; and there is a reason for that. Try excluding it and you&#8217;ll see exactly what I mean.<br />
<code><br />
find ./ -maxdepth 1 -mindepth 1 -type d -name "20*"<br />
</code></p>
<p>Find all files named config.php in this directory and all sub directories. Print the name of the file and run &#8216;ls -al&#8217; on the file. run a grep command for &#8220;string1&#8243; (case insensitive) against the files. I find this command very useful in doing a single replacement across many files. It helps me determine what will change if I run a mass replacement. The &#8220;{}&#8221; at the end is the name of the file that is replaced in the command. Without that, you will get an error.<br />
<code><br />
find ./ -name "config.php" -ls -print -exec grep -i string1 {} \;<br />
</code></p>
<p>Now I can find those same files and then run a sed command that will replace all occurrences of string1 with string2. The &#8220;-i&#8221; in this case tells sed to make the change to the file in place without creating a new file. This way you have less to clean up but be careful because there is no backup. If you want to backup the file, use &#8220;-i&#8221; where  is the extension you want the backup file to have. E.g. -i.bak<br />
<code><br />
find ./ -name "config.php" -exec sed -i "s/string1/string2/g" {} \;</code></p>
<p>Another use of exec where you sub {} for the file name allows you to do cool things like back up many different files with the same condition. In this case, anything that is &#8220;config.*&#8221; will be &#8220;config.*.bak&#8221;.<br />
<code><br />
find ./-name "config.*" - exec cp {} {}.bak \;</code></p>
<p>Find any directories that have a no permissions for group and others. This is important if you want to find directories that don&#8217;t have permissions that are needed for users to enter a directory. After this, you can use -exec chmod 755 {} \; to change the permissions appropriately.<br />
<code><br />
find ./ -type d -perm 0700<br />
</code></p>
<p>Find any files that are owned by a particular user. You can also specify &#8220;-group&#8221; to find files by user and group names. I use this to find files owned by &#8220;root&#8221; in home directories and then chown them to the appropriate user.<br />
<code><br />
find ./ -user "username"<br />
</code></p>
<p>The -exec feature in find is perhaps the most valuable aspect of &#8220;find&#8221;. I use it several times a day in combination with <a href="http://www.gnu.org/software/sed/">sed</a> and <a href="http://www.gnu.org/manual/gawk/gawk.html">awk</a> to do all sorts of one liners that would normally need a script.</p>
<p>Don&#8217;t forget that you can do all sorts of really neat things with find, sed, awk if you use regular expressions.</p>
]]></content:encoded>
			<wfw:commentRss>http://wp.anoop.net/2009/07/is-your-linux-fu-strong-harness-the-power-of-find/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to get yesterday&#8217;s date using &#8216;date&#8217; in linux</title>
		<link>http://wp.anoop.net/2009/06/how-to-get-yesterdays-date-using-date-in-linux/</link>
		<comments>http://wp.anoop.net/2009/06/how-to-get-yesterdays-date-using-date-in-linux/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 18:52:15 +0000</pubDate>
		<dc:creator>Anoop</dc:creator>
				<category><![CDATA[Technobabble]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://wp.anoop.net/?p=13</guid>
		<description><![CDATA[A while back, I was asked to come up with a logrotation script. This script would rotate all logs into a tarball and move it somewhere for archival purposes. The problem was that I couldn&#8217;t just rotate today&#8217;s logs because it would be incomplete. I had to intelligently find a way to rotate the previous [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, I was asked to come up with a logrotation script.</p>
<p>This script would rotate all logs into a tarball and move it somewhere for archival purposes.</p>
<p>The problem was that I couldn&#8217;t just rotate today&#8217;s logs because it would be incomplete. I had to intelligently find a way to rotate the previous days logs (which would be complete) and then tar them up.</p>
<p>It turns out that you can do this with the &#8220;date&#8221; command in linux.</p>
<p style="padding-left: 30px;"><code><br />
YESTERDAY=$(date -d "yesterday" '+%Y-%m-%d')<br />
echo $YESTERDAY<br />
</code></p>
<p>This little snippet came in very handy and so I thought would share it.</p>
<p>The whole script is very small actually. Here it is. All you want to do is direct the output to a log file so you can review it later if need be. It&#8217;s chatty but you want chatty when you&#8217;re backing up and deleting log files.</p>
<p style="padding-left: 30px;"><code><br />
#!/bin/bash<br />
if [ $# -lt 3 ];  then<br />
echo "USAGE: backup_logs.sh ORIGINAL FILE-PREFIX- DESTINATION"<br />
exit<br />
fi<br />
# get command line variables<br />
FILE=$2<br />
ORIG=$1<br />
DEST=$3<br />
# get current time for log files.<br />
NOW=$(date)<br />
# get yesterdays date<br />
YESTERDAY=$(date -d "yesterday" '+%Y-%m-%d')<br />
# beginning entry in the log file<br />
echo "$NOW Backing up $FILE from $ORIG for $YESTERDAY to $DEST/$FILE-$YESTERDAY.tgz"<br />
echo "$NOW Command is /bin/tar -zcvf $DEST/$FILE$YESTERDAY.tgz $ORIG/$FILE$YESTERDAY*"<br />
/bin/tar -zcvf $DEST/$FILE$YESTERDAY.tgz $ORIG/$FILE$YESTERDAY*<br />
echo $NOW Done backing up logfiles to $DEST/$FILE-$YESTERDAY.tgz<br />
echo "$NOW removing files that were backed up."<br />
/bin/rm -vf $ORIG/$FILE$YESTERDAY*<br />
echo "$NOW done removing backuped up files."<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://wp.anoop.net/2009/06/how-to-get-yesterdays-date-using-date-in-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

