LinuxQuestions.org
Visit Jeremy's Blog.
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question? If it is not in the man pages or the how-to's this is the place!

Notices

Reply
 
Search this Thread
Old 08-30-2012, 02:08 AM   #16
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,245
Blog Entries: 16

Rep: Reputation: 233Reputation: 233Reputation: 233

This might fix things. I think. Please try.
Code:
#!/bin/bash

#Script to add a user to this Linux system

clear

if [ $(id -u) -eq 0 ]; then
	function security {
		chown $username:ftp $sourcedir
		chmod 775 $sourcedir
	}

	function userinfo {
		read -p "Enter User Name : " username

		while [ -z $username ]|| egrep "^$username" /etc/passwd 1>/dev/null; do
			echo -ne "Either user exists or you entered a blank, enter username again: ";read -e username
		done

		echo -ne "Enter your password: ";read -s password

		while [ -z $password ]; do
			echo -ne "\nEnter your password again: ";read -s -e password
		done

		echo -ne "\nPlease Enter your User ID Number: "; read -ern5 uid
		while [[ ! $uid =~ ^[0-9]+$ ]]||egrep $uid /etc/passwd >/dev/null; do
			echo -ne "Please re-enter your uid positive intergers only: ";read -ern5 uid
		done

		read -p "Enter a Comment : " comment
		read -p "Enter Users Source Directory : " sourcedir
		while [ ! -d "$sourcedir" ]; do
			echo -ne "\n$sourcedir Directory Not Found! Please re-enter: "; read sourcedir
		done
		pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) # passing the password entered
	}

	function shellsel {
		echo ""
		echo "Select the type of shell you will be using"
		echo ""
		echo -e "1) Bash Shell - SFTP Secure\n" # Shell selection statement
		echo -e "2) False Shell - FTP Unsecure\n"
		echo -ne "Enter choice: ";read shell;
		case "$shell" in
		1)
			shell=/bin/bash # case statment for shell selection.
			commentstatic="Internal SFTP Account"
			useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
			echo -e "Copying System Files ...."
			cd /nas_ftp5/Customer/Troy/T_Skel
			cp -Rp `ls` $sourcedir
			echo -e "Finished Copying System Files ..."
			tail -1 /etc/passwd > $sourcedir/etc/passwd
			echo "$username" >> /etc/ftpusers
			echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
			;;
		2)
			shell=/bin/false
			commentstatic="Internal FTP Account"
			useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
			echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
			;;
		esac
	}

	echo -ne "\nIndividual Account or Environment Account\n\n"
	echo -e "1) Individual Account\n"
	echo -e "2) Environment Account\n"
	echo -ne "Enter choice: "; read acctchoice;

	case "$acctchoice" in
	1)
		userinfo
		shellsel
		security
		;;
	2)
		userinfo
		shellsel
		cd /forms
		ln -s $sourcedir /forms/${username}sa
		security

		while true; do
			echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm
			case $confirm in
			[Yy]* )
				echo -ne "\nEnter ftp directory: ";read -e ftpdir

				while [ ! -d "$ftpdir" ]; do
					echo -ne "\n$ftpdir Directory Not Found! Please re-enter: "; read ftpdir
				done

				usernameftp=${username}ftp
				useridftp=$userid
				let $useridftp++
				commentstatic2="Internal Secondary FTP Account"
				shellftp=`egrep $username /etc/passwd | cut -d: -f7`
				useradd -u $useridftp -c "$comment $commentstatic2" -d $ftpdir -s $shellftp $usernameftp

				egrep $usernameftp /etc/passwd >> /etc/ftpusers
				echo -e "$usernameftp" '\t' "$ftpdir" >> /etc/security/chroot.conf
				egrep $usernameftp /etc/passwd >> $ftpdir/etc/passwd
				;;
			[Nn]* )
				exit
				;;
			esac
		done
		;;
	esac
fi
Note: I wonder if you had to add space between the patterns and ')' within case statements e.g. '[Yy]* )' and '[Nn]* )'. Also please consider possible IFS-based variable expansion within unquoted variables. e.g. 'case $var in' and '[ $(...) ... ]'.

Last edited by konsolebox; 08-30-2012 at 02:13 AM.
 
Old 08-30-2012, 02:21 AM   #17
pan64
Guru
 
Registered: Mar 2012
Location: Hungary
Distribution: debian i686 (solaris)
Posts: 5,142

Rep: Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364
you should not put functions inside if.

instead of writing if (root user) then do this you would better write:
if (not root user) print error message and exit.
do the job.
 
Old 08-30-2012, 02:54 AM   #18
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,245
Blog Entries: 16

Rep: Reputation: 233Reputation: 233Reputation: 233
Quote:
Originally Posted by pan64 View Post
you should not put functions inside if.
Do you mean in general?
 
Old 08-30-2012, 03:04 AM   #19
pan64
Guru
 
Registered: Mar 2012
Location: Hungary
Distribution: debian i686 (solaris)
Posts: 5,142

Rep: Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364Reputation: 1364
yes, in general it is not a good practice.
 
Old 08-30-2012, 03:41 AM   #20
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,245
Blog Entries: 16

Rep: Reputation: 233Reputation: 233Reputation: 233
Quote:
Originally Posted by pan64 View Post
yes, in general it is not a good practice.
Oh well I disagree. It depends on the purpose
What's the general problem that would occur if you do that?
 
Old 08-31-2012, 12:14 PM   #21
slufoot80
Member
 
Registered: Nov 2011
Posts: 62

Original Poster
Rep: Reputation: Disabled
this code errors out at the done line at the bottom, why?
usr/sbin/adduser: line 42: syntax error near unexpected token `done'
/usr/sbin/adduser: line 42: ` done'

Code:
yesNo()
{
echo -n "$* (Y/N)? "
 read yn
case $yn in
         yes|Yes|YES|y|Y)
            echo -ne "\nEnter ftp directory: ";read -e ftpdir

        while [ ! -d "$ftpdir" ];
        do
        echo -ne "\n$ftpdir Directory Not Found! Please re-enter: "; read ftpdir
        done

        usernameftp=$username"ftp"
        useridftp=$userid
        let $useridftp++
        commentstatic2="Internal Secondary FTP Account"
        shellftp=`egrep $username /etc/passwd| cut -d: -f7`
        useradd -u $useridftp -c "$comment $commentstatic2" -d $ftpdir -s $shellftp $usernameftp

        egrep $usernameftp /etc/passwd >> /etc/ftpusers
        echo -e "$usernameftp" '\t' "$ftpdir" >> /etc/security/chroot.conf
        egrep $usernameftp /etc/passwd >> $ftpdir/etc/passwd
            ;;
         no|No|n|N|NO)
            exit
            ;;
      esac
   done
}
 
Old 08-31-2012, 12:41 PM   #22
slufoot80
Member
 
Registered: Nov 2011
Posts: 62

Original Poster
Rep: Reputation: Disabled
Exclamation I changed thing around and added an if statement

the error I get now is "/usr/sbin/adduser: line 140: syntax error near unexpected token `fi'
/usr/sbin/adduser: line 140: `fi'"

Code:
#Script to add a user to this Linux system
#!/bin/bash 

clear

if [ $(id -u) -eq 0 ]; then

function security
{
chown $username:ftp $sourcedir
chmod 775 $sourcedir
}

yesNo()
{
   #repeat if yes or no option not valid
   while true 
   do
      #$* read ever parameter giving to the yesNo function which will be the message
      echo -n "$* (Y/N)? "
      #junk holds the extra parameters yn holds the first parameters
      read yn junk
      #check for difference cases
      case $yn in
         yes|Yes|YES|y|Y)
            return 0
            ;;
         no|No|n|N|NO)
            return 1
            ;;
      esac
   done   
}

function userinfo
{
        read -p "Enter User Name : " username

        while [ -z $username ]|| egrep "^$username" /etc/passwd 1>/dev/null;
        do
        echo -ne "Either user exists or you entered a blank, enter username again: ";read -e username
        done

        echo -ne "Enter your password: ";read -s password

        while [ -z $password ];
        do
        echo -ne "\nEnter your password again: ";read -s -e password
        done

        echo -ne "\nPlease Enter your User ID Number: ";read -ern5 uid
        while [[ ! $uid =~ ^[0-9]+$ ]]||egrep $uid /etc/passwd >/dev/null; do
        echo -ne "Please re-enter your uid positive intergers only: ";read -ern5 uid
        done

        read -p "Enter a Comment : " comment
        read -p "Enter Users Source Directory : " sourcedir
        while [ ! -d "$sourcedir" ];
        do
        echo -ne "\n$sourcedir Directory Not Found! Please re-enter: "; read sourcedir
        done 
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) # passing the password entered
}

function shellsel
{
        echo ""
        echo "Select the type of shell you will be using"
        echo""
        echo -e "1) Bash Shell - SFTP Secure\n" # Shell selection statement
        echo -e "2) False Shell - FTP Unsecure\n"
        echo -ne "Enter choice: ";read shell;
case $shell in
1)
        shell=/bin/bash # case statment for shell selection.
        commentstatic="Internal SFTP Account"
        useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
        echo -e "Copying System Files ...."
        cd /nas_ftp5/Customer/Troy/T_Skel
        cp -Rp `ls` $sourcedir
        echo -e "Finished Copying System Files ..."
        tail -1 /etc/passwd > $sourcedir/etc/passwd
        echo "$username" >> /etc/ftpusers
        echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
;;
2)
        shell=/bin/false
        commentstatic="Internal FTP Account" 
        useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
        echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
;;
esac

}

        echo -ne "\nIndividual Account or Environment Account\n\n"
        echo -e "1) Individual Account\n"
        echo -e "2) Environment Account\n"
        echo -ne "Enter choice: ";read acctchoice;

case $acctchoice in
1) 
        userinfo 
        shellsel 
        security
;;
2)
        userinfo 
        shellsel 
        cd /forms
        ln -s $sourcedir /forms/${username}sa
        security
esac
        while true; do
        echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm

if yesNo 
then
   echo -ne "\nEnter ftp directory: ";read -e ftpdir

        while [ ! -d "$ftpdir" ];
        do
        echo -ne "\n$ftpdir Directory Not Found! Please re-enter: "; read ftpdir
        done

        usernameftp=$username"ftp"
        useridftp=$userid
        let $useridftp++
        commentstatic2="Internal Secondary FTP Account"
        shellftp=`egrep $username /etc/passwd| cut -d: -f7`
        useradd -u $useridftp -c "$comment $commentstatic2" -d $ftpdir -s $shellftp $usernameftp

        egrep $usernameftp /etc/passwd >> /etc/ftpusers
        echo -e "$usernameftp" '\t' "$ftpdir" >> /etc/security/chroot.conf
        egrep $usernameftp /etc/passwd >> $ftpdir/etc/passwd
else
  # echo 'You choose not to continue'
        exit
fi
fi
 
Old 08-31-2012, 01:37 PM   #23
grail
Guru
 
Registered: Sep 2009
Location: Perth
Distribution: Manjaro
Posts: 7,689

Rep: Reputation: 1987Reputation: 1987Reputation: 1987Reputation: 1987Reputation: 1987Reputation: 1987Reputation: 1987Reputation: 1987Reputation: 1987Reputation: 1987Reputation: 1987
Maybe if you indented to your script you might be able to see where your errors are? Also, if the #! is not the first line the script will not work.
And as has been mentioned several times, set -xv would show you the execution of the script and where your errors may be coming from.
 
Old 08-31-2012, 01:47 PM   #24
slufoot80
Member
 
Registered: Nov 2011
Posts: 62

Original Poster
Rep: Reputation: Disabled
Exclamation output with set -xv

Code:
linux-bl9t:~ # adduser
clear
+ clear
































if [ $(id -u) -eq 0 ]; then

function security
{
chown $username:ftp $sourcedir
chmod 775 $sourcedir
}

yesNo()
{
   #repeat if yes or no option not valid
   while true 
   do
      #$* read ever parameter giving to the yesNo function which will be the message
      echo -n "$* (Y/N)? "
      #junk holds the extra parameters yn holds the first parameters
      read yn junk
      #check for difference cases
      case $yn in
         yes|Yes|YES|y|Y)
            return 0
            ;;
         no|No|n|N|NO)
            return 1
            ;;
      esac
   done   
}

function userinfo
{
        read -p "Enter User Name : " username

        while [ -z $username ]|| egrep "^$username" /etc/passwd 1>/dev/null;
        do
        echo -ne "Either user exists or you entered a blank, enter username again: ";read -e username
        done

        echo -ne "Enter your password: ";read -s password

        while [ -z $password ];
        do
        echo -ne "\nEnter your password again: ";read -s -e password
        done

        echo -ne "\nPlease Enter your User ID Number: ";read -ern5 uid
        while [[ ! $uid =~ ^[0-9]+$ ]]||egrep $uid /etc/passwd >/dev/null; do
        echo -ne "Please re-enter your uid positive intergers only: ";read -ern5 uid
        done

        read -p "Enter a Comment : " comment
        read -p "Enter Users Source Directory : " sourcedir
        while [ ! -d "$sourcedir" ];
        do
        echo -ne "\n$sourcedir Directory Not Found! Please re-enter: "; read sourcedir
        done 
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) # passing the password entered
}

function shellsel
{
        echo ""
        echo "Select the type of shell you will be using"
        echo""
        echo -e "1) Bash Shell - SFTP Secure\n" # Shell selection statement
        echo -e "2) False Shell - FTP Unsecure\n"
        echo -ne "Enter choice: ";read shell;
case $shell in
1)
        shell=/bin/bash # case statment for shell selection.
        commentstatic="Internal SFTP Account"
        useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
        echo -e "Copying System Files ...."
        cd /nas_ftp5/Customer/Troy/T_Skel
        cp -Rp `ls` $sourcedir
        echo -e "Finished Copying System Files ..."
        tail -1 /etc/passwd > $sourcedir/etc/passwd
        echo "$username" >> /etc/ftpusers
        echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
;;
2)
        shell=/bin/false
        commentstatic="Internal FTP Account" 
        useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
        echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
;;
esac

}

        echo -ne "\nIndividual Account or Environment Account\n\n"
        echo -e "1) Individual Account\n"
        echo -e "2) Environment Account\n"
        echo -ne "Enter choice: ";read acctchoice;

case $acctchoice in
1) 
        userinfo 
        shellsel 
        security
;;
2)
        userinfo 
        shellsel 
        cd /forms
        ln -s $sourcedir /forms/${username}sa
        security
esac
        while true; do
        echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm

if yesNo 
then
   echo -ne "\nEnter ftp directory: ";read -e ftpdir

        while [ ! -d "$ftpdir" ];
        do
        echo -ne "\n$ftpdir Directory Not Found! Please re-enter: "; read ftpdir
        done

        usernameftp=$username"ftp"
        useridftp=$userid
        let $useridftp++
        commentstatic2="Internal Secondary FTP Account"
        shellftp=`egrep $username /etc/passwd| cut -d: -f7`
        useradd -u $useridftp -c "$comment $commentstatic2" -d $ftpdir -s $shellftp $usernameftp

        egrep $usernameftp /etc/passwd >> /etc/ftpusers
        echo -e "$usernameftp" '\t' "$ftpdir" >> /etc/security/chroot.conf
        egrep $usernameftp /etc/passwd >> $ftpdir/etc/passwd
else
  # echo 'You choose not to continue'
        exit
fi
fi
/usr/sbin/adduser: line 139: syntax error near unexpected token `fi'
/usr/sbin/adduser: line 139: `fi'
 
Old 08-31-2012, 02:28 PM   #25
slufoot80
Member
 
Registered: Nov 2011
Posts: 62

Original Poster
Rep: Reputation: Disabled
in the code it seems not to be grabbing the userid it sees it as "1" in stead of applying or adding 1 to the previous userid, error message "useridftp=$userid"

Code:
useridftp=$userid
let useridftp++
 
Old 08-31-2012, 08:54 PM   #26
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,245
Blog Entries: 16

Rep: Reputation: 233Reputation: 233Reputation: 233
I no longer follow where this goes. As grail suggested it's best if you properly indent your code. This is helpful so that you would easily see which part of your code makes a error with respect to syntax. When posting the code, it would also be easy for others to read it. Also, as I've said, you should close your open variables around double quotes (those that could be expanded with IFS).
 
Old 08-31-2012, 09:44 PM   #27
slufoot80
Member
 
Registered: Nov 2011
Posts: 62

Original Poster
Rep: Reputation: Disabled
Exclamation I found the problem,

I was calling the wrong variable, but now I have a new problem when asked

"echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm", it works just fine but when finished it ask the same question again it doesn't exit when done, what do I do about that?

Code:
#!/bin/bash

#Script to add a user to this Linux system

clear

if [ $(id -u) -eq 0 ]; then
        function security {
                chown $username:ftp $sourcedir
                chmod 775 $sourcedir
        }

        function userinfo {
                read -p "Enter User Name : " username

                while [ -z $username ]|| egrep "^$username" /etc/passwd 1>/dev/null; do
                        echo -ne "Either user exists or you entered a blank, enter username again: ";read -e username
                done

                echo -ne "Enter your password: ";read -s password

                while [ -z $password ]; do
                        echo -ne "\nEnter your password again: ";read -s -e password
                done

                echo -ne "\nPlease Enter your User ID Number: "; read -ern5 uid
                while [[ ! $uid =~ ^[0-9]+$ ]]||egrep $uid /etc/passwd >/dev/null; do
                        echo -ne "Please re-enter your uid positive intergers only: ";read -ern5 uid
                done

                read -p "Enter a Comment : " comment
                read -p "Enter Users Source Directory : " sourcedir
                while [ ! -d "$sourcedir" ]; do
                        echo -ne "\n$sourcedir Directory Not Found! Please re-enter: "; read sourcedir
                done
                pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) # passing the password entered
        }

        function shellsel {
                echo ""
                echo "Select the type of shell you will be using"
                echo ""
                echo -e "1) Bash Shell - SFTP Secure\n" # Shell selection statement
                echo -e "2) False Shell - FTP Unsecure\n"
                echo -ne "Enter choice: ";read shell;
                case "$shell" in
                1)
                        shell=/bin/bash # case statment for shell selection.
                        commentstatic="Internal SFTP Account"
                        useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
                        echo -e "Copying System Files ...."
                        cd /nas_ftp5/Customer/Troy/T_Skel
                        cp -Rp `ls` $sourcedir
                        echo -e "Finished Copying System Files ..."
                        tail -1 /etc/passwd > $sourcedir/etc/passwd
                        echo "$username" >> /etc/ftpusers
                        echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
                        ;;
                2)
                        shell=/bin/false
                        commentstatic="Internal FTP Account"
                        useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
                        echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
                        ;;
                esac
        }

        echo -ne "\nIndividual Account or Environment Account\n\n"
        echo -e "1) Individual Account\n"
        echo -e "2) Environment Account\n"
        echo -ne "Enter choice: "; read acctchoice;

        case "$acctchoice" in
        1)
                userinfo
                shellsel
                security
                ;;
        2)
                userinfo
                shellsel
                cd /forms
                ln -s $sourcedir /forms/${username}sa
                security

                while true; do
                        echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm
                        case $confirm in
                        [Yy]* )

                                echo -ne "Enter your password: ";read -s passwordftp

                                while [ -z $password ]; do
                                echo -ne "\nEnter your password again: ";read -s -e passwordftp echo -ne "\nEnter ftp directory: ";read -e ftpdir
                                done
                                passftp=$(perl -e 'print crypt($ARGV[0], "passwordftp")' $passwordftp) # passing the password entered

                                echo -ne "\nEnter ftp directory: ";read -e ftpdir
                                while [ ! -d "$ftpdir" ]; do
                                        echo -ne "\n$ftpdir Directory Not Found! Please re-enter: "; read ftpdir
                                done

                                usernameftp=${username}ftp
                                useridftp=$uid
                                let useridftp++
                                commentstatic2="Internal Secondary FTP Account"
                                shellftp=`egrep $username /etc/passwd | cut -d: -f7`
                                useradd -u $useridftp -p $passftp -c "$comment $commentstatic2" -d $ftpdir -s $shellftp $usernameftp

                                egrep $usernameftp /etc/passwd | cut -d: -f1 >> /etc/ftpusers
                                echo -e "$usernameftp" '\t' "$ftpdir" >> /etc/security/chroot.conf
                                egrep $usernameftp /etc/passwd >> $ftpdir/etc/passwd
                                ;;
                        [Nn]* )
                                exit
                                ;;
                        esac
                done
                ;;
        esac
fi
 
Old 08-31-2012, 11:03 PM   #28
konsolebox
Senior Member
 
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,245
Blog Entries: 16

Rep: Reputation: 233Reputation: 233Reputation: 233
Perhaps you don't have to place them in a "while true; do ...; done" block?
 
  


Reply

Tags
shell scripting


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to pass command line arguments from one shell script to another shell script VijayaRaghavanLakshman Linux - Newbie 5 01-20-2012 10:12 PM
Executing a Shell script with 654 permissions inside another shell script. changusee2k Linux - Newbie 2 06-07-2011 08:58 PM
How to search for missing files and pass their names on to another shell script djslothario Linux - Newbie 3 08-07-2009 01:59 AM
shell script problem, want to use shell script auto update IP~! singying304 Programming 4 11-29-2005 06:32 PM


All times are GMT -5. The time now is 07:51 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration