<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-34421871</id><updated>2009-02-21T01:13:32.482-08:00</updated><title type='text'>Blue Shrapnel</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Karen</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34421871.post-116432620732642987</id><published>2006-11-23T15:54:00.000-08:00</published><updated>2006-11-23T17:26:56.386-08:00</updated><title type='text'>installing SugarCRM</title><content type='html'>php version - 5.1.4&lt;br /&gt;php modules - IMAP, curl&lt;br /&gt;&lt;br /&gt;edit php.ini and uncomment &lt;br /&gt;&lt;br /&gt;session.save_path = /tmp&lt;br /&gt;&lt;br /&gt;root@server30013 [/usr/local/lib]# php -i | grep -i session&lt;br /&gt;session&lt;br /&gt;Session Support =&gt; enabled&lt;br /&gt;session.auto_start =&gt; Off =&gt; Off&lt;br /&gt;session.bug_compat_42 =&gt; On =&gt; On&lt;br /&gt;session.bug_compat_warn =&gt; On =&gt; On&lt;br /&gt;session.cache_expire =&gt; 180 =&gt; 180&lt;br /&gt;session.cache_limiter =&gt; nocache =&gt; nocache&lt;br /&gt;session.cookie_domain =&gt; no value =&gt; no value&lt;br /&gt;session.cookie_lifetime =&gt; 0 =&gt; 0&lt;br /&gt;session.cookie_path =&gt; / =&gt; /&lt;br /&gt;session.cookie_secure =&gt; Off =&gt; Off&lt;br /&gt;session.entropy_file =&gt; no value =&gt; no value&lt;br /&gt;session.entropy_length =&gt; 0 =&gt; 0&lt;br /&gt;session.gc_divisor =&gt; 100 =&gt; 100&lt;br /&gt;session.gc_maxlifetime =&gt; 1440 =&gt; 1440&lt;br /&gt;session.gc_probability =&gt; 1 =&gt; 1&lt;br /&gt;session.hash_bits_per_character =&gt; 4 =&gt; 4&lt;br /&gt;session.hash_function =&gt; 0 =&gt; 0&lt;br /&gt;session.name =&gt; PHPSESSID =&gt; PHPSESSID&lt;br /&gt;session.referer_check =&gt; no value =&gt; no value&lt;br /&gt;session.save_handler =&gt; files =&gt; files&lt;br /&gt;session.save_path =&gt; /tmp =&gt; /tmp&lt;br /&gt;session.serialize_handler =&gt; php =&gt; php&lt;br /&gt;session.use_cookies =&gt; On =&gt; On&lt;br /&gt;session.use_only_cookies =&gt; Off&lt;br /&gt;&lt;br /&gt;I ran&lt;br /&gt;&lt;br /&gt;root@server30013 [/home/cpapachebuild/buildapache/php-5.1.4]# ./configure&lt;br /&gt;--with-apxs=/usr/local/apache/bin/apxs --prefix=/usr/local --with-xml&lt;br /&gt;--enable-bcmath --enable-calendar --with-curl --enable-ftp --with-gd&lt;br /&gt;--with-jpeg-dir=/usr/local --with-png-dir=/usr --with-xpm-dir=/usr/X11R6&lt;br /&gt;--with-gettext --with-imap=/usr/local/imap-2004g --enable-mbstring&lt;br /&gt;--enable-mbstr-enc-trans --enable-mbregex --enable-magic-quotes --with-mysqli&lt;br /&gt;--with-mysql=/usr --enable-discard-path --with-pear --enable-sockets&lt;br /&gt;--enable-track-vars --with-zlib&lt;br /&gt;&lt;br /&gt;followed by make, checked for errors, then make install, then restarted apache&lt;br /&gt;httpd using WHM&lt;br /&gt;&lt;br /&gt;PHP Version =&gt; 5.1.4&lt;br /&gt;&lt;br /&gt;System =&gt; Linux server30013.uk2net.com 2.6.17-1.2174_FC5 #1 Tue Aug 8 15:30:55 EDT 2006 i686&lt;br /&gt;Build Date =&gt; Nov 24 2006 01:10:44&lt;br /&gt;Configure Command =&gt;  './configure' '--with-apxs=/usr/local/apache/bin/apxs' '--prefix=/usr/local' '--with-xml' '--enable-bcma&lt;br /&gt;th' '--enable-calendar' '--with-curl' '--enable-ftp' '--with-gd' '--with-jpeg-dir=/usr/local' '--with-png-dir=/usr' '--with-xp&lt;br /&gt;m-dir=/usr/X11R6' '--with-gettext' '--with-imap=/usr/local/imap-2004g' '--enable-mbstring' '--enable-mbstr-enc-trans' '--enabl&lt;br /&gt;e-mbregex' '--enable-magic-quotes' '--with-mysqli' '--with-mysql=/usr' '--enable-discard-path' '--with-pear' '--enable-sockets&lt;br /&gt;' '--enable-track-vars' '--with-zlib'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-116432620732642987?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/116432620732642987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=116432620732642987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116432620732642987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116432620732642987'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/11/installing-sugarcrm.html' title='installing SugarCRM'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-116388525319362510</id><published>2006-11-18T13:23:00.000-08:00</published><updated>2006-11-18T13:27:33.200-08:00</updated><title type='text'>Java Runtime Environment on Edgy</title><content type='html'>How to install JRE v5.0 Update 9&lt;br /&gt;&lt;a href="http://ubuntuguide.org/wiki/Ubuntu_Edgy#How_to_install_JRE_v5.0_Update_9"&gt;http://ubuntuguide.org/wiki/Ubuntu_Edgy#How_to_install_JRE_v5.0_Update_9&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Note: Program included in Automatix2. If you have already used Automatix2, this program may have been installed&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Read #General Notes&lt;/li&gt;&lt;li&gt;Read #How to add extra repositories&lt;/li&gt;&lt;li&gt;Navigate to http://java.sun.com/javase/downloads/index.jsp&lt;/li&gt;&lt;li&gt;Choose "Java Runtime Environment (JRE) 5.0 Update 9" and click on "Download"&lt;/li&gt;&lt;li&gt;Accept License Agreement&lt;/li&gt;&lt;li&gt;Download the "Linux self-extracting file"&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  * Install the required tool : sudo apt-get install java-package  &lt;br /&gt;  * Create the Ubuntu package : fakeroot make-jpkg jre-1_5_0_09-linux-i586.bin&lt;br /&gt;  * Install the resulting package : sudo dpkg -i sun-j2re1.5_1.5.0+update09_i386.deb&lt;br /&gt;  * Restart Mozilla Firefox&lt;br /&gt;  * If you get an error, try changing the 09's in the filenames to the appropriate version number.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-116388525319362510?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/116388525319362510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=116388525319362510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116388525319362510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116388525319362510'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/11/java-runtime-environment-on-edgy.html' title='Java Runtime Environment on Edgy'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-116380896326870268</id><published>2006-11-17T15:56:00.000-08:00</published><updated>2006-11-17T16:16:03.276-08:00</updated><title type='text'>Polling Remote Mail -&gt; IMAP</title><content type='html'>&lt;a href="http://www.superjason.com/archive/2006/08/09/Polling_Remote_POP3_Servers_for_Mail_and_pushing_into_Linux_IMAP_Server.aspx"&gt;Polling Remote POP3 Servers for Mail and pushing into Linux IMAP Server&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sudo apt-get install dovecot-imapd&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.dovecot.org/QuickConfiguration"&gt;http://wiki.dovecot.org/QuickConfiguration&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-116380896326870268?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/116380896326870268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=116380896326870268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116380896326870268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116380896326870268'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/11/polling-remote-mail-imap.html' title='Polling Remote Mail -&gt; IMAP'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-116320757484731216</id><published>2006-11-10T16:33:00.000-08:00</published><updated>2006-11-10T17:12:54.856-08:00</updated><title type='text'>mounting ntfs on Ubuntu filesystem</title><content type='html'>&lt;a href="http://ubuntuguide.org/wiki/Ubuntu:Edgy#How_to_mount.2Funmount_Windows_partitions_.28NTFS.29_manually.2C_and_allow_all_users_to_read_only"&gt;&lt;span style="text-decoration: underline;"&gt;http://ubuntuguide.org/wiki/Ubuntu:Edgy#How_to_mount.2Funmount_Windows_partitions_.28NTFS.29_manually.2C_and_allow_all_users_to_read_only&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ubuntuforums.org/showthread.php?t=21700"&gt;http://www.ubuntuforums.org/showthread.php?t=21700&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Firstly, with Edgy, disks-admin was unmaintained, so it was dropped from GNOME, according to &lt;a href="http://ubuntuforums.org/showthread.php?p=1721261"&gt;http://ubuntuforums.org/showthread.php?p=1721261&lt;/a&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You can install pysdm (Storage Device Manager) and gparted (Gnome Partition Manager) through Synaptic Package Manager (from the menu in Gnome - System, Administration). You will need to enter your user password to gain root access.&lt;br /&gt;&lt;pre class="ubuntu_codebackground" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 34px;"&gt;sudo aptitude install pysdm gparted&lt;span style="font-family: Georgia,serif;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Run the Storage Device Manager, configure the drives and then mount them.  The you can access them using GParted. They are typically mounted in the filesystem: /media/hda1 and /media/hdd1 etc.&lt;/li&gt;&lt;li&gt;Install ntfs-3g:&lt;a href="http://www.ubuntuforums.org/showthread.php?t=217009"&gt; http://www.ubuntuforums.org/showthread.php?t=217009&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;pre&gt;/dev/hda1    /media/windows    ntfs-3g    defaults,locale=en_GB.utf8    0    0&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-116320757484731216?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/116320757484731216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=116320757484731216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116320757484731216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116320757484731216'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/11/mounting-ntfs-on-ubuntu-filesystem.html' title='mounting ntfs on Ubuntu filesystem'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-116285771837076543</id><published>2006-11-06T15:39:00.000-08:00</published><updated>2006-11-10T16:33:36.813-08:00</updated><title type='text'>ubuntu - installing bluetooth to use headset with skype</title><content type='html'>&lt;ol&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/BluetoothSetup"&gt;https://help.ubuntu.com/community/BluetoothSetup&lt;br /&gt;&lt;/a&gt;&lt;pre&gt;sudo apt-get install bluez-utils&lt;br /&gt;karen@tom-1300:~$ sudo /etc/init.d/bluetooth restart&lt;br /&gt;* Restarting Bluetooth services...                                                                         [ ok ]&lt;br /&gt;karen@tom-1300:~$ lsusb&lt;br /&gt;Bus 002 Device 001: ID 0000:0000&lt;br /&gt;Bus 001 Device 002: ID 1310:0001 Roper Class 1 Bluetooth Dongle&lt;br /&gt;Bus 001 Device 001: ID 0000:0000&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Install bluez-btsco&lt;br /&gt;&lt;a href="http://packages.ubuntulinux.org/edgy/sound/bluez-btsco"&gt;http://packages.ubuntulinux.org/edgy/sound/bluez-btsco&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;karen@tom-1300:~$ sudo apt-get install bluez-btsco&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree&lt;br /&gt;Reading state information... Done&lt;br /&gt;The following NEW packages will be installed&lt;br /&gt;bluez-btsco&lt;br /&gt;0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.&lt;br /&gt;Need to get 17.0kB of archives.&lt;br /&gt;After unpacking 77.8kB of additional disk space will be used.&lt;br /&gt;Get: 1 http://gb.archive.ubuntu.com edgy/universe bluez-btsco 1:0.42-0ubuntu1 [17.0kB]&lt;br /&gt;Fetched 17.0kB in 0s (60.5kB/s)&lt;br /&gt;Selecting previously deselected package bluez-btsco.&lt;br /&gt;(Reading database ... 83451 files and directories currently installed.)&lt;br /&gt;Unpacking bluez-btsco (from .../bluez-btsco_1%3a0.42-0ubuntu1_i386.deb) ...&lt;br /&gt;Setting up bluez-btsco (0.42-0ubuntu1) ... &lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Load Kernel Module for btsco&lt;br /&gt;&lt;pre&gt;sudo modprobe snd-bt-sco&lt;/pre&gt;&lt;a href="https://help.ubuntu.com/community/BluetoothSkype"&gt;https://help.ubuntu.com/community/BluetoothSkype&lt;/a&gt;&lt;br /&gt;to load it permanently add it to /etc/modules, just write approriate module name at the end of the File.&lt;pre&gt;sudo vi /etc/modules&lt;br /&gt;# /etc/modules: kernel modules to load at boot time.&lt;br /&gt;#&lt;br /&gt;# This file contains the names of kernel modules that should be loaded&lt;br /&gt;# at boot time, one per line. Lines beginning with "#" are ignored.&lt;br /&gt;&lt;br /&gt;lp&lt;br /&gt;psmouse&lt;br /&gt;snd-bt-sco&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;install gnome-bluetooth, obex-server&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=34740"&gt;http://ubuntuforums.org/showthread.php?t=34740&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;karen@tom-1300:~$ sudo apt-get install gnome-bluetooth&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree&lt;br /&gt;Reading state information... Done&lt;br /&gt;The following NEW packages will be installed&lt;br /&gt;gnome-bluetooth&lt;br /&gt;0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.&lt;br /&gt;Need to get 194kB of archives.&lt;br /&gt;After unpacking 954kB of additional disk space will be used.&lt;br /&gt;Get: 1 http://gb.archive.ubuntu.com edgy/universe gnome-bluetooth 0.8.0-0ubuntu1 [194kB]&lt;br /&gt;Fetched 194kB in 1s (111kB/s)&lt;br /&gt;Selecting previously deselected package gnome-bluetooth.&lt;br /&gt;(Reading database ... 83459 files and directories currently installed.)&lt;br /&gt;Unpacking gnome-bluetooth (from .../gnome-bluetooth_0.8.0-0ubuntu1_i386.deb) ...&lt;br /&gt;Setting up gnome-bluetooth (0.8.0-0ubuntu1) ...&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;check for l2cap and rfcomm via dmesg&lt;br /&gt;&lt;pre&gt;[17179615.032000] Bluetooth: L2CAP ver 2.8&lt;br /&gt;[17179615.032000] Bluetooth: L2CAP socket layer initialized&lt;br /&gt;[17179615.156000] Bluetooth: HIDP (Human Interface Emulation) ver 1.1-mh1&lt;br /&gt;[17179615.184000] Bluetooth: RFCOMM socket layer initialized&lt;br /&gt;[17179615.184000] Bluetooth: RFCOMM TTY layer initialized&lt;br /&gt;[17179615.184000] Bluetooth: RFCOMM ver 1.7&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;bring the Bluetooth network interface up&lt;br /&gt;&lt;pre&gt;karen@tom-1300:~$ sudo hciconfig hci0 up&lt;br /&gt;karen@tom-1300:~$ hciconfig&lt;br /&gt;hci0:   Type: USB&lt;br /&gt;BD Address: 00:0B:0D:33:79:35 ACL MTU: 120:20 SCO MTU: 64:8&lt;br /&gt;UP RUNNING PSCAN ISCAN&lt;br /&gt;RX bytes:822 acl:0 sco:0 events:61 errors:0&lt;br /&gt;TX bytes:522 acl:0 sco:0 commands:39 errors:0&lt;br /&gt;karen@tom-1300:~$ hcitool scan&lt;br /&gt;Scanning ...&lt;br /&gt;00:12:62:CB:25:A6       K nokia&lt;br /&gt;00:03:89:44:07:5F       M3000 by Plantronics&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Edit your /etc/bluetooth/rfcomm.conf&lt;br /&gt;&lt;pre&gt;sudo vi /etc/bluetooth/rfcomm.conf&lt;br /&gt;&lt;br /&gt;#rfcomm0 {&lt;br /&gt;#       # Automatically bind the device at startup&lt;br /&gt;#       bind no;&lt;br /&gt;#&lt;br /&gt;#       # Bluetooth address of the device&lt;br /&gt;#       device 11:22:33:44:55:66;&lt;br /&gt;#&lt;br /&gt;#       # RFCOMM channel for the connection&lt;br /&gt;#       channel 1;&lt;br /&gt;#&lt;br /&gt;#       # Description of the connection&lt;br /&gt;#       comment "Example Bluetooth device";&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;rfcomm0 {&lt;br /&gt;device 00:12:62:CB:25:A6;&lt;br /&gt;channel 10;&lt;br /&gt;comment "Karen's Phone";&lt;br /&gt;}&lt;br /&gt;karen@tom-1300:/$ sudo sdptool add --channel=10 OPUSH&lt;br /&gt;OBEX Object Push service registered&lt;br /&gt;karen@tom-1300:/$ sudo rfcomm bind /dev/rfcomm0 00:12:62:cb:25:a6 10&lt;br /&gt;karen@tom-1300:/$&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;get gnome passkey applet&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=225703&amp;page=2"&gt;http://ubuntuforums.org/showthread.php?t=225703&amp;amp;page=2&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;karen@tom-1300:/etc/bluetooth$ sudo apt-get install bluez-passkey-gnome&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree&lt;br /&gt;Reading state information... Done&lt;br /&gt;The following NEW packages will be installed&lt;br /&gt;bluez-passkey-gnome&lt;br /&gt;0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.&lt;br /&gt;Need to get 14.6kB of archives.&lt;br /&gt;After unpacking 106kB of additional disk space will be used.&lt;br /&gt;Get: 1 http://gb.archive.ubuntu.com edgy/main bluez-passkey-gnome 0.5-2ubuntu2 [14.6kB]&lt;br /&gt;Fetched 14.6kB in 0s (59.4kB/s)&lt;br /&gt;Selecting previously deselected package bluez-passkey-gnome.&lt;br /&gt;(Reading database ... 88545 files and directories currently installed.)&lt;br /&gt;Unpacking bluez-passkey-gnome (from .../bluez-passkey-gnome_0.5-2ubuntu2_i386.deb) ...&lt;br /&gt;Setting up bluez-passkey-gnome (0.5-2ubuntu2) ...&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;pair with headset&lt;br /&gt;&lt;pre&gt;put headset in discovery mode (hold down volume up and call button till red/green light flashes)&lt;br /&gt;sudo hcitool cc 00:03:89:44:07:5F&lt;/pre&gt;&lt;pre&gt;karen@tom-1300:~$ sudo btsco -v 00:03:89:44:07:5F&lt;br /&gt;btsco v0.42&lt;br /&gt;Device is 1:0&lt;br /&gt;Voice setting: 0x0060&lt;br /&gt;RFCOMM channel 1 connected&lt;br /&gt;Using interface hci0&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-116285771837076543?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/116285771837076543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=116285771837076543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116285771837076543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116285771837076543'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/11/ubuntu-installing-bluetooth-to-use.html' title='ubuntu - installing bluetooth to use headset with skype'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-116284930172762910</id><published>2006-11-06T13:40:00.000-08:00</published><updated>2006-11-06T13:50:06.840-08:00</updated><title type='text'>Skype for Ubuntu</title><content type='html'>Installed skype.  Fantastic, took a few minutes and worked first time!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ubuntuguide.org/wiki/Ubuntu_Edgy#How_to_install_Messenger_.28Skype.29"&gt;http://ubuntuguide.org/wiki/Ubuntu_Edgy#How_to_install_Messenger_.28Skype.29&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;With Edgy the Skype is not included in the Ubuntu repositories anymore. &lt;/li&gt;&lt;/ul&gt; &lt;pre&gt;sudo apt-get install libqt3-mt&lt;br /&gt;wget &lt;a href="http://www.skype.com/go/getskype-linux-deb" class="external free" title="http://www.skype.com/go/getskype-linux-deb" rel="nofollow"&gt;http://www.skype.com/go/getskype-linux-deb&lt;/a&gt;&lt;br /&gt;sudo dpkg -i skype_debian-*.deb&lt;br /&gt;&lt;/pre&gt; &lt;ul&gt;&lt;li&gt;To run "Applications &gt; Internet &gt; Skype".&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-116284930172762910?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/116284930172762910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=116284930172762910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116284930172762910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116284930172762910'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/11/skype-for-ubuntu.html' title='Skype for Ubuntu'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-116251046567911002</id><published>2006-11-02T15:33:00.000-08:00</published><updated>2006-11-02T15:34:25.683-08:00</updated><title type='text'>VNC</title><content type='html'>&lt;h1&gt;Using VNC on Windows&lt;/h1&gt; &lt;h2&gt;Setup&lt;/h2&gt; &lt;p&gt;Setting up the programs to connect to a VNC server is not too difficult. You will, however, need to download two programs: a SSH client and a VNC client. The SSH client will make a secure connection between your computer and the VNC server and the VNC client will use this connection to draw a display on your screen. &lt;/p&gt;  &lt;h3&gt;Download and install a SSH client&lt;/h3&gt; &lt;p&gt;In order to use VNC with your SSH client, your SSH client must provide port forwarding. Both Putty and Teraterm Pro will work. (Note: Putty only added this functionality recently, so if you have an old version you will want to upgrade.)&lt;/p&gt; &lt;p&gt;We have installation instructions for a SSH client available at  &lt;a href="http://www.cs.vassar.edu/SysNews/ssh/windows.html"&gt;http://www.cs.vassar.edu/SysNews/ssh/windows.html&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Download and install a VNC client&lt;/h3&gt; &lt;p&gt;We recommend using &lt;a href="http://www.tightvnc.com/"&gt;TightVNC&lt;/a&gt; as your VNC client because it comes with several features over the &lt;a href="http://www.uk.research.att.com/vnc/download.html"&gt;official VNC client&lt;/a&gt;. TightVNC uses a "tight" encoding by default which efficiently compresses the information which updates your display. &lt;/p&gt;  &lt;ol&gt;&lt;li&gt;Download the TightVNC Viewer binary for Windows from the TightVNC download page: &lt;a href="http://www.tightvnc.com/download.html"&gt;http://www.tightvnc.com/download.html&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Open the downloaded TightVNC Viewer archive. It will create a new folder with the vncviewer program inside.&lt;/li&gt;&lt;/ol&gt;   &lt;h2&gt;Connecting&lt;/h2&gt; &lt;p&gt;Every time you want to make a VNC connection, you must forward a port with your SSH client and then open a session with your VNC client.&lt;/p&gt; &lt;h3&gt;Port Forwarding - Putty&lt;/h3&gt; &lt;ol&gt;&lt;li&gt;Run PuTTY. &lt;/li&gt;&lt;li&gt;In "Basic options for your Putty Session", enter the host name, &lt;code&gt;vnc.cs.vassar.edu&lt;/code&gt;, and choose the "SSH" protocol. Do not "Open" this connection just yet.&lt;/li&gt;&lt;li&gt;On the left, find and select the category "Connection - SSH - Tunnels".&lt;/li&gt;&lt;li&gt;In the section "Add new forwarded port:", set the "Source Port" to &lt;code&gt;5901&lt;/code&gt; and set the "Destination" to &lt;code&gt;vnc.cs.vassar.edu:5995&lt;/code&gt;. Choose "Local" for this connection if it is not already the default, and click "Add".  &lt;/li&gt;&lt;li&gt;Open the connection and log in. Leaving PuTTY open, start a VNC session.  &lt;/li&gt;&lt;/ol&gt;  &lt;h3&gt;Port Forwarding - Teraterm&lt;/h3&gt; &lt;ol&gt;&lt;li&gt;Open Teraterm Pro by running &lt;code&gt;ttssh&lt;/code&gt;. Teraterm will ask you to make a new connection. Hit "Cancel".&lt;/li&gt;&lt;li&gt;Select "SSH Forwarding..." from the "Setup" menu.&lt;/li&gt;&lt;li&gt;Click "Add" and fill in "Forward local port '5901' to remote machine 'vnc.cs.vassar.edu' port '5995'".&lt;/li&gt;&lt;li&gt;Choose 'Ok' to get back to the main, blank, Teraterm window. &lt;/li&gt;&lt;li&gt;Choose "New Connection" from the "File" menu. Connect to host 'vnc.cs.vassar.edu' using the 'SSH' service.&lt;/li&gt;&lt;li&gt;Leave Teraterm open and start a VNC session according to the next session. (It's fine to minimize Teraterm, of course.) &lt;/li&gt;&lt;/ol&gt;  &lt;h3&gt;VNC Session&lt;/h3&gt; &lt;ol&gt;&lt;li&gt;Run the VNC client, vncviewer. &lt;/li&gt;&lt;li&gt;Enter &lt;code&gt;localhost:1&lt;/code&gt; for the vnc server to connect with.&lt;/li&gt;&lt;li&gt;A graphical login screen should appear. Log in and start work.&lt;/li&gt;&lt;li&gt;When you are finished, just log out of your Unix session as you normally would, close the VNC client program, and exit from your SSH session. &lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-116251046567911002?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/116251046567911002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=116251046567911002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116251046567911002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116251046567911002'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/11/vnc.html' title='VNC'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-116251043159946876</id><published>2006-10-25T23:32:00.000-07:00</published><updated>2006-11-02T15:33:51.610-08:00</updated><title type='text'>Ubuntu Edgy</title><content type='html'>Installed Ubuntu Edgy on home desktop. This is great! So far I am enjoying it and seriously considering the whole shabang as an alternative to XP. Need to keep microsoft alive for the sake of software though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-116251043159946876?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/116251043159946876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=116251043159946876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116251043159946876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/116251043159946876'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/10/ubuntu-edgy.html' title='Ubuntu Edgy'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115857773843387038</id><published>2006-09-18T03:34:00.000-07:00</published><updated>2006-09-18T04:23:01.620-07:00</updated><title type='text'>adduser / useradd</title><content type='html'>&lt;pre&gt;useradd&lt;br /&gt;[-c comment] &lt;br /&gt;[-d home_dir]&lt;br /&gt;[-e expire_date] &lt;br /&gt;[-f inactive_time]&lt;br /&gt;[-g initial_group] &lt;br /&gt;[-G group[,...]]&lt;br /&gt;[-m [-k skeleton_dir] | -M] &lt;br /&gt;[-p passwd]&lt;br /&gt;[-s shell] &lt;br /&gt;[-u uid [ -o]] [-n] [-r] &lt;br /&gt;login useradd&lt;br /&gt;-D [-g default_group] &lt;br /&gt;[-b default_home]&lt;br /&gt;[-f default_inactive] &lt;br /&gt;[-e default_expire_date]&lt;br /&gt;[-s default_shell]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt; Adding a user using a comment also selecting the uid, gid, shell &amp; home directory.&lt;br /&gt;&lt;pre&gt;useradd -c example_user -u 600 -g 501 -s /bin/bash -d /export/home/newuser newuser&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Description - Creating New Users&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;When invoked without the -D option, the useradd command creates a new user account using the values specified on the command line and the default values from the system. The new user account will be entered into the system files as needed, the home directory will be created, and initial files copied, depending on the command line options. The version provided with Red Hat Linux will create a group for each user added to the system, unless -n option is given. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;The options which apply to the useradd command are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;-c comment: &lt;br /&gt;  The new user's password file comment field.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-d home_dir: The new user will be created using home_dir as the value for the user's login directory. The default is to append the login name to default_home and use that as the login directory name.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-e expire_date: The date on which the user account will be disabled. The date is specified in the format YYYY-MM-DD.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-f inactive_days: The number of days after a password expires until the account is permanently disabled. A value of 0 disables the account as soon as the password has expired, and a value of -1 disables the feature. The default value is -1.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-g initial_group: The group name or number of the user's initial login group. The group name must exist. A group number must refer to an already existing group. The default group number is 1.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-G group,[...]: A list of supplementary groups which the user is also a member of. Each group is separated from the next by a comma, with no intervening whitespace. The groups are subject to the same restrictions as the group given with the -g     option. The default is for the user to belong only to the initial group.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-m: The user's home directory will be created if it does not exist. The files contained in skeleton_dir will be copied to the home directory if the -k option is used, otherwise the files contained in /etc/skel will be used instead. Any directories contained in skeleton_dir or /etc/skel will be created in the user's home directory as well. The -k option is only valid in conjunction with the -m option. The default is to not create the directory and to not copy any files. &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-M: The user home directory will not be created, even if the system wide settings from /etc/login.defs is to create home dirs.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-n: A group having the same name as the user being added to the system will be created by default. This option will turn off this Red Hat Linux specific behavior.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-r: This flag is used to create a system account. That is, a user with a UID lower than the value of UID_MIN defined in /etc/login.defs and whose password does not expire. Note that useradd will not create a home directory for such an user,    regardless of the default setting in /etc/login.defs. You have to specify -m option if you want a home directory for a system account to be created. This is an option added by Red Hat.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-p passwd: The encrypted password, as returned by crypt(3). The default is to disable the account.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-s shell: The name of the user's login shell. The default is to leave this field blank, which causes the system to select the default login shell.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;-u uid: The numerical value of the user's ID. This value must be unique, unless the -o option is used. The value must be non-negative. The default is to use the smallest ID value greater than 99 and greater than every other user. Values between 0 and 99 are typically reserved for system accounts. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115857773843387038?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115857773843387038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115857773843387038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115857773843387038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115857773843387038'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/adduser-useradd.html' title='adduser / useradd'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115857056182405492</id><published>2006-09-18T02:04:00.000-07:00</published><updated>2006-09-18T05:02:21.416-07:00</updated><title type='text'>Sender Verify for Receiving Email</title><content type='html'>In order to restrict the quantity of bogus and spam messages our server requires that every inbound mail message be sent from an email address which can be verified as genuine. If the server is unable to send an email (or a bounce message) back to the address that the message appears to come from, the message will not be accepted and therefore not delivered. &lt;p&gt; If you receive complaints that email messages are being rejected by the server, and the error message mentions sender verification, please ask them to contact their mail administrator (e.g. the postmaster) to ask them to follow this up and suggest they read the text below. Also if the sender is unable to receive mail, for example if their account isn't working or is temporarily down or over quota, they won't be able to send you mail if sender verify is enabled.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;To check rejected messages for a particular user run:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;root@server30013 [~]# grep -inw 'sender verify'&lt;br /&gt;/var/log/exim_mainlog | grep 'chris@pim-uk.com'&lt;/pre&gt; &lt;p&gt;&lt;/p&gt;      &lt;h3&gt;     Technical notes for mailserver adminstrators &lt;/h3&gt;   &lt;p&gt; To verify a message's sender address, our mailhub will attempt the following... &lt;/p&gt; &lt;ul&gt; &lt;li&gt;      check that the header is syntactically correct     &lt;/li&gt;&lt;li&gt;      attempt to find a mailserver for the domain part of the sender address (based on either MX or A records)     &lt;/li&gt;&lt;li&gt;      open an SMTP connection to that server     &lt;/li&gt;&lt;li&gt;      send the following: &lt;pre&gt;&lt;samp&gt;HELO &lt;em&gt;our-server-name&lt;/em&gt;&lt;/samp&gt;&lt;br /&gt;wait for success response&lt;samp&gt;&lt;br /&gt;MAIL FROM: &lt;&gt;&lt;br /&gt;&lt;/samp&gt;wait for success response&lt;samp&gt;&lt;br /&gt;RCPT TO: &lt;em&gt;sender-address-from-your-message&lt;/em&gt;&lt;br /&gt;&lt;/samp&gt;wait for success response&lt;samp&gt;&lt;br /&gt;QUIT&lt;/samp&gt;&lt;/pre&gt;     &lt;/li&gt; &lt;/ul&gt;  If any step fails, the message will be rejected.   &lt;p&gt; Note that the dummy mail is sent as if it were a bounce receipt, thereby testing whether a bounce message is deliverable to that address. &lt;/p&gt;   &lt;p&gt; If your server does not allow bounce receipts, it is not functioning correctly.&lt;br /&gt;Please read &lt;a href="http://www.faqs.org/rfcs/rfc2821.html"&gt;RFC2821&lt;/a&gt; (in particular, sections 4.1.1.2 and 3.7) and ensure that your mailserver complies with the RFCs before complaining to us. &lt;/p&gt;   &lt;p&gt; If you are certain that your mailserver is behaving correctly, please email me &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="mailto:postmaster@brighton.ac.uk"&gt;&lt;/a&gt;with a detailed fault report, including the full text of the bounce message and its full SMTP headers.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;In the future I will setup a postmaster address which will not be sender-verified so you may be certain that your report will arrive unchecked.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115857056182405492?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115857056182405492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115857056182405492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115857056182405492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115857056182405492'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/sender-verify-for-receiving-email.html' title='Sender Verify for Receiving Email'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115853749004106882</id><published>2006-09-17T16:52:00.000-07:00</published><updated>2006-09-17T16:58:10.040-07:00</updated><title type='text'>Compress Log File Shell Script</title><content type='html'>To save space but retain logfile data, copy and compress logfiles and start again at 0. You could setup a cron job to do this monthly, etc. Or add a check on the size and only process this warranted. If necessary you may want to implement log rotation (see savelog or logrotate).  This may already be implemented in FC5.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;mv /var/log/messages /var/log/messages-backup&lt;br /&gt;cp /dev/null /var/log/messages //truncate file to zero bytes&lt;br /&gt;CURDATE='date + "%m%d%y"'&lt;br /&gt;mv /var/log/messages-backup /var/log/messages-$CURDATE&lt;br /&gt;gzip /var/log/messages-$CURDATE&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115853749004106882?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115853749004106882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115853749004106882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853749004106882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853749004106882'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/compress-log-file-shell-script.html' title='Compress Log File Shell Script'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115853703509695911</id><published>2006-09-17T16:49:00.000-07:00</published><updated>2006-09-17T16:50:35.096-07:00</updated><title type='text'>/var/log/lastlog (finger)</title><content type='html'>/var/log/lastlog is similar to /var/log/wtmp and is used by finger (e.g.) to determine when a user was last logged on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115853703509695911?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115853703509695911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115853703509695911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853703509695911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853703509695911'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/varloglastlog-finger.html' title='/var/log/lastlog (finger)'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115853696043972030</id><published>2006-09-17T16:47:00.000-07:00</published><updated>2006-09-17T16:49:20.440-07:00</updated><title type='text'>/var/run/utmp (w, who, finger)</title><content type='html'>/var/run/utmp contains binary data on users currently logged into the system. Data is access by commands such as 'w', 'who' and 'finger'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115853696043972030?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115853696043972030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115853696043972030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853696043972030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853696043972030'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/varrunutmp-w-who-finger.html' title='/var/run/utmp (w, who, finger)'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115853673672985825</id><published>2006-09-17T16:44:00.000-07:00</published><updated>2006-09-17T16:49:38.236-07:00</updated><title type='text'>/var/log/wtmp (last)</title><content type='html'>/var/log/wtmp contains binary data indicating login times and duration for each user on the system. It is used by the 'last' command to generate a listing of user logins.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115853673672985825?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115853673672985825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115853673672985825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853673672985825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853673672985825'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/varlogwtmp-last.html' title='/var/log/wtmp (last)'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115853442143340297</id><published>2006-09-17T15:05:00.000-07:00</published><updated>2006-09-19T07:22:32.556-07:00</updated><title type='text'>Hacker IPs</title><content type='html'>/var/log/secure&lt;br /&gt;&lt;br /&gt;83.170.78.93 - logname= uid=0 euid=0 tty=ssh ruser= rhost=raq621.uk2.net&lt;br /&gt;first: Sep 17 04:29:47 server30013&lt;br /&gt;last: Sep 17 23:50:40 server30013&lt;br /&gt;name: Oscar Sanderson&lt;br /&gt;email: osanderson@gmail.com&lt;br /&gt;address: 1 Central Beach, Lytham, Lancashire FY8 5LB&lt;br /&gt;domains:&lt;table class="search_results" style="width: 100%;" cellspacing="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="num"&gt;1. &lt;/td&gt;&lt;td class="result_data"&gt;&lt;a href="http://www.domaintools.com/cooksnightoff.com"&gt;cooksnightoff.com&lt;/a&gt;&lt;/td&gt;&lt;td class="c"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="c"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td class="num"&gt;2. &lt;/td&gt;&lt;td class="result_data"&gt;&lt;a href="http://www.domaintools.com/ikelo.com"&gt;ikelo.com&lt;/a&gt;&lt;/td&gt;&lt;td class="c"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="c"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="num"&gt;3. &lt;/td&gt;&lt;td class="result_data"&gt;&lt;a href="http://www.domaintools.com/naomei.com"&gt;naomei.com&lt;/a&gt;&lt;/td&gt;&lt;td class="c"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="c"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td class="num"&gt;4. &lt;/td&gt;&lt;td class="result_data"&gt;&lt;a href="http://www.domaintools.com/stoned-software.com"&gt;stoned-software.com&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;218.204.241.252 -&lt;br /&gt; first:  Sep 18 16:53:39&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115853442143340297?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115853442143340297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115853442143340297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853442143340297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853442143340297'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/hacker-ips.html' title='Hacker IPs'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115853041748446962</id><published>2006-09-17T14:59:00.000-07:00</published><updated>2006-09-17T16:44:19.636-07:00</updated><title type='text'>Log Files - syslogd.conf</title><content type='html'>/etc/syslog.conf details what and where &lt;br /&gt;&lt;br /&gt;# Log all kernel messages to the console.&lt;br /&gt;# Logging much else clutters up the screen.&lt;br /&gt;#kern.*                                                 /dev/console&lt;br /&gt;&lt;br /&gt;# Log anything (except mail) of level info or higher.&lt;br /&gt;# Don't log private authentication messages!&lt;br /&gt;*.info;mail.none;authpriv.none;cron.none                /var/log/messages&lt;br /&gt;&lt;br /&gt;# The authpriv file has restricted access.&lt;br /&gt;authpriv.*                                              /var/log/secure&lt;br /&gt;&lt;br /&gt;# Log all the mail messages in one place.&lt;br /&gt;local0.notice;local0.debug;mail.*;mail.none;mail.info;local0.info /var/log/maillog&lt;br /&gt;&lt;br /&gt;# Log cron stuff&lt;br /&gt;cron.*                                                  /var/log/cron&lt;br /&gt;&lt;br /&gt;# Everybody gets emergency messages&lt;br /&gt;*.emerg                                                 *&lt;br /&gt;&lt;br /&gt;# Save news errors of level crit and higher in a special file.&lt;br /&gt;uucp,news.crit                                          /var/log/spooler&lt;br /&gt;&lt;br /&gt;# Save boot messages also to boot.log&lt;br /&gt;local7.*                                                /var/log/boot.log&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115853041748446962?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115853041748446962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115853041748446962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853041748446962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115853041748446962'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/log-files-syslogdconf.html' title='Log Files - syslogd.conf'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115830335954803910</id><published>2006-09-14T23:55:00.000-07:00</published><updated>2006-09-17T14:49:36.506-07:00</updated><title type='text'>Cpanel Hackcheck</title><content type='html'>IMPORTANT: Do not ignore this email.&lt;br /&gt;This message is to inform you that the rpm&lt;br /&gt;package findutils did not match the expected checksum.  This could mean that&lt;br /&gt;your system was compromised (OwN3D). The offending files have been removed&lt;br /&gt;and replaced with the OS default.  To be safe you should verify that your&lt;br /&gt;system has not be compromised.&lt;br /&gt;&lt;br /&gt;Does this entry in &lt;pre&gt;/var/logs/chksrvd.log&lt;/pre&gt; correspond to the above email?&lt;br /&gt;&lt;pre&gt;[Fri Sep 15 18:55:34 2006] Service check ....cpsrvd [-Notification =&gt; karen.archer@gmail.com via EMAIL [level =&gt; 3]&lt;br /&gt;Restarting cpsrvd....&lt;br /&gt;system: /usr/local/cpanel/etc/init/safekill cpsrvd&lt;br /&gt;system: /usr/local/cpanel/etc/init/safekill webmaild&lt;br /&gt;system: /usr/local/cpanel/etc/init/safekill cpaneld&lt;br /&gt;system: /usr/local/cpanel/cpsrvd&lt;br /&gt;]...Done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Modified Files:&lt;br /&gt;S.?......   /usr/bin/find&lt;br /&gt;S.?......   /usr/bin/xargs&lt;br /&gt;&lt;br /&gt;History of Support Activity:&lt;br /&gt;&lt;pre&gt;276  w&lt;br /&gt;277  rpm -qf /usr/bin/find&lt;br /&gt;278  rpm -V findutils&lt;br /&gt;279  rpm -qf /usr/bin/xargs&lt;br /&gt;280  rpm -V xargs&lt;br /&gt;281  ls -alhd /usr/bin/find&lt;br /&gt;282  cat /etc/redhat-release&lt;br /&gt;283  rpm -qf /usr/bin/find /usr/bin/xargs&lt;br /&gt;284  rpm -V findutils-4.2.27-4&lt;br /&gt;285  whereis rpm&lt;br /&gt;286  rpm -V /bin/rpm&lt;br /&gt;287  rpm -qf /bin/rpm&lt;br /&gt;288  rpm -V rpm&lt;br /&gt;289  less /scripts/hackcheck&lt;br /&gt;290  less /scripts/hackcheck&lt;br /&gt;291  rpm -V&lt;br /&gt;292  rpm -V all&lt;br /&gt;293  rpm -V&lt;br /&gt;294  w&lt;br /&gt;295  exit&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;chkRootKit&lt;/h2&gt;&lt;pre&gt;root@server30013 [/usr/local/bin]# rpm -qpl chkrootkit-0.46a-2.fc5.i386.rpm&lt;br /&gt;warning: chkrootkit-0.46a-2.fc5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1ac70ce6&lt;br /&gt;/etc/pam.d/chkrootkit&lt;br /&gt;/etc/security/console.apps/chkrootkit&lt;br /&gt;/usr/bin/chkrootkit&lt;br /&gt;/usr/bin/chkrootkitX&lt;br /&gt;/usr/lib/chkrootkit-0.46a&lt;br /&gt;/usr/lib/chkrootkit-0.46a/check_wtmpx&lt;br /&gt;/usr/lib/chkrootkit-0.46a/chkdirs&lt;br /&gt;/usr/lib/chkrootkit-0.46a/chklastlog&lt;br /&gt;/usr/lib/chkrootkit-0.46a/chkproc&lt;br /&gt;/usr/lib/chkrootkit-0.46a/chkrootkit&lt;br /&gt;/usr/lib/chkrootkit-0.46a/chkutmp&lt;br /&gt;/usr/lib/chkrootkit-0.46a/chkwtmp&lt;br /&gt;/usr/lib/chkrootkit-0.46a/ifpromisc&lt;br /&gt;/usr/lib/chkrootkit-0.46a/strings&lt;br /&gt;/usr/lib/chkrootkit-0.46a/strings-static&lt;br /&gt;/usr/sbin/chkrootkit&lt;br /&gt;/usr/share/applications/fedora-chkrootkit.desktop&lt;br /&gt;/usr/share/doc/chkrootkit-0.46a&lt;br /&gt;/usr/share/doc/chkrootkit-0.46a/ACKNOWLEDGMENTS&lt;br /&gt;/usr/share/doc/chkrootkit-0.46a/COPYRIGHT&lt;br /&gt;/usr/share/doc/chkrootkit-0.46a/README&lt;br /&gt;/usr/share/doc/chkrootkit-0.46a/README.chklastlog&lt;br /&gt;/usr/share/doc/chkrootkit-0.46a/README.chkwtmp&lt;br /&gt;/usr/share/doc/chkrootkit-0.46a/chkrootkit.lsm&lt;br /&gt;/usr/share/pixmaps/chkrootkit.png &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Output:&lt;br /&gt;Checking `bindshell'... INFECTED (PORTS:  465)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Important Note: &lt;/strong&gt;If you see 'Checking `bindshell'... INFECTED (PORTS:  465)' read on.&lt;br /&gt;&lt;strong&gt;I'm running PortSentry/klaxon. What's wrong with the bindshell test? &lt;/strong&gt;&lt;br /&gt;If you're running PortSentry/klaxon or another program that binds itself to unused ports probably chkrootkit will give you a &lt;strong&gt;false positive &lt;/strong&gt;on&lt;br /&gt;the bindshell test (ports 114/tcp, 465/tcp, 511/tcp, 1008/tcp,&lt;br /&gt;1524/tcp, 1999/tcp, 3879/tcp, 4369/tcp, 5665/tcp, 10008/tcp, 12321/tcp,&lt;br /&gt;23132/tcp, 27374/tcp, 29364/tcp, 31336/tcp, 31337/tcp, 45454/tcp,&lt;br /&gt;47017/tcp, 47889/tcp, 60001/tcp).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115830335954803910?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115830335954803910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115830335954803910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115830335954803910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115830335954803910'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/cpanel-hackcheck.html' title='Cpanel Hackcheck'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115827230765004878</id><published>2006-09-14T15:15:00.000-07:00</published><updated>2006-09-14T15:18:27.696-07:00</updated><title type='text'>Beginners Guide to VI Editor</title><content type='html'>&lt;p&gt;&lt;a href="http://www.eng.hawaii.edu/Tutor/vi.html#intro"&gt;http://www.eng.hawaii.edu/Tutor/vi.html&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;&lt;a name="start"&gt;&lt;/a&gt;&lt;/h2&gt; &lt;h2&gt;&lt;a name="start"&gt;Starting the VI Editor&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt;The VI editor lets a user create new files or edit existing files. The command to start the VI editor is &lt;tt&gt;vi&lt;/tt&gt;, followed by the filename. For example to edit a file called &lt;i&gt;temporary&lt;/i&gt;, you would type &lt;tt&gt;vi temporary &lt;/tt&gt;and then return. You can start VI without a filename, but when you want to save your work, you will have to tell VI which filename to save it into later. &lt;/p&gt; &lt;p&gt; When you start VI for the first time, you will see a screen filled with tildes (A tilde looks like this: ~) on the left side of the screen. Any blank lines beyond the end of the file are shown this way. At the bottom of your screen, the filename should be shown, if you specified an existing file, and the size of the file will be shown as well, like this:&lt;br /&gt;&lt;/p&gt; &lt;pre&gt;"filename" 21 lines, 385 characters&lt;br /&gt;&lt;/pre&gt;  If the file you specified does not exist, then it will tell you that it is a new file, like this:&lt;br /&gt;&lt;pre&gt;"newfile" [New file]&lt;br /&gt;&lt;/pre&gt; If you started VI without a filename, the bottom line of the screen will just be blank when VI starts. If the screen does not show you these expected results, your terminal type may be set wrong. Just type &lt;tt&gt;:q&lt;/tt&gt; and return to get out of VI, and &lt;a href="http://www.eng.hawaii.edu/Tutor/vi.html#before"&gt;fix your terminal type&lt;/a&gt;. If you don't know how, ask a lab monitor.   &lt;h2&gt;&lt;a name="quit"&gt;Getting Out of VI&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; Now that you know how to get into VI, it would be a good idea to know how to get out of it. The VI editor has &lt;a href="http://www.eng.hawaii.edu/Tutor/vi.html#modes"&gt;two modes&lt;/a&gt; and in order to get out of VI, you have to be in &lt;i&gt;command&lt;/i&gt; mode.  Hit the key labeled "&lt;b&gt;Escape&lt;/b&gt;" or "&lt;b&gt;Esc&lt;/b&gt;" (If your terminal does not have such a key, then try ^[, or control-[.) to get into &lt;i&gt;command&lt;/i&gt; mode. If you were already in the command mode when you hit "&lt;b&gt;Escape&lt;/b&gt;", don't worry. It might beep, but you will still be in the &lt;i&gt;command&lt;/i&gt; mode. &lt;/p&gt;   &lt;p&gt; The command to quit out of VI is &lt;tt&gt;:q&lt;/tt&gt;. Once in &lt;i&gt;command&lt;/i&gt; mode, type colon, and 'q', followed by return. If your file has been modified in any way, the editor will warn you of this, and not let you quit. To ignore this message, the command to quit out of VI without saving is &lt;tt&gt;:q!&lt;/tt&gt;. This lets you exit VI without saving any of the changes. &lt;/p&gt;   &lt;p&gt; Of course, normally in an editor, you would want to save the changes you have made. The command to save the contents of the editor is &lt;tt&gt;:w&lt;/tt&gt;. You can combine the above command with the quit command, or &lt;tt&gt;:wq&lt;/tt&gt;. You can specify a different file name to save to by specifying the name after the &lt;tt&gt;:w&lt;/tt&gt;. For example, if you wanted to save the file you were working as another filename called &lt;i&gt;filename2&lt;/i&gt;, you would type: &lt;tt&gt;w filename2&lt;/tt&gt; and return. &lt;/p&gt;   &lt;p&gt; Another way to save your changes and exit out of VI is the &lt;tt&gt;ZZ&lt;/tt&gt; command. When in &lt;i&gt;command&lt;/i&gt; mode, type &lt;tt&gt;ZZ&lt;/tt&gt; and it will do the equivalent of &lt;tt&gt;:wq&lt;/tt&gt;. If any changes were made to the file, it will be saved. This is the easiest way to leave the editor, with only two keystrokes. &lt;/p&gt;   &lt;h2&gt;&lt;a name="modes"&gt;The Two Modes of VI&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; The first thing most users learn about the VI editor is that it has two modes: &lt;i&gt;command&lt;/i&gt; and &lt;i&gt;insert&lt;/i&gt;. The &lt;i&gt;command&lt;/i&gt; mode allows the entry of commands to manipulate text. These commands are usually one or two characters long, and can be entered with few keystrokes. The &lt;i&gt;insert&lt;/i&gt; mode puts anything typed on the keyboard into the current file. &lt;/p&gt;   &lt;p&gt; VI starts out in &lt;i&gt;command&lt;/i&gt; mode. There are several commands that put the VI editor into &lt;i&gt;insert&lt;/i&gt; mode. The most commonly used commands to get into insert mode are &lt;tt&gt;a&lt;/tt&gt; and &lt;tt&gt;i&lt;/tt&gt;. These two commands are described below. Once you are in &lt;i&gt;insert&lt;/i&gt; mode, you get out of it by hitting the &lt;b&gt;escape&lt;/b&gt; key. If your terminal does not have an &lt;b&gt;escape&lt;/b&gt; key, ^[ should work (control-[). You can hit escape two times in a row and VI would definitely be in &lt;i&gt;command&lt;/i&gt; mode. Hitting &lt;b&gt;escape&lt;/b&gt; while you are already in &lt;i&gt;command&lt;/i&gt; mode doesn't take the editor out of &lt;i&gt;command&lt;/i&gt; mode. It may beep to tell you that you are already in that mode. &lt;/p&gt;   &lt;h2&gt;&lt;a name="commands"&gt;How to Type Commands in Command Mode&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; The command mode commands are normally in this format: (Optional arguments are given in the brackets)&lt;br /&gt;&lt;/p&gt; &lt;ul&gt; &lt;tt&gt;[&lt;i&gt;count&lt;/i&gt;] command [&lt;i&gt;where&lt;/i&gt;]&lt;/tt&gt; &lt;/ul&gt; Most commands are one character long, including those which use control characters. The commands described in this section are those which are used most commonly the VI editor. &lt;p&gt; The &lt;i&gt;count&lt;/i&gt; is entered as a number beginning with any character from 1 to 9. For example, the &lt;tt&gt;x&lt;/tt&gt; command deletes a character under the cursor. If you type &lt;tt&gt;23x&lt;/tt&gt; while in &lt;i&gt;command&lt;/i&gt; mode, it will delete 23 characters. &lt;/p&gt;   &lt;p&gt; Some commands use an optional &lt;i&gt;where&lt;/i&gt; parameter, where you can specify how many lines or how much of the document the command affects, the &lt;i&gt;where&lt;/i&gt; parameter can also be any command that moves the cursor. &lt;/p&gt;   &lt;h2&gt;&lt;a name="simple"&gt;Some Simple VI Commands&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; Here is a simple set of commands to get a beginning VI user started. There are many other convenient commands, which will be discussed in later sections. &lt;/p&gt; &lt;dl compact="compact"&gt; &lt;dt&gt;a&lt;/dt&gt;&lt;dd&gt;enter &lt;i&gt;insert&lt;/i&gt; mode, the characters typed in will be inserted after the current cursor position. If you specify a count, all the text that had been inserted will be repeated that many times. &lt;/dd&gt;&lt;dt&gt;h&lt;/dt&gt;&lt;dd&gt;move the cursor to the left one character position. &lt;/dd&gt;&lt;dt&gt;i&lt;/dt&gt;&lt;dd&gt;enter &lt;i&gt;insert&lt;/i&gt; mode, the characters typed in will be inserted before the current cursor position. If you specify a count, all the text that had been inserted will be repeated that many times. &lt;/dd&gt;&lt;dt&gt;j&lt;/dt&gt;&lt;dd&gt;move the cursor down one line. &lt;/dd&gt;&lt;dt&gt;k&lt;/dt&gt;&lt;dd&gt;move the cursor up one line. &lt;/dd&gt;&lt;dt&gt;l&lt;/dt&gt;&lt;dd&gt;move the cursor to the right one character position. &lt;/dd&gt;&lt;dt&gt;r&lt;/dt&gt;&lt;dd&gt;replace one character under the cursor. Specify &lt;i&gt;count&lt;/i&gt; to     replace a number of characters &lt;/dd&gt;&lt;dt&gt;u&lt;/dt&gt;&lt;dd&gt;undo the last change to the file. Typing &lt;tt&gt;u&lt;/tt&gt; again will re-do     the change. &lt;/dd&gt;&lt;dt&gt;x&lt;/dt&gt;&lt;dd&gt;delete character under the cursor. &lt;i&gt;Count&lt;/i&gt; specifies how many     characters to delete. The characters will be deleted after the cursor. &lt;/dd&gt; &lt;/dl&gt;   &lt;h2&gt;&lt;a name="buffers"&gt;Text Buffers in VI&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; The VI editor has 36 buffers for storing pieces of text, and also a general purpose buffer. Any time a block of text is deleted or yanked from the file, it gets placed into the general purpose buffer. Most users of VI rarely use the other buffers, and can get along without the other buffers. The block of text is also stored in another buffer as well, if it is specified. The buffer is specified using the &lt;tt&gt;"&lt;/tt&gt; command. After typing &lt;tt&gt;"&lt;/tt&gt;, a letter or digit specifying the buffer must be entered. For example, the command:  &lt;tt&gt;"mdd&lt;/tt&gt; uses the buffer &lt;b&gt;m&lt;/b&gt;, and the last two characters stand for delete current line. Similarly, text can be pasted in with the &lt;tt&gt;p&lt;/tt&gt; or &lt;tt&gt;P&lt;/tt&gt; command. &lt;tt&gt;"mp&lt;/tt&gt; pastes the contents of buffer &lt;b&gt;m&lt;/b&gt; after the current cursor position. For any of the commands used in the next two sections, these buffers can be specified for temporary storage of words or paragraphs. &lt;/p&gt;   &lt;h2&gt;&lt;a name="cut"&gt;Cutting and Yanking&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; The command commonly used command for cutting is &lt;tt&gt;d&lt;/tt&gt;. This command deletes text from the file. The command is preceded by an optional &lt;i&gt;count&lt;/i&gt; and followed by a movement specification. If you double the command by typing &lt;tt&gt;dd&lt;/tt&gt;, it deletes the current line. Here are some combinations of these:  &lt;/p&gt; &lt;dl compact="compact"&gt; &lt;dt&gt;d^&lt;/dt&gt;&lt;dd&gt;deletes from current cursor position to the beginning of the line. &lt;/dd&gt;&lt;dt&gt;d$&lt;/dt&gt;&lt;dd&gt;deletes from current cursor position to the end of the line. &lt;/dd&gt;&lt;dt&gt;dw&lt;/dt&gt;&lt;dd&gt;deletes from current cursor position to the end of the word. &lt;/dd&gt;&lt;dt&gt;3dd&lt;/dt&gt;&lt;dd&gt;deletes three lines from current cursor position downwards. &lt;/dd&gt; &lt;/dl&gt;    &lt;p&gt; There is also the &lt;tt&gt;y&lt;/tt&gt; command which operates similarly to the &lt;tt&gt;d&lt;/tt&gt; command which take text from the file without deleting the text.&lt;/p&gt;   &lt;h2&gt;&lt;a name="paste"&gt;Pasting&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; The commands to paste are &lt;tt&gt;p&lt;/tt&gt; and &lt;tt&gt;P&lt;/tt&gt;. The only differ in the position relative to the cursor where they paste. &lt;tt&gt;p&lt;/tt&gt; pastes the specified or general buffer after the cursor position, while &lt;tt&gt;P&lt;/tt&gt; pastes the specified or general buffer before the cursor position. Specifying &lt;i&gt;count&lt;/i&gt; before the paste command pastes text the specified number of times. &lt;/p&gt;   &lt;h2&gt;&lt;a name="indent"&gt;Indenting Your Code and Checking&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; The VI editor has features to help programmers format their code neatly. There is a variable that to set up the indentation for each level of nesting in code. In order to set it up, see the &lt;a href="http://www.eng.hawaii.edu/Tutor/vi.html#settings"&gt;customization section&lt;/a&gt; of this tutorial.  For example, the command to set the shift width to 4 characters is &lt;tt&gt;:set sw=4&lt;/tt&gt;. &lt;/p&gt;   &lt;p&gt; The following commands indent your lines or remove the indentation, and can be specified with &lt;i&gt;count&lt;/i&gt;:  &lt;/p&gt; &lt;dl compact="compact"&gt; &lt;dt&gt;&lt;&lt;&lt;/dt&gt;&lt;dd&gt;Shifts the current line to the left by one shift width. &lt;/dd&gt;&lt;dt&gt;&gt;&gt;&lt;/dt&gt;&lt;dd&gt;Shifts the current line to the right by one shift width. &lt;/dd&gt; &lt;/dl&gt;    &lt;p&gt; The VI editor also has a helpful feature which checks your source code for any hanging parentheses or braces. The &lt;tt&gt;%&lt;/tt&gt; command will look for the left parenthesis or brace corresponding to a particular right parenthesis or brace and vice versa. Place the cursor onto a parenthesis or brace and type &lt;b&gt;%&lt;/b&gt; to move the cursor to the corresponding parenthesis or brace. This is useful to check for unclosed parentheses or braces. If a parenthesis or brace exists without a matching parenthesis or brace, VI will beep at you to indicate that no matching symbol was found. &lt;/p&gt;   &lt;h2&gt;&lt;a name="search"&gt;Word and Character Searching&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; The VI editor has two kinds of searches:  string and character. For a string search, the &lt;tt&gt;/&lt;/tt&gt; and &lt;tt&gt;?&lt;/tt&gt; commands are used. When you start these commands, the command just typed will be shown on the bottom line, where you type the particular string to look for. These two commands differ only in the direction where the search takes place. The &lt;tt&gt;/&lt;/tt&gt; command searches forwards (downwards) in the file, while the &lt;tt&gt;?&lt;/tt&gt; command searches backwards (upwards) in the file. The &lt;tt&gt;n&lt;/tt&gt; and &lt;tt&gt;N&lt;/tt&gt; commands repeat the previous search command in the same or opposite direction, respectively. Some characters have special meanings to VI, so they must be preceded by a backslash (\) to be included as part of the search expression. &lt;/p&gt;   &lt;p&gt; Special characters: &lt;/p&gt; &lt;dl compact="compact"&gt; &lt;dt&gt;^&lt;/dt&gt;&lt;dd&gt;Beginning of the line. (At the beginning of a search expression.) &lt;/dd&gt;&lt;dt&gt;.&lt;/dt&gt;&lt;dd&gt;Matches a single character. &lt;/dd&gt;&lt;dt&gt;*&lt;/dt&gt;&lt;dd&gt;Matches zero or more of the previous character. &lt;/dd&gt;&lt;dt&gt;$&lt;/dt&gt;&lt;dd&gt;End of the line (At the end of the search expression.) &lt;/dd&gt;&lt;dt&gt;[&lt;/dt&gt;&lt;dd&gt;Starts a set of matching, or non-matching expressions... For example: /f[iae]t matches either of these: fit fat fet In this form, it matches anything except these: /a[^bcd] will not match any of these, but anything with an a and another letter: ab ac ad &lt;/dd&gt;&lt;dt&gt;&lt;&lt;/dt&gt;&lt;dd&gt;Put in an expression escaped with the backslash to find the ending     or beginning of a word. For example: /\&lt;the&gt; should find only word     the, but not words like these:  there and other. &lt;/the&gt;&lt;/dd&gt;&lt;dt&gt;&gt;&lt;/dt&gt;&lt;dd&gt;See the '&lt;' character description above. &lt;/dd&gt; &lt;/dl&gt;    &lt;p&gt; The character search searches within one line to find a character entered after the command. The &lt;tt&gt;f&lt;/tt&gt; and &lt;tt&gt;F&lt;/tt&gt; commands search for a character on the current line only. &lt;tt&gt;f&lt;/tt&gt; searches forwards and &lt;tt&gt;F&lt;/tt&gt; searches backwards and the cursor moves to the position of the found character. &lt;/p&gt;   &lt;p&gt; The &lt;tt&gt;t&lt;/tt&gt; and &lt;tt&gt;T&lt;/tt&gt; commands search for a character on the current line only, but for &lt;tt&gt;t&lt;/tt&gt;, the cursor moves to the position before the character, and &lt;tt&gt;T&lt;/tt&gt; searches the line backwards to the position after the character. &lt;/p&gt;   &lt;p&gt; These two sets of commands can be repeated using the &lt;tt&gt;;&lt;/tt&gt; or &lt;tt&gt;,&lt;/tt&gt; command, where &lt;tt&gt;;&lt;/tt&gt; repeats the last character search command in the same direction, while &lt;tt&gt;,&lt;/tt&gt; repeats the command in the reverse direction. &lt;/p&gt;   &lt;h2&gt;&lt;a name="settings"&gt;Settings for VI (and EX)&lt;/a&gt;&lt;/h2&gt;   &lt;p&gt; You can customize the way VI behaves upon start up. There are several edit options which are available using the :set command, these are the VI and EX editor options available on Wiliki: (You can get this list by typing &lt;tt&gt;:set all&lt;/tt&gt; and then &lt;b&gt;return&lt;/b&gt; in command mode) &lt;/p&gt;   &lt;p&gt; &lt;/p&gt; &lt;table summary="This table" border="0"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;listing&gt;noautoindent        magic                               noshowmatch&lt;br /&gt;autoprint           mesg                                noshowmode&lt;br /&gt;noautowrite         nomodelines                         noslowopen&lt;br /&gt;nobeautify          nonumber                            tabstop=8&lt;br /&gt;directory=/tmp      nonovice                            taglength=0&lt;br /&gt;nodoubleescape      nooptimize                          tags=tags /usr/lib/tags&lt;br /&gt;noedcompatible      paragraphs=IPLPPPQPP LIpplpipnpbp   term=xterm&lt;br /&gt;noerrorbells        prompt                              noterse&lt;br /&gt;noexrc              noreadonly                          timeout&lt;br /&gt;flash               redraw                              timeoutlen=500&lt;br /&gt;hardtabs=8          remap                               ttytype=xterm&lt;br /&gt;noignorecase        report=5                            warn&lt;br /&gt;keyboardedit        scroll=11                           window=23&lt;br /&gt;keyboardedit!       sections=NHSHH HUuhsh+c             wrapscan&lt;br /&gt;nolisp              shell=/bin/csh                      wrapmargin=0&lt;br /&gt;nolist              shiftwidth=8                        nowriteany&lt;br /&gt;&lt;/listing&gt;   &lt;p&gt; Some of these options have values set with the equals sign '=' in it, while others are either set or not set. (These on or off type of options are called &lt;b&gt;Boolean&lt;/b&gt;, and have "no" in front of them to indicate that they are not set.) The options shown here are the options that are set without any customization. Descriptions of some of these are given below, with an abbreviation. For example, the command set autoindent, you can type &lt;tt&gt;:set autoindent&lt;/tt&gt; or &lt;tt&gt;:set ai&lt;/tt&gt;. To unset it, you can type &lt;tt&gt;:set noautoindent&lt;/tt&gt; or &lt;tt&gt;:set noai&lt;/tt&gt;.  &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;autoindent (ai)&lt;/dt&gt;&lt;dd&gt;This option sets the editor so that lines following an indented line will have the same indentation as the previous line. If you want to back over this indentation, you can type &lt;tt&gt;^D&lt;/tt&gt; at the very     first character position. This &lt;tt&gt;^D&lt;/tt&gt; works in the &lt;i&gt;insert&lt;/i&gt;     mode, and not in &lt;i&gt;command&lt;/i&gt; mode. Also, the width of the indentations     can be set with &lt;b&gt;shiftwidth&lt;/b&gt;, explained below. &lt;/dd&gt;&lt;dt&gt;exrc&lt;/dt&gt;&lt;dd&gt;The &lt;i&gt;.exrc&lt;/i&gt; file in the current directory is read during     startup. This has to be set either in the environment variable     &lt;b&gt;EXINIT&lt;/b&gt; or in the &lt;i&gt;.exrc&lt;/i&gt; file in your home directory. &lt;/dd&gt;&lt;dt&gt;mesg&lt;/dt&gt;&lt;dd&gt;Turn off messages if this option is unset using     &lt;tt&gt;:set nomesg&lt;/tt&gt;, so that nobody can bother you while using the     editor. &lt;/dd&gt;&lt;dt&gt;number (nu)&lt;/dt&gt;&lt;dd&gt;Displays lines with line numbers on the left side. &lt;/dd&gt;&lt;dt&gt;shiftwidth (sw)&lt;/dt&gt;&lt;dd&gt;This option takes a value, and determines the width of     a software tabstop. (The software tabstop is used for the     &lt;tt&gt;&lt;&lt;&lt;/tt&gt; and &lt;tt&gt;&gt;&gt;&lt;/tt&gt; commands.) For example, you would     set a shift width of 4 with this command: &lt;tt&gt;:set sw=4&lt;/tt&gt;. &lt;/dd&gt;&lt;dt&gt;showmode (smd)&lt;/dt&gt;&lt;dd&gt;This option is used to show the actual mode of the     editor that you are in. If you are in &lt;i&gt;insert&lt;/i&gt; mode, the     bottom line of the screen will say &lt;b&gt;INPUT MODE&lt;/b&gt;.  &lt;/dd&gt;&lt;dt&gt;warn&lt;/dt&gt;&lt;dd&gt;This option warns you if you have modified the file, but haven't     saved it yet. &lt;/dd&gt;&lt;dt&gt;window (wi)&lt;/dt&gt;&lt;dd&gt;This option sets up the number of lines on the window that VI uses. For example, to set the VI editor to use only 12 lines of your screen (because your modem is slow) you would use this: &lt;tt&gt;:set wi=12&lt;/tt&gt;. &lt;/dd&gt;&lt;dt&gt;wrapscan (ws)&lt;/dt&gt;&lt;dd&gt;This option affects the behavior of the word search. If     &lt;tt&gt;wrapscan&lt;/tt&gt; is set, if the word is not found at the bottom of the     file, it will try to search for it at the beginning. &lt;/dd&gt;&lt;dt&gt;wrapmargin (wm)&lt;/dt&gt;&lt;dd&gt;If this option has a value greater than zero, the editor will automatically "word wrap". That is, if you get to within that many spaces of the left margin, the word will wrap to the next line, without having to type return. For example, to set the wrap margin to two characters, you would type this: &lt;tt&gt;:set wm=2&lt;/tt&gt;. &lt;/dd&gt;&lt;/dl&gt;   &lt;h2&gt;&lt;a name="map"&gt;Abbreviations and Mapping Keys to Other Keys&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt; One EX editor command that is useful in the VI editor is the &lt;b&gt;abbreviate&lt;/b&gt; command. This lets you set up abbreviations for specific strings. The command looks like this: &lt;tt&gt;:ab string thing to substitute for&lt;/tt&gt;. For example, if you had to type the name, "&lt;b&gt;Humuhumunukunukuapua`a&lt;/b&gt;" but you didn't want to type the whole name, you could use an abbreviation for it. For this example, the command is entered like this:&lt;br /&gt;&lt;tt&gt;:ab 9u Humuhumunukunukuapua`a&lt;/tt&gt;&lt;br /&gt;Now, whenever you type &lt;tt&gt;9u&lt;/tt&gt; as a separate word, VI will type in the entire word(s) specified. If you typed in 9university, it will not substitute the word. &lt;/p&gt;  &lt;p&gt; To remove a previously defined abbreviation, the command is unabbreviate. To remove the previous example, the command would be ":una 9u" To get your listing of abbreviations, simply just type :ab without any definitions. &lt;/p&gt;  &lt;p&gt; Another EX editor command that is useful for customization is the mapping command. There are two kinds of mapping commands. One for command mode, and the other for insert mode. These two commands are &lt;tt&gt;:map&lt;/tt&gt; and &lt;tt&gt;:map!&lt;/tt&gt; respectively. The mapping works similarly to the abbreviation, and you give it a key sequence and give it another key sequence to substitute it with. (The substituted key sequences are usually VI commands.) &lt;/p&gt;  &lt;h2&gt;&lt;a name="setup"&gt;The EXINIT Environment Variable and the &lt;i&gt;.exrc&lt;/i&gt; file&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt; There are two ways to customize the VI editor. If you create a file called &lt;i&gt;.exrc&lt;/i&gt; in your home directory, all the commands in there will be read when VI starts up. The other method is to set an environment variable called &lt;b&gt;EXINIT&lt;/b&gt;. The options will be set in your shell's setup file. If you use /bin/csh (C-Shell), the command is as follows, and is put in the &lt;i&gt;.cshrc&lt;/i&gt; file:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;    setenv EXINIT '...'&lt;br /&gt;&lt;/pre&gt; If you use /bin/sh or /bin/ksh, the command is as follows, and is put into the &lt;i&gt;.profile&lt;/i&gt; file:&lt;br /&gt;&lt;pre&gt;    export EXINIT&lt;br /&gt;  EXINIT='...'&lt;br /&gt;&lt;/pre&gt; Don't put in ... as the example says. In this space put the commands that you want to set up. For example, if you want to have auto indent, line numbering, and the wrap margin of three characters, then the setenv command (for C shell) looks like this:&lt;br /&gt;&lt;pre&gt;    setenv EXINIT 'set ai nu wm=3'&lt;br /&gt;&lt;/pre&gt;       &lt;p&gt; If you want to put more than one command in the &lt;tt&gt;setenv EXINIT&lt;/tt&gt; thing, separate the commands with a vertical bar (|). For example, to map the 'g' command to the 'G' character in command mode, the command is &lt;tt&gt;:map g G&lt;/tt&gt;, and combined with the above command, you get this: &lt;/p&gt;&lt;pre&gt;setenv EXINIT 'set ai nu wm=3|map g G'&lt;br /&gt;&lt;/pre&gt;   &lt;p&gt; If you want to create the file called &lt;i&gt;.exrc&lt;/i&gt;, you can put exactly the same things in the file as shown in the quotes after the &lt;b&gt;EXINIT&lt;/b&gt;. &lt;/p&gt;  &lt;h2&gt;&lt;a name="recover"&gt;Recovering Your Work When Something Goes Wrong with Your Terminal&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt; The VI editor edits a temporary copy of your file, and after the editing is complete, or when you tell it to save, it puts the contents of the temporary copy into the original file. If something goes wrong while you are editing your file, the VI editor will attempt to save whatever work you had in progress, and store it for later recovery. (Note: If VI dies while you were working on any file, it sends you an email message on how to recover it. The &lt;b&gt;-r&lt;/b&gt; option stands for recovery. If you were editing the file &lt;i&gt;vitalinfo&lt;/i&gt;, and you accidentally got logged out, then the &lt;b&gt;-r&lt;/b&gt; option of the 'vi' editor should help. The command would look somewhat like this:  &lt;tt&gt;vi -r vitalinfo&lt;/tt&gt; After using the &lt;b&gt;-r&lt;/b&gt; option once, though, you MUST save what you have recovered to the actual file... The &lt;b&gt;-r&lt;/b&gt; option only works once per failed VI session. &lt;/p&gt;  &lt;h2&gt;&lt;a name="warning"&gt;Warning About Using VI on the Workstations&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt; There are two things to be aware of when using the workstations: Editing the same file many times at once, and changing the size of the screen. &lt;/p&gt;  &lt;p&gt; Because VI edits a copy of your original file and saves the contents of that copy into the original file, if you are logged on more than once and are editing the same file more than once using VI, if you save on one window and then you save on the other window, the changes made to the file on the first save would be overwritten. Make sure that you only run one copy of VI per file. &lt;/p&gt;  &lt;p&gt; If you use a terminal program from a workstation, you can change the size of the screen by dragging the sides of the window. If the size is not working properly, the command to type is this:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;    eval `resize`&lt;br /&gt;&lt;/pre&gt; If that doesn't work the command would be this:&lt;br /&gt;&lt;pre&gt;    eval `/usr/bin/X11/resize`&lt;br /&gt;&lt;/pre&gt; If the size is wrong, the editor will not operate correctly. If you have any problems with the screen size, ask the monitors in the computer lab for help setting the sizes correctly. &lt;h2&gt;&lt;a name="summary"&gt;Summary of VI commands&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; This list is a summary of VI commands, categorized by function. There may be other commands available, so check the &lt;a href="http://www.eng.hawaii.edu/cgi-bin/man-gateway?vi"&gt;on-line manual on VI&lt;/a&gt;. For easy reference, you can save this file as text and delete any commands you don't think you would use and print out the resulting shorter file. &lt;/p&gt;  &lt;h3&gt;&lt;a name="s-cut"&gt;Cutting and Pasting/Deleting text&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;"&lt;/dt&gt;&lt;dd&gt;Specify a buffer to be used any of the commands using buffers. Follow the " with a letter or a number, which corresponds to a buffer. &lt;/dd&gt;&lt;dt&gt;D&lt;/dt&gt;&lt;dd&gt;Delete to the end of the line from the current cursor position. &lt;/dd&gt;&lt;dt&gt;P&lt;/dt&gt;&lt;dd&gt;Paste the specified buffer before the current cursor position or line. If no buffer is specified (with the " command.) then 'P' uses the general buffer. &lt;/dd&gt;&lt;dt&gt;X&lt;/dt&gt;&lt;dd&gt;Delete the character before the cursor. &lt;/dd&gt;&lt;dt&gt;Y&lt;/dt&gt;&lt;dd&gt;Yank the current line into the specified buffer. If no buffer is     specified, then the general buffer is used. &lt;/dd&gt;&lt;dt&gt;d&lt;/dt&gt;&lt;dd&gt;Delete until &lt;i&gt;where&lt;/i&gt;. "dd" deletes the current line. A count deletes that many lines. Whatever is deleted is placed into the buffer specified with the " command. If no buffer is specified, then the general buffer is used. &lt;/dd&gt;&lt;dt&gt;p&lt;/dt&gt;&lt;dd&gt;Paste the specified buffer after the current cursor position or line. If no buffer is specified (with the " command.) then 'p' uses the general buffer. &lt;/dd&gt;&lt;dt&gt;x&lt;/dt&gt;&lt;dd&gt;Delete character under the cursor. A count tells how many characters to delete. The characters will be deleted after the cursor. &lt;/dd&gt;&lt;dt&gt;y&lt;/dt&gt;&lt;dd&gt;Yank until &lt;where&gt;, putting the result into a buffer. "yy" yanks the current line. a count yanks that many lines. The buffer can be specified with the " command. If no buffer is specified, then the general buffer is used. &lt;/where&gt;&lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-insert"&gt;Inserting New Text&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;A&lt;/dt&gt;&lt;dd&gt;Append at the end of the current line. &lt;/dd&gt;&lt;dt&gt;I&lt;/dt&gt;&lt;dd&gt;Insert from the beginning of a line. &lt;/dd&gt;&lt;dt&gt;O&lt;/dt&gt;&lt;dd&gt;(letter oh) Enter &lt;i&gt;insert&lt;/i&gt; mode in a new line above the current     cursor position. &lt;/dd&gt;&lt;dt&gt;a&lt;/dt&gt;&lt;dd&gt;Enter &lt;i&gt;insert&lt;/i&gt; mode, the characters typed in will be inserted after the current cursor position. A count inserts all the text that had been inserted that many times. &lt;/dd&gt;&lt;dt&gt;i&lt;/dt&gt;&lt;dd&gt;Enter &lt;i&gt;insert&lt;/i&gt; mode, the characters typed in will be inserted before the current cursor position. A count inserts all the text that had been inserted that many times. &lt;/dd&gt;&lt;dt&gt;o&lt;/dt&gt;&lt;dd&gt;Enter &lt;i&gt;insert&lt;/i&gt; mode in a new line below the current cursor     position. &lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-mvcur"&gt;Moving the Cursor Within the File&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;^B&lt;/dt&gt;&lt;dd&gt;Scroll backwards one page. A count scrolls that many pages. &lt;/dd&gt;&lt;dt&gt;^D&lt;/dt&gt;&lt;dd&gt;Scroll forwards half a window. A count scrolls that many lines. &lt;/dd&gt;&lt;dt&gt;^F&lt;/dt&gt;&lt;dd&gt;Scroll forwards one page. A count scrolls that many pages. &lt;/dd&gt;&lt;dt&gt;^H&lt;/dt&gt;&lt;dd&gt;Move the cursor one space to the left. A count moves that many spaces. &lt;/dd&gt;&lt;dt&gt;^J&lt;/dt&gt;&lt;dd&gt;Move the cursor down one line in the same column. A count moves that     many lines down. &lt;/dd&gt;&lt;dt&gt;^M&lt;/dt&gt;&lt;dd&gt;Move to the first character on the next line. &lt;/dd&gt;&lt;dt&gt;^N&lt;/dt&gt;&lt;dd&gt;Move the cursor down one line in the same column. A count moves that     many lines down. &lt;/dd&gt;&lt;dt&gt;^P&lt;/dt&gt;&lt;dd&gt;Move the cursor up one line in the same column. A count moves that     many lines up. &lt;/dd&gt;&lt;dt&gt;^U&lt;/dt&gt;&lt;dd&gt;Scroll backwards half a window. A count scrolls that many lines. &lt;/dd&gt;&lt;dt&gt;$&lt;/dt&gt;&lt;dd&gt;Move the cursor to the end of the current line. A count moves to the     end of the following lines. &lt;/dd&gt;&lt;dt&gt;%&lt;/dt&gt;&lt;dd&gt;Move the cursor to the matching parenthesis or brace. &lt;/dd&gt;&lt;dt&gt;^&lt;/dt&gt;&lt;dd&gt;Move the cursor to the first non-whitespace character. &lt;/dd&gt;&lt;dt&gt;(&lt;/dt&gt;&lt;dd&gt;Move the cursor to the beginning of a sentence. &lt;/dd&gt;&lt;dt&gt;)&lt;/dt&gt;&lt;dd&gt;Move the cursor to the beginning of the next sentence. &lt;/dd&gt;&lt;dt&gt;{&lt;/dt&gt;&lt;dd&gt;Move the cursor to the preceding paragraph. &lt;/dd&gt;&lt;dt&gt;}&lt;/dt&gt;&lt;dd&gt;Move the cursor to the next paragraph. &lt;/dd&gt;&lt;dt&gt;|&lt;/dt&gt;&lt;dd&gt;Move the cursor to the column specified by the count. &lt;/dd&gt;&lt;dt&gt;+&lt;/dt&gt;&lt;dd&gt;Move the cursor to the first non-whitespace character in the next line. &lt;/dd&gt;&lt;dt&gt;-&lt;/dt&gt;&lt;dd&gt;Move the cursor to the first non-whitespace character in the previous     line. &lt;/dd&gt;&lt;dt&gt;_&lt;/dt&gt;&lt;dd&gt;Move the cursor to the first non-whitespace character in the current     line. &lt;/dd&gt;&lt;dt&gt;0&lt;/dt&gt;&lt;dd&gt;(Zero) Move the cursor to the first column of the current line. &lt;/dd&gt;&lt;dt&gt;B&lt;/dt&gt;&lt;dd&gt;Move the cursor back one word, skipping over punctuation. &lt;/dd&gt;&lt;dt&gt;E&lt;/dt&gt;&lt;dd&gt;Move forward to the end of a word, skipping over punctuation. &lt;/dd&gt;&lt;dt&gt;G&lt;/dt&gt;&lt;dd&gt;Go to the line number specified as the count. If no count is given,     then go to the end of the file. &lt;/dd&gt;&lt;dt&gt;H&lt;/dt&gt;&lt;dd&gt;Move the cursor to the first non-whitespace character on the top of     the screen. &lt;/dd&gt;&lt;dt&gt;L&lt;/dt&gt;&lt;dd&gt;Move the cursor to the first non-whitespace character on the bottom of     the screen. &lt;/dd&gt;&lt;dt&gt;M&lt;/dt&gt;&lt;dd&gt;Move the cursor to the first non-whitespace character on the middle of     the screen. &lt;/dd&gt;&lt;dt&gt;W&lt;/dt&gt;&lt;dd&gt;Move forward to the beginning of a word, skipping over punctuation. &lt;/dd&gt;&lt;dt&gt;b&lt;/dt&gt;&lt;dd&gt;Move the cursor back one word. If the cursor is in the middle of a word, move the cursor to the first character of that word. &lt;/dd&gt;&lt;dt&gt;e&lt;/dt&gt;&lt;dd&gt;Move the cursor forward one word. If the cursor is in the middle of a word, move the cursor to the last character of that word. &lt;/dd&gt;&lt;dt&gt;h&lt;/dt&gt;&lt;dd&gt;Move the cursor to the left one character position. &lt;/dd&gt;&lt;dt&gt;j&lt;/dt&gt;&lt;dd&gt;Move the cursor down one line. &lt;/dd&gt;&lt;dt&gt;k&lt;/dt&gt;&lt;dd&gt;Move the cursor up one line. &lt;/dd&gt;&lt;dt&gt;l&lt;/dt&gt;&lt;dd&gt;Move the cursor to the right one character position. &lt;/dd&gt;&lt;dt&gt;w&lt;/dt&gt;&lt;dd&gt;Move the cursor forward one word. If the cursor is in the middle of a word, move the cursor to the first character of the next word. &lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-mvscr"&gt;Moving the Cursor Around the Screen&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;^E&lt;/dt&gt;&lt;dd&gt;Scroll forwards one line. A count scrolls that many lines. &lt;/dd&gt;&lt;dt&gt;^Y&lt;/dt&gt;&lt;dd&gt;Scroll backwards one line. A count scrolls that many lines. &lt;/dd&gt;&lt;dt&gt;z&lt;/dt&gt;&lt;dd&gt;Redraw the screen with the following options.  "z&lt;return&gt;" puts the current line on the top of the screen; "z." puts the current line on the center of the screen; and "z-" puts the current line on the bottom of the screen. If you specify a count before the 'z' command, it changes the current line to the line specified. For example, "16z." puts line 16 on the center of the screen. &lt;/return&gt;&lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-repl"&gt;Replacing Text&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;C&lt;/dt&gt;&lt;dd&gt;Change to the end of the line from the current cursor position. &lt;/dd&gt;&lt;dt&gt;R&lt;/dt&gt;&lt;dd&gt;Replace characters on the screen with a set of characters entered, ending with the Escape key. &lt;/dd&gt;&lt;dt&gt;S&lt;/dt&gt;&lt;dd&gt;Change an entire line. &lt;/dd&gt;&lt;dt&gt;c&lt;/dt&gt;&lt;dd&gt;Change until &lt;where&gt;. "cc" changes the current line. A count changes that many lines. r&lt;/where&gt;&lt;/dd&gt;&lt;dd&gt;Replace one character under the cursor. Specify a count to replace a number of characters. &lt;/dd&gt;&lt;dt&gt;s&lt;/dt&gt;&lt;dd&gt;Substitute one character under the cursor, and go into insert mode. Specify a count to substitute a number of characters. A dollar sign ($) will be put at the last character to be substituted. &lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-srch"&gt;Searching for Text or Characters&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;,&lt;/dt&gt;&lt;dd&gt;Repeat the last f, F, t or T command in the reverse direction. &lt;/dd&gt;&lt;dt&gt;/&lt;/dt&gt;&lt;dd&gt;Search the file downwards for the string specified after the /. &lt;/dd&gt;&lt;dt&gt;;&lt;/dt&gt;&lt;dd&gt;Repeat the last f, F, t or T command. &lt;/dd&gt;&lt;dt&gt;?&lt;/dt&gt;&lt;dd&gt;Search the file upwards for the string specified after the ?. &lt;/dd&gt;&lt;dt&gt;F&lt;/dt&gt;&lt;dd&gt;Search the current line backwards for the character specified after the 'F' command. If found, move the cursor to the position. &lt;/dd&gt;&lt;dt&gt;N&lt;/dt&gt;&lt;dd&gt;Repeat the last search given by '/' or '?', except in the reverse     direction. &lt;/dd&gt;&lt;dt&gt;T&lt;/dt&gt;&lt;dd&gt;Search the current line backwards for the character specified after the 'T' command, and move to the column after the if it's found. &lt;/dd&gt;&lt;dt&gt;f&lt;/dt&gt;&lt;dd&gt;Search the current line for the character specified after the 'f'     command. If found, move the cursor to the position. &lt;/dd&gt;&lt;dt&gt;n&lt;/dt&gt;&lt;dd&gt;Repeat last search given by '/' or '?'. &lt;/dd&gt;&lt;dt&gt;t&lt;/dt&gt;&lt;dd&gt;Search the current line for the character specified after the 't' command, and move to the column before the character if it's found. &lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-fmt"&gt;Manipulating Character/Line Formatting&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;~ &lt;/dt&gt;&lt;dd&gt;Switch the case of the character under the cursor. &lt;/dd&gt;&lt;dt&gt;&lt;&lt;/dt&gt;&lt;dd&gt;Shift the lines up to &lt;i&gt;where&lt;/i&gt; to the left by one shiftwidth.     "&lt;&lt;" shifts the current line to the left, and can be specified with a     count. &lt;/dd&gt;&lt;dt&gt;&gt;&lt;/dt&gt;&lt;dd&gt;Shift the lines up to &lt;i&gt;where&lt;/i&gt; to the right by one     shiftwidth. "&gt;&gt;" shifts the current line to the right, and can be     specified with a count. &lt;/dd&gt;&lt;dt&gt;J&lt;/dt&gt;&lt;dd&gt;Join the current line with the next one. A count joins that many lines. &lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-save"&gt;Saving and Quitting&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;^\&lt;/dt&gt;&lt;dd&gt;Quit out of "VI" mode and go into "EX" mode. The EX editor is the line editor VI is build upon. The EX command to get back into VI is ":vi". &lt;/dd&gt;&lt;dt&gt;Q&lt;/dt&gt;&lt;dd&gt;Quit out of "VI" mode and go into "EX" mode. The ex editor is a line-by-line editor. The EX command to get back into VI is ":vi". &lt;/dd&gt;&lt;dt&gt;ZZ&lt;/dt&gt;&lt;dd&gt;Exit the editor, saving if any changes were made. &lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-misc"&gt;Miscellany&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;^G&lt;/dt&gt;&lt;dd&gt;Show the current filename and the status. &lt;/dd&gt;&lt;dt&gt;^L&lt;/dt&gt;&lt;dd&gt;Clear and redraw the screen. &lt;/dd&gt;&lt;dt&gt;^R&lt;/dt&gt;&lt;dd&gt;Redraw the screen removing false lines. &lt;/dd&gt;&lt;dt&gt;^[&lt;/dt&gt;&lt;dd&gt;Escape key. Cancels partially formed command. &lt;/dd&gt;&lt;dt&gt;^^&lt;/dt&gt;&lt;dd&gt;Go back to the last file edited. &lt;/dd&gt;&lt;dt&gt;!&lt;/dt&gt;&lt;dd&gt;Execute a shell. If a &lt;where&gt; is specified, the program which is executed using ! uses the specified line(s) as standard input, and will replace those lines with the standard output of the program executed. "!!" executes a program using the current line as input. For example, "!4jsort" will take five lines from the current cursor position and execute sort. After typing the command, there will be a single exclamation point where you can type the command in. &amp;amp; &lt;/where&gt;&lt;/dd&gt;&lt;dd&gt;Repeat the previous ":s" command. &lt;/dd&gt;&lt;dt&gt;.&lt;/dt&gt;&lt;dd&gt;Repeat the last command that modified the file. &lt;/dd&gt;&lt;dt&gt;:&lt;/dt&gt;&lt;dd&gt;Begin typing an EX editor command. The command is executed once the     user types return. (See section below.) &lt;/dd&gt;&lt;dt&gt;@&lt;/dt&gt;&lt;dd&gt;Type the command stored in the specified buffer. &lt;/dd&gt;&lt;dt&gt;U&lt;/dt&gt;&lt;dd&gt;Restore the current line to the state it was in before the cursor     entered the line. &lt;/dd&gt;&lt;dt&gt;m&lt;/dt&gt;&lt;dd&gt;Mark the current position with the character specified after the 'm'     command. &lt;/dd&gt;&lt;dt&gt;u&lt;/dt&gt;&lt;dd&gt;Undo the last change to the file. Typing 'u' again will re-do the change. &lt;/dd&gt;&lt;/dl&gt;   &lt;h3&gt;&lt;a name="s-excmd"&gt;EX Commands&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt; The VI editor is built upon another editor, called EX. The EX editor only edits by line. From the VI editor you use the : command to start entering an EX command. This list given here is not complete, but the commands given are the more commonly used. If more than one line is to be modified by certain commands (such as ":s" and ":w" ) the range must be specified before the command. For example, to substitute lines 3 through 15, the command is ":3,15s/from/this/g". &lt;/p&gt;&lt;dl compact="compact"&gt;&lt;dt&gt;:ab string strings&lt;/dt&gt;&lt;dd&gt;Abbreviation. If a word is typed in VI corresponding to string1, the editor automatically inserts the corresponding words. For example, the abbreviation ":ab usa United States of America" would insert the words, "United States of America" whenever the word "usa" is typed in. &lt;/dd&gt;&lt;dt&gt;:map keys new_seq&lt;/dt&gt;&lt;dd&gt;Mapping. This lets you map a key or a sequence of keys to another key or a sequence of keys. &lt;/dd&gt;&lt;dt&gt;:q&lt;/dt&gt;&lt;dd&gt;Quit VI. If there have been changes made, the editor will issue a warning message. &lt;/dd&gt;&lt;dt&gt;:q!&lt;/dt&gt;&lt;dd&gt;Quit VI without saving changes. &lt;/dd&gt;&lt;dt&gt;:s/&lt;i&gt;pattern&lt;/i&gt;/&lt;i&gt;to_pattern&lt;/i&gt;/&lt;i&gt;options&lt;/i&gt;&lt;/dt&gt;&lt;dd&gt; Substitute. This substitutes the specified pattern with the string in the to_pattern. Without options, it only substitutes the first occurence of the pattern. If a 'g' is specified, then all occurences are substituted. For example, the command ":1,$s/Dwayne/Dwight/g" substitutes all occurences of "Dwayne" to "Dwight". &lt;/dd&gt;&lt;dt&gt;:set [all]&lt;/dt&gt;&lt;dd&gt;Sets some customizing options to VI and EX. The ":set all" command gives all the possible options. (See the section on customizing VI for some options.) &lt;/dd&gt;&lt;dt&gt;:una string&lt;/dt&gt;&lt;dd&gt;Removes the abbreviation previously defined by ":ab". &lt;/dd&gt;&lt;dt&gt;:unm keys&lt;/dt&gt;&lt;dd&gt;Removes the remove mapping defined by ":map". &lt;/dd&gt;&lt;dt&gt;:vi filename&lt;/dt&gt;&lt;dd&gt;Starts editing a new file. If changes have not been saved, the editor will give you a warning. &lt;/dd&gt;&lt;dt&gt;:w&lt;/dt&gt;&lt;dd&gt;Write out the current file. &lt;/dd&gt;&lt;dt&gt;:w filename&lt;/dt&gt;&lt;dd&gt;Write the buffer to the filename specified. &lt;/dd&gt;&lt;dt&gt;:w &gt;&gt; filename&lt;/dt&gt;&lt;dd&gt;Append the contents of the buffer to the filename. &lt;/dd&gt;&lt;dt&gt;:wq&lt;/dt&gt;&lt;dd&gt;Write the buffer and quit. &lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115827230765004878?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115827230765004878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115827230765004878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115827230765004878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115827230765004878'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/beginners-guide-to-vi-editor.html' title='Beginners Guide to VI Editor'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34421871.post-115826886120581781</id><published>2006-09-14T14:12:00.000-07:00</published><updated>2006-09-14T14:21:01.246-07:00</updated><title type='text'>Linux File Permissions</title><content type='html'>&lt;a href="http://www.linuxforums.org/security/file_permissions.html"&gt;source: http://www.linuxforums.org/security/file_permissions.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span nd="62" name="intelliTxt" id="intelliTXT"&gt;&lt;h1 nd="3"&gt;Understanding file permissions&lt;/h1&gt;  &lt;p nd="4"&gt;In GNU/Linux every user has his own user account, and is a member of one or more user groups. Similarly, each file belongs to a user and to a user group. For restricting file access, GNU/Linux (and Unix in general) defines three different types of rights: &lt;/p&gt;&lt;p nd="5"&gt;- Read (symbolized by the letter &lt;strong nd="6"&gt;r&lt;/strong&gt;), which means that the file can be read;&lt;br /&gt;    - Write (symbolized by the letter &lt;strong nd="7"&gt;w&lt;/strong&gt;), which means that the content of the file can be changed;&lt;br /&gt;    - Execute (symbolized by the letter &lt;strong nd="8"&gt;x&lt;/strong&gt;), which means that the file can be executed.  &lt;/p&gt;&lt;p nd="9"&gt;For each file, each of these rights (Read, Write and Execute) are defined for three sets of users :  &lt;/p&gt;&lt;p nd="10"&gt;- The user (symbolized by the letter &lt;strong nd="11"&gt;u&lt;/strong&gt;), who is the owner of the file.&lt;br /&gt;   - The group (symbolized by the letter &lt;strong nd="12"&gt;g&lt;/strong&gt;), who represents all the users who are members of the group which the file belongs to (as a file belongs both to a user, and a user group).&lt;br /&gt;    - The others (symbolized by the letter &lt;strong nd="13"&gt;o&lt;/strong&gt;), who basically represent all the users that are neither members of the group nor the owner of the file.   &lt;/p&gt;&lt;p nd="14"&gt;For instance, if a file belongs to George (as the owner) and Administrators (as the group), it can define different Read, Write and Execute permissions for George, for members of the "Administrators" group, and for all other users. &lt;/p&gt;&lt;h1 nd="15"&gt;Reading file permissions : ls -l&lt;/h1&gt; &lt;p nd="16"&gt;All information related to file permissions is contained within the file and can be viewed by the "&lt;strong nd="17"&gt;ls -l&lt;/strong&gt;" command: &lt;/p&gt;&lt;pre nd="18"&gt;ls -l myfile&lt;br /&gt;-rwxr-x---  1 george administrators 10 2006-03-09 21:31 myfile&lt;/pre&gt; &lt;p nd="19"&gt;As you can see in this example, the "ls -l" command gives a lot of information about the file "myfile": &lt;/p&gt;&lt;p nd="20"&gt;- Its name, "myfile";&lt;br /&gt;    - Its permissions, "-rwxr-x---";&lt;br /&gt;    - Its owner, "george";&lt;br /&gt;    - Its group, "administrators";&lt;br /&gt;    - And other information which is not relevant to this article.    &lt;/p&gt;&lt;p nd="21"&gt;The way permissions are shown can seem a bit confusing if you're new to GNU/Linux or Unix, but don't be mistaken, it is very simple. The first character simply indicates the type of file as indicated in the table below: &lt;/p&gt;&lt;table border="0"&gt;  &lt;tbody&gt;&lt;tr&gt;   &lt;td width="86"&gt;&lt;strong nd="22"&gt;Character&lt;/strong&gt;&lt;/td&gt;   &lt;td width="172"&gt;&lt;strong nd="23"&gt;Type of file&lt;/strong&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td nd="24"&gt;- &lt;/td&gt;&lt;td nd="25"&gt;regular file&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="26"&gt;d&lt;/td&gt;&lt;td nd="27"&gt;  directory&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="28"&gt;l&lt;/td&gt;&lt;td nd="29"&gt;symbolic link&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="30"&gt;s&lt;/td&gt;&lt;td nd="31"&gt;socket&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="32"&gt;p&lt;/td&gt;&lt;td nd="33"&gt;named pipe&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="34"&gt;c&lt;/td&gt;&lt;td nd="35"&gt;character device file (unbuffered)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="36"&gt;b&lt;/td&gt;&lt;td nd="37"&gt;blocked device file (buffered)&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p nd="38"&gt;In this case myfile is a regular file. Let's have a look at the other nine characters: "rwxr-x---". &lt;/p&gt;&lt;p nd="39"&gt;The first three characters indicate whether or not the read, write and execute permissions are given to the owner (in this case, George). If they are, their character representation appear (r, w or x), otherwise they are replaced by the character "-". In the same manner, the next three characters indicate whether or not these permissions are given to the group (in this case, Administrators). Finally, the last three characters indicate whether the same rights are given to the others (in this case, people who are not members of the Administrators group). &lt;/p&gt;&lt;table border="0"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td width="76"&gt;&lt;strong nd="40"&gt;Letter&lt;/strong&gt;&lt;/td&gt; &lt;td width="216"&gt;&lt;strong nd="41"&gt;Permission&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;&lt;td nd="42"&gt;r&lt;/td&gt;&lt;td nd="43"&gt;Read&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="44"&gt;w&lt;/td&gt;&lt;td nd="45"&gt;Write&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="46"&gt;x&lt;/td&gt;&lt;td nd="47"&gt;Execute, Go through (for directories)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td nd="48"&gt;-&lt;/td&gt;&lt;td nd="49"&gt;No permission&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p&gt; &lt;/p&gt; &lt;table border="0"&gt;     &lt;tbody&gt;&lt;tr&gt;       &lt;td width="76"&gt;&lt;strong nd="50"&gt;Letter&lt;/strong&gt;&lt;/td&gt;       &lt;td width="429"&gt;&lt;strong nd="51"&gt;Type of users&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td nd="52"&gt;u&lt;/td&gt;       &lt;td nd="53"&gt;User (owner of the file)&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td nd="54"&gt;g&lt;/td&gt;       &lt;td nd="55"&gt;Group (group to which belong the file)&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td nd="56"&gt;o&lt;/td&gt;       &lt;td nd="57"&gt;Other (users who are neither a member of the Group nor the owner of the file)&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td nd="58"&gt;a&lt;/td&gt;       &lt;td nd="59"&gt;All (everybody)&lt;/td&gt;     &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p nd="60"&gt;So, in our example myfile features the following set of permissions : "&lt;/p&gt;&lt;pre nd="61"&gt;rwxr-x---&lt;/pre&gt;". This means that George has all three rights on it, that members of the Administrators group can only read (R) and execute (X) the file, and that everybody else can't do anything with the file. &lt;p nd="63"&gt;You could imagine that this file, written and maintained by George could be an executable script dedicated to the administrators and not made available to other users.. but hey.. this is only an example, so let's not assume too much :) The important thing is that you now understand the concept of file permissions and that you know how to read them using the "&lt;strong nd="64"&gt;ls -l&lt;/strong&gt;" command. The next step is to learn how to change them. &lt;/p&gt;&lt;h1 nd="65"&gt;Changing file permissions : chmod&lt;/h1&gt; &lt;p nd="66"&gt;You can change the permissions of your files (or other people's files if you're the root superuser) by using the command "chmod". The syntax is very simple. For instance if George decides to give write permissions to the administrators, he will type: &lt;/p&gt;&lt;pre nd="67"&gt;chmod g+w myfile&lt;/pre&gt; &lt;p nd="69"&gt;&lt;strong nd="68"&gt;g&lt;/strong&gt; represents the group of the file (administrators).&lt;br /&gt;&lt;strong nd="70"&gt;w&lt;/strong&gt; represents the write permission.&lt;br /&gt;&lt;strong nd="71"&gt;+&lt;/strong&gt; represents the fact that the permission is added.  &lt;/p&gt;&lt;p nd="72"&gt;If George then lists the permissions using ls -l he obtains:  &lt;/p&gt;&lt;pre nd="73"&gt;ls -l myfile&lt;br /&gt;-rwxrwx---  1 george administrators 10 2006-03-09 21:31 myfile&lt;/pre&gt;  &lt;p nd="74"&gt;As you can see, the administrators now have write access to the file, and permission to change its content.  &lt;/p&gt;&lt;p nd="75"&gt;The "&lt;strong nd="76"&gt;chmod&lt;/strong&gt;" command takes 4 parameters: &lt;/p&gt;&lt;p nd="77"&gt;- The type of users to apply the change of permissions for (u for user, g for group, o for others, a combination of them or a for all three of them).&lt;br /&gt;    - The type of change to make (+ to add permissions, - to remove permissions, = to define permissions)&lt;br /&gt;    - The type of permissions to apply the change with (r for read, w for write, x for execute)&lt;br /&gt;- The file or group of files to apply the change on (filename for a precise file, but wildcard characters for multiple files) &lt;/p&gt;&lt;p nd="78"&gt;Let's have a look at a few examples: &lt;/p&gt;&lt;p nd="79"&gt;- &lt;strong nd="80"&gt;chmod o+r myfile&lt;/strong&gt; adds read permission to the others on myfile;&lt;br /&gt;    - &lt;strong nd="81"&gt;chmod ug+rx myfile&lt;/strong&gt; adds read and execute permissions to both the owner (user) and the group on myfile;&lt;br /&gt;    - &lt;strong nd="82"&gt;chmod a-rwx myfile&lt;/strong&gt; removes all permissions to everybody (all) on myfile;&lt;br /&gt;    - &lt;strong nd="83"&gt;chmod a=rx *.txt&lt;/strong&gt; defines permissions to be read and write to everybody on all files suffixed by .txt.&lt;br /&gt; &lt;/p&gt;&lt;p nd="84"&gt;The chmod command also accepts another syntax which is quite popular among system administrators: the octal system. Rather than using letters such as u, g, o, a, r, w and x.. you can use octal numbers. The main advantage is that once you're used to it, it is faster to use. Also, because it sets permissions rather than adding or removing them, you don't accidentally overlook anything. Here is how the octal numbers work: &lt;/p&gt;&lt;p nd="85"&gt;Each permission is given a value:  &lt;/p&gt;&lt;table border="0"&gt;   &lt;tbody&gt;&lt;tr&gt;     &lt;td&gt;&lt;strong nd="86"&gt;Permission&lt;/strong&gt;&lt;/td&gt;     &lt;td&gt;&lt;strong nd="87"&gt;Value&lt;/strong&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="88"&gt;-&lt;/td&gt;     &lt;td nd="89"&gt;0&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="90"&gt;x&lt;/td&gt;     &lt;td nd="91"&gt;1&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="92"&gt;w&lt;/td&gt;     &lt;td nd="93"&gt;2&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="94"&gt;r&lt;/td&gt;     &lt;td nd="95"&gt;4&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p nd="96"&gt;Values add up when you combine permissions. Consequently the total value can go from 0 (no permission at all) to 7 (full permissions): &lt;/p&gt;&lt;table border="0"&gt;   &lt;tbody&gt;&lt;tr&gt;     &lt;td&gt;&lt;strong nd="97"&gt;Permission&lt;/strong&gt;&lt;/td&gt;     &lt;td&gt;&lt;strong nd="98"&gt;Value&lt;/strong&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="99"&gt;---&lt;/td&gt;     &lt;td nd="100"&gt;0&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="101"&gt;--x&lt;/td&gt;     &lt;td nd="102"&gt;1&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="103"&gt;-w-&lt;/td&gt;     &lt;td nd="104"&gt;2&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="105"&gt;-wx&lt;/td&gt;     &lt;td nd="106"&gt;3&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="107"&gt;r--&lt;/td&gt;     &lt;td nd="108"&gt;4&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="109"&gt;r-x&lt;/td&gt;     &lt;td nd="110"&gt;5&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="111"&gt;rw-&lt;/td&gt;     &lt;td nd="112"&gt;6&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td nd="113"&gt;rwx&lt;/td&gt;     &lt;td nd="114"&gt;7&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p&gt; &lt;/p&gt; &lt;p nd="115"&gt;Finally a value is given for each of the three types of users (User, Group and Other) and these three numbers ranging from 0 to 7 are put together to form the octal number. This is the number you can use with "&lt;strong nd="116"&gt;chmod&lt;/strong&gt;". &lt;/p&gt;&lt;p nd="117"&gt;For instance: &lt;/p&gt;&lt;pre nd="118"&gt;chmod 750 myfile&lt;/pre&gt; &lt;p nd="119"&gt;750 means 7 (rwx) for the owner, 5 (r-x) for the group and 0 (---) for others. As a result, the permissions of myfile will be "rwxr-x---". As seen above this command is equivalent to: &lt;/p&gt;&lt;pre nd="120"&gt;chmod u=rwx,g=rw myfile; chmod o-rwx myfile;  &lt;/pre&gt; &lt;p nd="121"&gt;Here are some common uses of the octal numbers: &lt;/p&gt;&lt;p nd="122"&gt;- &lt;strong nd="123"&gt;chmod 755 myfile&lt;/strong&gt; : rwxr-xr-x, all rights to the owner, other people only read and execute;&lt;br /&gt;    - &lt;strong nd="124"&gt;chmod 644 myfile&lt;/strong&gt; : rw-r--r--, owner car read and write, other people only read;&lt;br /&gt;    - &lt;strong nd="125"&gt;chmod 777 myfile&lt;/strong&gt; : can be considered bad practice in some cases, full permissions to everybody. &lt;/p&gt;&lt;h1 nd="126"&gt;Changing file owner or group : chown, chgrp&lt;/h1&gt; &lt;p nd="127"&gt;You can give ownership of your files to somebody else, or change the group that they belong to, by using the commands "chown" and "chgrp". "chown" allows you yo change the owner of the file, and "chgrp" allows you to change its group. &lt;/p&gt;&lt;p nd="128"&gt;For instance, if George decides to give ownership of myfile to Robert, he can simply type:  &lt;/p&gt;&lt;pre nd="129"&gt;chown robert myfile&lt;/pre&gt;  &lt;p nd="130"&gt;Also, if Robert later on decides to make the file only available to members of the group "SeniorAdmin" group rather than to those of the group "Administrators", he can type: &lt;/p&gt;&lt;pre nd="131"&gt;chgrp senioradmin myfile&lt;/pre&gt;  &lt;p nd="132"&gt;Note: The "&lt;strong nd="133"&gt;chown&lt;/strong&gt;" command also allows to change the group ownership. In fact George could have directly typed the following command:  &lt;/p&gt;&lt;pre nd="134"&gt;chown robert:senioradmin myfile&lt;/pre&gt;  &lt;p nd="135"&gt;Setting the sticky bit on a directory : chmod +t  &lt;/p&gt;&lt;p nd="136"&gt;If you have a look at the /tmp permissions, in most GNU/Linux distributions, you'll see the following:  &lt;/p&gt;&lt;pre nd="137"&gt;clem@pluto:/$ ls -l | grep tmp&lt;br /&gt;drwxrwxrwt   10 root root  4096 2006-03-10 12:40 tmp&lt;/pre&gt;  &lt;p nd="138"&gt;The "t" in the end of the permissions is called the "sticky bit". It replaces the "x" and indicates that in this directory, files can only be deleted by their owners, the owner of the directory or the root superuser. This way, it is not enough for a user to have write permission on /tmp, he also needs to be the owner of the file to be able to delete it. &lt;/p&gt;&lt;p nd="139"&gt;In order to set or to remove the sticky bit, use the following commands:  &lt;/p&gt;&lt;pre nd="140"&gt;chmod +t tmp&lt;br /&gt;chmod -t tmp&lt;/pre&gt;  &lt;h1 nd="141"&gt;Setting the SGID attribute on a directory : chmod g+s&lt;/h1&gt;  &lt;p nd="142"&gt;If the SGID (Set Group Identification) attribute is set on a directory, files created in that directory inherit its group ownership. If the SGID is not set the file's group ownership corresponds to the user's default group. &lt;/p&gt;&lt;p nd="143"&gt;In order to set the SGID on a directory or to remove it, use the following commands:  &lt;/p&gt;&lt;pre nd="144"&gt;chmod g+s directory&lt;br /&gt;chmod g-s directory&lt;/pre&gt;  &lt;p nd="145"&gt;When set, the SGID attribute is represented by the letter "s" which replaces the "x" in the group permissions:  &lt;/p&gt;&lt;pre nd="146"&gt;ls -l directory&lt;br /&gt;drwxrwsr-x  10 george administrators  4096 2006-03-10 12:50 directory&lt;/pre&gt;  &lt;h1 nd="147"&gt;Setting SUID and SGID attributes on executable files : chmod u+s, chmod g+s&lt;/h1&gt;  &lt;p nd="148"&gt;By default, when a user executes a file, the process which results in this execution has the same permissions as those of the user. In fact, the process inherits his default group and user identification. &lt;/p&gt;&lt;p nd="149"&gt;If you set the SUID attribute on an executable file, the process resulting in its execution doesn't use the user's identification but the user identification of the file owner. &lt;/p&gt;&lt;p nd="150"&gt;For instance, consider the script myscript.sh which tries to write things into mylog.log :  &lt;/p&gt;&lt;pre nd="151"&gt;ls -l&lt;br /&gt;-rwxrwxrwx  10 george administrators  4096 2006-03-10 12:50 myscript.sh&lt;br /&gt;-rwxrwx---  10 george administrators  4096 2006-03-10 12:50 mylog.log&lt;/pre&gt;  &lt;p nd="152"&gt;As you can see in this example, George gave full permissions to everybody on myscript.sh but he forgot to do so on mylog.log. When Robert executes myscript.sh, the process runs using Robert's user identification and Robert's default group (robert:senioradmin). As a consequence, myscript fails and reports that it can't write in mylog.log. &lt;/p&gt;&lt;p nd="153"&gt;In order to fix this problem George could simply give full permissions to everybody on mylog.log. But this would make it possible for anybody to write in mylog.log, and George only wants this file to be updated by his myscript.sh &lt;a itxtdid="463786" target="_blank" href="http://www.linuxforums.org/#" style="border-bottom: 0.075em solid darkgreen; text-decoration: underline; color: darkgreen; background-color: transparent; padding-bottom: 1px;" class="iAs"&gt;program&lt;/a&gt;. For this he sets the SUID bit on myscript.sh:  &lt;/p&gt;&lt;pre nd="154"&gt;chmod u+s myscript.sh&lt;/pre&gt;  &lt;p nd="155"&gt;As a consequence, when a user executes the script the resulting process uses George's user identification rather than the user's. If set on an executable file, the SUID makes the process inherit the owner's user identification rather than the one of the user who executed it. This fixes the problem, and even though nobody but George can write directly in mylog.log, anybody can execute myscript.sh which updates the file content. &lt;/p&gt;&lt;p nd="156"&gt;Similarly, it is possible to set the SGID attribute on an executable file. This makes the process use the owner's default group instead of the user's one. This is done by: &lt;/p&gt;&lt;pre nd="157"&gt; chmod g+s myscript.sh &lt;/pre&gt;  &lt;p nd="158"&gt;By setting SUID and SGID attributes the owner makes it possible for other users to execute the file as if they were him or members of his default group. &lt;/p&gt;&lt;p nd="159"&gt;The SUID and GUID are represented by a "s" which replaces the "x" character respectively in the user and group permissions:  &lt;/p&gt; &lt;pre nd="160"&gt;chmod u+s myscript.sh&lt;br /&gt;ls -l&lt;br /&gt;-rwsrwxrwx  10 george administrators  4096 2006-03-10 12:50 myscript.sh&lt;br /&gt;chmod u-s myscript.sh&lt;br /&gt;chmod g+s myscript.sh&lt;br /&gt;ls -l&lt;br /&gt;-rwxrwsrwx  10 george administrators  4096 2006-03-10 12:50 myscript.sh&lt;/pre&gt;    &lt;h1 nd="161"&gt;Setting the default file creation permissions : umask&lt;/h1&gt;  &lt;p nd="162"&gt;When a file is created, its permissions are set by default depending on the umask setting. This value is usually set for all users in /etc/profile and can be obtained by typing: &lt;/p&gt;&lt;pre nd="163"&gt;umask&lt;/pre&gt;  &lt;p nd="164"&gt;The default umask value is usually 022. It is an octal number which indicates what rights will be removed by default to all new files. For instance, 022 indicates that write permissions will not be given to group and other. &lt;/p&gt;&lt;p nd="165"&gt;By default, and with a umask of 000, files get mode 666 and directories get mode 777. As a result, with a default umask value of 022, newly created files get a default mode 644 (666 - 022 = 644) and directories get a default mode 755 (777 - 022 = 755). &lt;/p&gt;&lt;p nd="166"&gt;In order to change the umask value, simply use the umask command and give it an octal number. For instance, if you want all new directories to get permissions rwxr-xr--- and files to get permissions rw-r----- by default (modes 750 and 640), you'll need to use a umask value which removes all rights to other, and write permissions to the group : 027. The command to use is: &lt;/p&gt;&lt;pre nd="167"&gt;umask 027&lt;/pre&gt;&lt;/span&gt;&lt;span nd="62" name="intelliTxt" id="intelliTXT"&gt;please, correct the article, to change line "ls -l | grep tmp" to "ls -ld tmp" , it's no good to teach people to bad behaviour... thanks&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span nd="62" name="intelliTxt" id="intelliTXT"&gt;Be very careful when using SUID/SGID. If you follow the instructions above, then any user can become you and take full controll of whatever you can do, since the SUID file is world-writable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34421871-115826886120581781?l=blueshrapnel.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blueshrapnel.blogspot.com/feeds/115826886120581781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=34421871&amp;postID=115826886120581781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115826886120581781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34421871/posts/default/115826886120581781'/><link rel='alternate' type='text/html' href='http://blueshrapnel.blogspot.com/2006/09/linux-file-permissions.html' title='Linux File Permissions'/><author><name>Karen</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02787394854727565177'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>