tag:blogger.com,1999:blog-44048191056755996452024-03-08T00:59:46.774-08:00Linux and unix shell scripts containerUnknownnoreply@blogger.comBlogger23125tag:blogger.com,1999:blog-4404819105675599645.post-57544704146399628802009-03-06T11:27:00.000-08:002009-03-06T11:39:36.820-08:00Seconds to hours and minutesThis program format an arbitrary number of seconds into hours and minutes: <div class="codeexample"> <pre><tt>#!/bin/bash<br /><br />seconds=0<br /><br /><tt class="user">echo</tt> -n "Enter number of seconds > "<br /><tt class="user">read</tt> seconds<br /><br />hours=$((seconds / 3600))<br />seconds=$((seconds % 3600))<br />minutes=$((seconds / 60))<br />seconds=$((seconds % 60))<br /><br /><tt class="user">echo</tt> "$hours hour(s) $minutes minute(s) $seconds second(s)"<br /> </tt><br /></pre> </div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-51639829824924979742009-02-28T06:26:00.000-08:002009-02-28T09:20:31.573-08:00Simple array usage in Bash<pre><span class="c">#!/bin/bash</span><br /><br /><span class="nv">array</span><span class="o">=(</span>one two three four <span class="o">[</span>5<span class="o">]=</span>five<span class="o">)</span><br /><br /><span class="nb">echo</span> <span class="s2">"Array size: ${#array[*]}"</span><br /><br /><span class="nb">echo</span> <span class="s2">"Array items:"</span><br /><span class="k">for </span>item in <span class="k">${</span><span class="nv">array</span><span class="p">[*]</span><span class="k">}</span><br /><span class="k">do</span><br /><span class="k"> </span><span class="nb">printf</span> <span class="s2">" %s\n"</span> <span class="nv">$item</span><br /><span class="k">done</span><br /><br /><span class="nb">echo</span> <span class="s2">"Array indexes:"</span><br /><span class="k">for </span>index in <span class="k">${</span><span class="p">!array[*]</span><span class="k">}</span><br /><span class="k">do</span><br /><span class="k"> </span><span class="nb">printf</span> <span class="s2">" %d\n"</span> <span class="nv">$index</span><br /><span class="k">done</span><br /><br /><span class="nb">echo</span> <span class="s2">"Array items and indexes:"</span><br /><span class="k">for </span>index in <span class="k">${</span><span class="p">!array[*]</span><span class="k">}</span><br /><span class="k">do</span><br /><span class="k"> </span><span class="nb">printf</span> <span class="s2">"%4d: %s\n"</span> <span class="nv">$index</span> <span class="k">${</span><span class="nv">array</span><span class="p">[</span><span class="nv">$index</span><span class="p">]</span><span class="k">}</span><br /><span class="k">done</span><br /><br /></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-82355208100779634142009-02-28T06:19:00.000-08:002009-02-28T06:25:46.029-08:00Fifth basic front end with dialog/Xdialog - Building a Gauge<p> A gauge based on dialog can be used to indicate progress of your program. Building a gauge is slightly tricky. Look at the following example: </p><pre>#!/bin/sh<br />DIALOG=${DIALOG=dialog}<br /><br />COUNT=10<br />(<br />while test $COUNT != 110<br />do<br />echo $COUNT<br />echo "XXX"<br />echo "The new\n\message ($COUNT percent)"<br />echo "XXX"<br />COUNT=`expr $COUNT + 10`<br />sleep 1<br />done<br />) |<br />$DIALOG --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70 0<br /><br /></pre> Here the dialog program gets its input from the code shown within the parentheses. This code emits the number to be used for gauge and the message to be shown. The message to be shown in the gauge box must be surrounded by echo "XXX". The screen-shot of a gauge is shown below.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://linuxgazette.net/101/misc/sunil/gauge.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 724px; height: 456px;" src="http://linuxgazette.net/101/misc/sunil/gauge.png" alt="" border="0" /></a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-46618789761376993672009-02-28T06:12:00.000-08:002009-02-28T06:15:07.008-08:00Fourth basic front end with dialog/Xdialog - Radiolist and ChecklistRadiolists and checklists can be programmed just like menus. A simple radio list example is given below. <pre>#! /bin/sh<br />DIALOG=${DIALOG=dialog}<br />tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$<br />trap "rm -f $tempfile" 0 1 2 5 15<br /><br />$DIALOG --backtitle "Select your favorite singer" \<br /> --title "My favorite singer" --clear \<br /> --radiolist "Hi, you can select your favorite singer here " 20 61 5 \<br /> "Rafi" "Mohammed Rafi" off \<br /> "Lata" "Lata Mangeshkar" ON \<br /> "Hemant" "Hemant Kumar" off \<br /> "Dey" "MannaDey" off \<br /> "Kishore" "Kishore Kumar" off \<br /> "Yesudas" "K. J. Yesudas" off 2> $tempfile<br /><br />retval=$?<br /><br />choice=`cat $tempfile`<br />case $retval in<br />0)<br /> echo "'$choice' is your favorite singer";;<br />1)<br /> echo "Cancel pressed.";;<br />255)<br /> echo "ESC pressed.";;<br />esac<br /></pre> <p> A screen shot is shown below.</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://linuxgazette.net/101/misc/sunil/radiolist.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 774px; height: 520px;" src="http://linuxgazette.net/101/misc/sunil/radiolist.png" alt="" border="0" /></a></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-90371780900272898082009-02-28T06:04:00.000-08:002009-02-28T06:11:22.780-08:00Third basic front end with dialog/Xdialog - building menuTry the following program both in <span style="font-weight: bold;">console</span> and X (after changing dialog to Xdialog as before): <pre>#!/bin/sh<br />DIALOG=${DIALOG=dialog}<br />tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$<br />trap "rm -f $tempfile" 0 1 2 5 15<br /><br />$DIALOG --clear --title "My favorite HINDI singer" \<br /> --menu "Hi, Choose your favorite HINDI singer:" 20 51 4 \<br /> "Rafi" "Mohammed Rafi" \<br /> "Mukesh" "Mukesh" \<br /> "Kishore" "Kishore Kumar" \<br /> "Saigal" "K L Saigal" \<br /> "Lata" "Lata Mangeshkar" \<br /> "Yesudas" "K J Yesudas" 2> $tempfile<br /><br />retval=$?<br /><br />choice=`cat $tempfile`<br /><br />case $retval in<br />0)<br /> echo "'$choice' is your favorite hindi singer";;<br />1)<br /> echo "Cancel pressed.";;<br />255)<br /> echo "ESC pressed.";;<br />esac<br /><br /></pre> The results are as below<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://linuxgazette.net/101/misc/sunil/menubox.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 588px; height: 480px;" src="http://linuxgazette.net/101/misc/sunil/menubox.png" alt="" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://linuxgazette.net/101/misc/sunil/xmenubox.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 573px; height: 392px;" src="http://linuxgazette.net/101/misc/sunil/xmenubox.png" alt="" border="0" /></a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-2385878427113713152009-02-28T05:53:00.000-08:002009-02-28T06:04:28.722-08:00Second basic front end with dialog/XdialogThe following <span style="font-weight: bold;">script</span> reads a string you input and prints it back.<br /><br />#!/bin/sh<br />DIALOG=${DIALOG=dialog}<br />tempfile=`tempfile 2><span style="font-weight: bold;">/dev/null</span>` || tempfile=/tmp/test$$<br />trap "rm -f $tempfile" 0 1 2 5 15<br /><br />$DIALOG --title "My input box" --clear \<br /> --inputbox "Hi, this is a sample input box\n<br />Try entering your name below:" 16 51 2> $tempfile<br /><br />retval=$?<br /><br />case $retval in<br />0)<br /> echo "Input string is `cat $tempfile`";;<br />1)<br /> echo "Cancel pressed.";;<br />255)<br /> if test -s $tempfile ; then<br /> cat $tempfile<br /> else<br /> echo "ESC pressed."<br /> fi<br /> ;;<br />esac<br /><br />Try running the program under console and under X ( after changing dialog to Xdialog as above)<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://linuxgazette.net/101/misc/sunil/inputbox.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 630px; height: 448px;" src="http://linuxgazette.net/101/misc/sunil/inputbox.png" alt="" border="0" /></a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-49809456254739038792009-02-28T05:46:00.000-08:002009-02-28T05:59:23.115-08:00Basic front end with dialog/XdialogThis <span style="font-weight: bold;">script</span> displays a simple YES/NO box.<br /><br />#!/bin/bash<br />DIALOG=${DIALOG=dialog}<br /><br />$DIALOG --title " My first dialog" --clear \<br /> --yesno "Hello , this is my first dialog program" 10 30<br /><br />case $? in<br />0)<br /> echo "Yes chosen.";;<br />1)<br /> echo "No chosen.";;<br />255)<br /> echo "ESC pressed.";;<br />esac<br /><br />A screen-shot of the above program is given below.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://linuxgazette.net/101/misc/sunil/yesno.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 404px; height: 384px;" src="http://linuxgazette.net/101/misc/sunil/yesno.png" alt="" border="0" /></a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-58852797804885101652009-02-27T12:43:00.000-08:002009-02-27T12:46:24.791-08:00Backup reminder script<div style="text-align: justify;"><span style="font-weight: bold;">#!/bin/bash</span><br />DIALOG=Xdialog<br />BACKUP_SCRIPT=backup_script<br />BACKUP_TIME="2pm"<br />BACKUP_DAYS=1<br />SNOOZE_MINS=5<br /><br /><br />$DIALOG --display=:0.0 --wrap --title "Backup Reminder" \<br /> --ok-label Continue \<br /> --cancel-label Snooze \<br /> --yesno "You need to do a backup now. Please attach \<br /> your external backup drive and click 'Continue' to continue \<br /> with the backup or 'Snooze' to postpone the backup for a few \<br /> minutes or close the window to skip this scheduled backup \<br /> and reschedule the backup for next time." 15 60 &> /dev/null<br /><br />return_value=$?<br /><br /># if the command succeeded (the user clicked continue)<br /># proceed with the backup<br />if [ $return_value = 0 ]; then<br /> $BACKUP_SCRIPT<br /> success=$?<br /><br /> # if the <span style="font-weight: bold;">backup script</span> succeeded then send <span style="font-weight: bold;">mail</span> to<br /> # the user and <span style="font-weight: bold;">schedule</span> the next backup<br /> if [ $success = 0 ]; then<br /> <span style="font-weight: bold;">echo</span> "backup succeeded. scheduling next backup for"<br /> echo $0 | at $BACKUP_TIME + $BACKUP_DAYS days<br /> # the backup script failed so stop the backup loop<br /> # and mail the user the failed message<br /> else<br /> echo "backup failed! stopping backup loop! please check your backup script and re-run this script!"<br /> fi<br /># the backup has been skipped (user closed the window)<br /># so reschedule the backup for the next scheduled time<br />elif [ $return_value = 255 ]; then<br /> echo "backup skipped. scheduling next backup for"<br /> echo $0 | at $BACKUP_TIME + $BACKUP_DAYS days<br /># either the dialog command failed because X wasn't available<br /># or the user snoozed the backup, so reschedule the backup<br />else<br /> echo $0 | at now + $SNOOZE_MINS minutes &> /dev/null<br />fi<br /><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-49416730399651585672009-02-23T12:41:00.000-08:002009-02-23T12:44:50.332-08:00Check low space<pre>#!/bin/<span style="font-weight: bold;">bash</span><br /><br />PATHS="/export/home /home"<br />AWK=/usr/bin/<span style="font-weight: bold;">awk</span><br />DU="/usr/bin/<span style="font-weight: bold;">du</span> -ks"<br />GREP=/usr/bin/<span style="font-weight: bold;">grep</span><br />DF="/usr/bin/<span style="font-weight: bold;">df</span> -k"<br />TR=/usr/bin/<span style="font-weight: bold;">tr</span><br />SED=/usr/bin/<span style="font-weight: bold;">sed</span><br />CAT=/usr/bin/<span style="font-weight: bold;">cat</span><br />MAILFILE=/tmp/mailviews$$<br />MAILER=/bin/mailx<br />mailto="all@company.com"<br />for path in $PATHS<br /><br />do<br /> DISK_AVAIL=`$DF $path | $GREP -v "Filesystem" | $AWK '{print $5}'|$SED 's/%//g'`<br /> if [ $DISK_AVAIL -gt 90 ];then<br /> echo "Please clean up your stuff\n\n" > $MAILFILE<br /> $CAT $MAILFILE | $MAILER -s "Clean up stuff" $mailto <br /> fi<br />done<br /></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-78716843639852104382009-02-23T12:38:00.000-08:002009-02-23T12:39:17.463-08:00Remove comments and blank lines<pre style="font-style: italic;"><br />sed '/ *#/d; /^ *$/d' file</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-12674939273437513782009-02-23T12:28:00.000-08:002009-02-23T12:38:14.786-08:00Bash sockets using /dev/tcp<div style="text-align: justify;"><pre>If you dont`t have <span style="font-weight: bold;">telnet clien</span>t or <span style="font-weight: bold;">netcat</span> <span style="font-weight: bold;">you can do this:</span><br /><br />#!/bin/bash<br />exec 3<>/dev/tcp/linuxscripting.blogspot.com/80<br />echo -e "GET / HTTP/1.1\nHost: kinqpinz.info;\nConnection: close\n\n">&3<br />cat <&3</pre></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-87386055961652250882009-02-23T12:23:00.000-08:002009-02-23T12:24:55.909-08:00Remove empty directories<pre><span style="font-style: italic;"><br />find . -type d -empty -print0 | xargs -0 rmdir</span><br /></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-80261392097448863692009-02-23T12:07:00.000-08:002009-02-23T12:08:49.380-08:00Magento installation script<div style="text-align: justify;"> #!/bin/<span style="font-weight: bold;">bash</span><br /><br /> clear<br /><br /> stty erase '^?'<br /><br /> echo "To install Magento, you will need a blank database ready with a user assigned to it."<br /><br /> echo<br /><br /> echo -n "Do you have all of your database information? (y/n) "<br /><br /> read dbinfo<br /><br /> if [ "$dbinfo" == "y" ] ; then<br /><br /> echo<br /><br /> echo -n "Database Host (usually localhost): "<br /> read dbhost<br /><br /><br /> echo -n "Database Name: "<br /> read dbname<br /><br /><br /> echo -n "Database User: "<br /> read dbuser<br /><br /> echo -n "Database Password: "<br /><br /> read dbpass<br /><br /> echo -n "Store URL: "<br /> read url<br /><br /><br /> echo -n "Admin Username: "<br /> read adminuser<br /><br /><br /> echo -n "Admin Password: "<br /> read adminpass<br /><br /> echo -n "Admin First Name: "<br /><br /> read adminfname<br /><br /> echo -n "Admin Last Name: "<br /> read adminlname<br /><br /><br /> echo -n "Admin Email Address: "<br /> read adminemail<br /><br /><br /> echo -n "Include Sample Data? (y/n) "<br /> read sample<br /><br /> if [ "$sample" = "y" ] ; then<br /><br /> echo<br /> echo "Now installing Magento with sample data..."<br /><br /><br /> echo<br /> echo "Downloading packages..."<br /> echo<br /><br /><br /> wget http://www.magentocommerce.com/downloads/assets/1.2.0.1 /magento-1.2.0.1.tar.gz<br /><br /> wget http://www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz<br /><br /><br /> echo<br /> echo "Extracting data..."<br /> echo<br /><br /><br /> tar -zxvf magento-1.2.0.1.tar.gz<br /> tar -zxvf magento-sample-data-1.2 .0 .tar.gz<br /><br /><br /> echo<br /> echo "Moving files..."<br /><br /> echo<br /><br /> mv magento-sample-data-1.2.0/media/* magento/media/<br /><br /> mv magento-sample-data-1.2.0 /magento_sample_data_for_1.2.0.sql magento/data.sql<br /> mv magento/* magento/.htaccess .<br /><br /><br /> echo<br /> echo "Setting permissions..."<br /> echo<br /><br /> chmod o+w var var/.htaccess app/etc<br /> chmod -R o+w media<br /><br /> echo<br /> echo "Importing sample products..."<br /> echo<br /><br /><br /> mysql -h $dbhost -u $dbuser -p$dbpass $dbname < data.sql<br /><br /><br /> echo<br /> echo "Initializing PEAR registry..."<br /><br /> echo<br /><br /> ./pear mage-setup .<br /><br /><br /> echo<br /> echo "Downloading packages..."<br /><br /> echo<br /><br /> ./pear install magento-core/Mage_All_Latest<br /><br /><br /> echo<br /> echo "Cleaning up files..."<br /><br /> echo<br /><br /> rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*<br /><br /> rm -rf magento/ magento-sample-data-1.2.0 /<br /> rm -rf magento-1.2.0.1.tar.gz magento-sample-data-1.2.0.tar.gz<br /><br /> rm -rf index.php.sample .htaccess.sample php.ini.sample LICENSE.txt STATUS.txt data.sql<br /><br /> echo<br /><br /> echo "Installing Magento..."<br /> echo<br /><br /><br /> php-cli -f install.php --<br /> --license_agreement_accepted "yes"<br /> --locale "en_US"<br /><br /> --timezone "America/Los_Angeles"<br /> --default_currency "USD"<br /> --db_host "$dbhost"<br /><br /> --db_name "$dbname"<br /> --db_user "$dbuser"<br /> --db_pass "$dbpass"<br /><br /> --url "$url"<br /> --use_rewrites "yes"<br /> --use_secure "no"<br /><br /> --secure_base_url ""<br /> --use_secure_admin "no"<br /> --admin_firstname "$adminfname"<br /><br /> --admin_lastname "$adminlname"<br /> --admin_email "$adminemail"<br /> --admin_username "$adminuser"<br /><br /> --admin_password "$adminpass"<br /><br /> echo<br /><br /> echo "Finished installing Magento"<br /> echo<br /><br /><br /> exit<br /> else<br /> echo "Now installing Magento without sample data..."<br /><br /><br /> echo<br /> echo "Downloading packages..."<br /><br /> echo<br /><br /> wget http://www.magentocommerce.com/downloads/assets/1.2.0.1 /magento-1.2.0.1.tar.gz<br /><br /><br /> echo<br /> echo "Extracting data..."<br /><br /> echo<br /><br /> tar -zxvf magento-1.2.0.1.tar.gz<br /><br /><br /> echo<br /> echo "Moving files..."<br /><br /> echo<br /><br /> mv magento/* magento/.htaccess .<br /><br /><br /> echo<br /> echo "Setting permissions..."<br /><br /> echo<br /><br /> chmod o+w var var/.htaccess app/etc<br /><br /> chmod -R o+w media<br /><br /> echo<br /><br /> echo "Initializing PEAR registry..."<br /> echo<br /><br /><br /> ./pear mage-setup .<br /><br /> echo<br /><br /> echo "Downloading packages..."<br /> echo<br /><br /><br /> ./pear install magento-core/Mage_All_Latest<br /><br /> echo<br /><br /> echo "Cleaning up files..."<br /> echo<br /><br /><br /> rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*<br /> rm -rf magento/ magento-1.2.0.1.tar.gz<br /> rm -rf index.php.sample .htaccess.sample php.ini.sample LICENSE.txt STATUS.txt<br /><br /><br /> echo<br /> echo "Installing Magento..."<br /><br /> echo<br /><br /> php-cli -f install.php --<br /><br /> --license_agreement_accepted "yes"<br /> --locale "en_US"<br /> --timezone "America/Los_Angeles"<br /><br /> --default_currency "USD"<br /> --db_host "$dbhost"<br /> --db_name "$dbname"<br /><br /> --db_user "$dbuser"<br /> --db_pass "$dbpass"<br /> --url "$url"<br /><br /> --use_rewrites "yes"<br /> --use_secure "no"<br /> --secure_base_url ""<br /><br /> --use_secure_admin "no"<br /> --admin_firstname "$adminfname"<br /> --admin_lastname "$adminlname"<br /><br /> --admin_email "$adminemail"<br /> --admin_username "$adminuser"<br /> --admin_password "$adminpass"<br /><br /><br /> echo<br /> echo "Finished installing Magento"<br /><br /><br /> exit<br /> fi<br /> else<br /><br /> echo<br /> echo "Please setup a database first. Don't forget to assign a database user!"<br /><br /> exit<br /><br />fi<br /><br /></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-4404819105675599645.post-34192663098146970162009-02-21T06:17:00.000-08:002009-02-21T06:19:09.765-08:00Kill process by name<span style="font-style: italic;"><br />ps axco pid,command | grep <process name=""> | awk '{ print $1; }' | xargs kill -9</process></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-77022057132471971402009-02-21T06:07:00.000-08:002009-02-21T06:12:48.106-08:00Locate running gnome-session and send a notification<div>#!<span style="font-weight: bold;">/bin/bash</span><br />user=`<span style="font-weight: bold;">whoami</span>`<br />pids=`<span style="font-weight: bold;">pgrep</span> -u $user gnome-session`<br />title=$1<br />text=$2<br />timeout=$3<br /><br />if [ -z "$title" ]; then<br /> <span style="font-weight: bold;">echo</span> You need to give me a title >&2<br /> exit 1<br />fi<br />if [ -z "$text" ]; then<br /> text=$title<br />fi<br />if [ -z "$timeout" ]; then<br /> timeout=60000<br />fi<br /><br />for pid in $pids; do<br /> # find DBUS session bus for this session<br /> DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS \<br /> /<span style="font-weight: bold;">proc</span>/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`<br /> # use it<br /> DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \<br /> notify-send -u low -t $timeout "$title" "$text"<br />done<br /><br /><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-74462751715084787882009-02-21T05:55:00.000-08:002009-02-21T06:00:57.229-08:00Ssh key authentication<div style="text-align: justify;">#!/bin/bash<br /># This must be allowed on server end<br /># in /etc/sshd_config (default):<br /># RSAAuthentication yes<br /># PubkeyAuthentication yes<br /><br /><br />user='username'<br />host='hostname.com'<br /><br /><span style="font-weight: bold;">ssh-keygen -t rsa</span><br /><br />cat >> ~/.ssh/config <<>> ~/.ssh/authorized_keys"<br /><br /># done<br /><span style="font-weight: bold;">ssh</span> hostname.com</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-78803363187826794612009-02-21T05:44:00.000-08:002009-02-21T05:51:09.385-08:00Find files older than 30 days<div style="text-align: justify;"><span style="font-style: italic;">find . -type f -mtime +30 -exec ls -l {} \;</span><br /><br />Find files and sub-directories that are older than 30 days in the working directory and list them. By changing the value for -mtime, you can adjust the time.<br /><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-28147998220056550482009-02-21T05:37:00.000-08:002009-02-21T05:41:08.435-08:00Display most frequently used commands<div style="text-align: justify;"><span style="font-style: italic;"><br />history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -n | tail | sort -nr</span><br /><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-85557885033536662702009-02-21T02:41:00.000-08:002009-02-21T02:46:00.431-08:00Get an ordered list of subdirectory sizes<div style="text-align: justify;">Lists the size of every file and subdirectory of the current directory. Useful to <span style="font-weight: bold;">find</span> where all that space goes.<br /><br /><br /><span style="font-style: italic;">du -sk ./* | sort -n | awk 'BEGIN{ pref[1]="K"; pref[2]="M"; pref[3]="G";} { total = total + $1; x = $1; y = 1; while( x > 1024 ) { x = (x + 1023)/1024; y++; } printf("%g%s\t%s\n",int(x*10)/10,pref[y],$2); } END { y = 1; while( total > 1024 ) { total = (total + 1023)/1024; y++; } printf("Total: %g%s\n",int(total*10)/10,pref[y]); }'</span><br /><br />or<br /><br /><br /><span style="font-style: italic;">du -ksh ./* | sort -n</span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-88713574455470724032009-02-21T02:32:00.000-08:002009-02-21T02:35:19.921-08:00Resolve all conflicts in SVNUse caution! Resolve all your conflicted files.<br /><br /><span style="font-style: italic;">svn st|awk '/^C/{ print $2; }'|xargs svn resolved</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-25132423603826215262009-02-21T02:09:00.000-08:002009-02-21T02:26:04.389-08:00Subversion Repository Move<div style="text-align: justify;"># Subversion Management<br /># create a gzipped dumpfile of a repository<br /><span style="font-weight: bold;">svnadmin dump</span> path-to-old-repo | <span style="font-weight: bold;">gzip</span> > ~/dumpfile.gz<br /><br /># import into another repository from a gzipped dumpfile<br /><span style="font-weight: bold;">gunzip</span> -c ~/dumpfile.gz | svnadmin load path-to-new-repo<br /><br /># relocated any existing working copies.<br /># See also http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.switch.html<br />cd path-to-working-copy-from-old-repo<br /><span style="font-weight: bold;">svn</span> switch --relocate file:///path/to/old-repo file:///path/to/new-repo .<br /><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-74840951796250495392009-02-20T14:55:00.000-08:002009-02-21T02:27:08.435-08:00Password generator<div style="text-align: justify;">This is a simpler password generator.<br /><br /><pre><span style="font-style: italic;">< /dev/urandom tr -dc A-Za-z0-9_ | head -c8; echo</span><br /></pre><br />Note that the '<span style="font-weight: bold;">tr</span>' strips out everything except characters in the ranges (alphanumeric, mixed case and underscores). This is a nice approach as piping to head means the minimum number of bytes required to generate a password of appropriate length are taken from <span style="font-weight: bold;">/dev/urandom</span> vs other methods which take more than you should need but still have a chance of not having obtained enough random data to generate a password of the required length. You can change the parameter to head to get passwords of any length.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4404819105675599645.post-13954241883317162892009-02-19T13:24:00.000-08:002009-02-19T13:27:10.395-08:00What is shell scriptA <b>shell script</b> is a <a href="http://en.wikipedia.org/wiki/Scripting_language" title="Scripting language">script</a> written for the <a href="http://en.wikipedia.org/wiki/Shell_%28computing%29" title="Shell (computing)">shell</a>, or <a href="http://en.wikipedia.org/wiki/Command_line_interpreter" title="Command line interpreter" class="mw-redirect">command line interpreter</a>, of an <a href="http://en.wikipedia.org/wiki/Operating_system" title="Operating system">operating system</a>. It is often considered a simple <a href="http://en.wikipedia.org/wiki/Domain-specific_programming_language" title="Domain-specific programming language" class="mw-redirect">domain-specific programming language</a>. Typical operations performed by shell scripts include file manipulation, program execution, and printing text.Unknownnoreply@blogger.com0