How do I find the url for my cgi-bin?

last updated in Categories , ,

The CGI is acronym for Common Gateway Interface. It is a standard for interfacing external applications with Apache Web servers. A CGI program is executed in real-time, so that it can output dynamic information. It can be written in Perl, Php, Bash, C/C++ or other programming languages. But how do I find the url for my cgi-bin? It’s not in my /var/www/ directory.
Apache web server use ScriptAlias directive defines cgi-bin directory that contain server scripts. You can use open Apache web server configuration file using text editor such as vi and look for ScriptAlias directive:

httpd.conf file location:
Debian Linux:

$ vi /etc/apache-perl/httpd.conf

Red Hat/ Fedora Core Linux:

$ vi  /etc/httpd/conf/httpd.conf


$ vi  /usr/local/etc/httpd.conf

You can also use grep command as follows to find out your cgi-bin directory:

$ grep 'ScriptAlias'  /etc/httpd/conf/httpd.conf
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

/usr/lib/cgi-bin/ is cgi-bin directory. If you have public_htm directory then cgi-bin directory should be inside this directory. Once you located cgi-bin directory you can use it.

Default cgi-bin directory locations:

  • Red Hat Linux: /var/www/cgi-bin/
  • Fedora Linux: /var/www/cgi-bin/
  • Debian Linux: /usr/lib/cgi-bin/
  • FreeBSD: /usr/local/www/cgi-bin/

Finally your url location depends upon directory location. You can use http://ip-address/cgi-bin or http://ip-address/~yourname/cgi-bin (replace ip-address with your domain name)

How do I run X windows program as normal user?

last updated in Categories

Microsoft windows XP has runas command which allows a user to run specific tools and programs with different permissions than the user’s current logon provides. Linux and other UNIX like operating system provides the su or sudo command for same purpose. However, su/sudo command is not so useful when it comes to X program. For example when you logged in as a normal user, you need to run an X window application as root. If I run application as follows:

$ su -
# xeyes

It will bump you back with an error:
(program:15082): Gtk-WARNING **: cannot open display:
** WARNING ** cannot open display

However both KDE and Gnome come with tools to deal with this problem.

Method # 1:
If you are using KDE then use following command at shell prompt:
kdesu command-name

$ kdesu xeyes

Method # 2:
If you are using Gnome then use following command at shell prompt:

$ gksuexec

Or use GUI itself, click on Applications > System tools > Select Run as different user
Method # 3:
Create runas alias as follows:

$ alias runas='su -c $@'

Add above alias to your bash startup script

$ echo "alias runas='su -c $@'" >> .bash_profile

You can now use alias as follows to start any x program

$ runas program-name
$ runas xeyes

Method # 4: The old way
The problem is with two environment variable DISPLAY and XAUTHORITY. You need to setup them correctly to run X windows program as a root user while logged in as a normal user. So how do you fix this problem? Simply set these two variables to point to current logged in users environment variable. Let us assume you are currently login as vivek user.

Step # 1 Become super-use

vivek@debian:~$ su -

Step # 2 Setup variables

# export DISPLAY=0:0
# export XAUTHORITY=/home/vivek/.Xauthority

Step # 3 Execute X program as a root user

# xeyes

How do I find out what network services are running or listing under Linux?

last updated in Categories ,

Q. How do I find out what network service are running under Linux operating system?

A. For security reason it is necessary to find out what services are running. With the help of netstat command, you can print information about the Linux networking subsystem including running services. It can display program name and PID for each socket belongs to. Use netstat as follows:

$ netstat -atup


$ netstat -atup | grep LISTEN


  • -t : Select all TCP services
  • -u : Select all UDP services
  • -a : Display all listening and non-listening sockets.
  • -p : Display the PID and name of the program to which each socket belongs

Linux setup shared directory

last updated in Categories

Sharing a directory among users in same group is one of the essential tasks. You need to use chmod command and add user to appropriate group. To make idea clear here is an scenario:

  • /home/myproj : is shared directory
  • usr1, usr2, … usrN : would like to work and share files in /home/myproj directory
  • padmin : Main project administrator user

Step # 1: Create a shared directory /home/myproj
If this directory does not exist then create it:

# mkdir /home/myproj

Step # 2: Create the group shared group
You need to create a new group. Let us assume group name is myproj

# groupadd myproj

Step # 3: Add user project administrator (padmin) and setup password:

# useradd -d /home/myproj/ -g myproj -m padmin
# passwd padmin

Step #4: Add rest of users to group myproj

# useradd -d /home/myproj/ -g myproj usr1
# passwd usr1

Add second user:

# useradd -d /home/myproj/ -g myproj usr2
# passwd usr2

… and so on…

Step #5: Setup permission on /home/myproj directory as follows:
(a) Setup group ownership to myproj group:

# chown -R padmin.myproj /home/myproj/

(b) Setup full permission for group and owner on a directory:

# chmod -R 775 /home/myproj/

(c) Setup sgid bit. So what is sgid bit? Normally whenever you creates file in a directory it belong to default group of user. When a file is created in a directory with the sgid bit set it belogns to the same group as the directory. The result is all users of myproj group can create/alter files in /home/myproj directory:

# chmod -R 2775 /home/myproj/


# chmod -R g+s /home/myproj/

See also:

Do I need antivirus software for linux?

last updated in Categories ,

To be frank there is no serious viruses found so far for Linux. The main reason is Linux is quite secure as compare to Windows. Also, viruses cannot cause any serious damage if they are not activated by root user (that is why you need to use su or sudo command and always login as normal user). However if you are using any one of the following program then consider getting a good virus scanner:

  1. Windows via Samba
  2. Linux Email server
  3. Linux as a router etc

Most are windows virus that, may affects above program.

See also:

How do I find out the MAC address of my Linux or FreeBSD system?

last updated in Categories , , , , ,

Q. Can you tell me how can I find out MAC address under Linux or FreeBSD server?

A. A mac address is acronym for media access control address, is a unique address assigned to almost all-networking hardware such as Ethernet cards, router etc. Most layer 2 network protocols use one of three numbering spaces managed by the IEEE: MAC-48, EUI-48, and EUI-64, which are designed to be globally unique. (see mac address at wikipedia for more information).

Following command work with Linux and other UNIX oses:

ifconfig command

Ifconfig is used to configure the kernel-resident network interfaces.

In order to find out MAC address of system you can use ifconfig command as follows:
$ /sbin/ifconfig | grep HWaddr

eth0      Link encap:Ethernet  HWaddr 00:0F:EA:91:04:07


$ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0F:EA:91:04:07
        inet addr:  Bcast:  Mask:
        inet6 addr: fe80::20f:eaff:fe91:407/64 Scope:Link
        RX packets:60400 errors:0 dropped:0 overruns:0 frame:0
        TX packets:109216 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:69273219 (66.0 MiB)  TX bytes:14285799 (13.6 MiB)
        Interrupt:18 Base address:0xc000

lo        Link encap:Local Loopback
        inet addr:  Mask:
        inet6 addr: ::1/128 Scope:Host
        UP LOOPBACK RUNNING  MTU:16436  Metric:1
        RX packets:3869 errors:0 dropped:0 overruns:0 frame:0
        TX packets:3869 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0
        RX bytes:396498 (387.2 KiB)  TX bytes:396498 (387.2 KiB)

OR as a root user type following command:

# grep eth0 /var/log/dmesg
eth0: RealTek RTL8139 at 0xc000, 00:0f:ea:91:04:07, IRQ 18
eth0:  Identified 8139 chip type 'RTL-8100B/8139D'
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1

FreeBSD example

# ifconfig

lnc0: flags=108843 mtu 1500
        inet 74.xx.yy.zzz netmask 0xfffffff0 broadcast 74.xx.yyy.zzz
        ether 00:0c:29:b8:92:8b
plip0: flags=108810 mtu 1500
lo0: flags=8049 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
        inet6 ::1 prefixlen 128 
        inet netmask 0xff000000

See also: