Archive for Technical

What is the difference between >> and 2> – Standard Input and Output Redirection explained

Off late I happen to get used to a lot of I/O redirection involved in coding and executing commands. Thus I thought summarizing them as a blog for my own reference.

The shell and many UNIX commands take their input from standard input (stdin), write output to standard output (stdout), and write error output to standard error (stderr). By default, standard input is connected to the terminal keyboard and standard output and error to the terminal screen.

The way of indicating an end-of-file on the default standard input, a terminal, is usually <Ctrl-d>.

Redirection of I/O, for example to a file, is accomplished by specifying the destination on the command line using a redirection metacharacter followed by the desired destination.

C Shell Family

Some of the forms of redirection for the C shell family are:

Character Action
> Redirect standard output
>& Redirect standard output and standard error
< Redirect standard input
>! Redirect standard output; overwrite file if it exists
>&! Redirect standard output and standard error; overwrite file if it exists
| Redirect standard output to another command (pipe)
>> Append standard output
>>& Append standard output and standard error

The form of a command with standard input and output redirection is:

% command -[options] [arguments] < input file > output file 

If you are using csh and do not have the noclobber variable set, using > and >& to redirect output will overwrite any existing file of that name. Setting noclobber prevents this. Using >! and >&!always forces the file to be overwritten. Use >> and >>& to append output to existing files.

Redirection may fail under some circumstances: 1) if you have the variable noclobber set and you attempt to redirect output to an existing file without forcing an overwrite, 2) if you redirect output to a file you don’t have write access to, and 3) if you redirect output to a directory.

Examples:

% who > names
Redirect standard output to a file named names
% (pwd; ls -l) > out
Redirect output of both commands to a file named out
% pwd; ls -l > out
Redirect output of ls command only to a file named out

Input redirection can be useful, for example, if you have written a FORTRAN program which expects input from the terminal but you want it to read from a file. In the following example, myprog, which was written to read standard input and write standard output, is redirected to read myin and write myout:

% myprog < myin > myout

You can suppress redirected output and/or errors by sending it to the null device/dev/null. The example shows redirection of both output and errors:

% who >& /dev/null

To redirect standard error and output to different files, you can use grouping:

% (cat myfile > myout) >& myerror

Bourne Shell Family

The Bourne shell uses a different format for redirection which includes numbers. The numbers refer to the file descriptor numbers (0 standard input, 1 standard output, 2 standard error). For example, 2> redirects file descriptor 2, or standard error. &n is the syntax for redirecting to a specific open file. For example 2>&1 redirects 2 (standard error) to 1 (standard output); if 1 has been redirected to a file, 2 goes there too. Other file descriptor numbers are assigned sequentially to other open files, or can be explicitly referenced in the shell scripts. Some of the forms of redirection for the Bourne shell family are:

Character Action
> Redirect standard output
2> Redirect standard error
2>&1 Redirect standard error to standard output
< Redirect standard input
| Pipe standard output to another command
>> Append to standard output
2>&1| Pipe standard output and standard error to another command

Note that < and > assume standard input and output, respectively, as the default, so the numbers 0 and 1 can be left off. The form of a command with standard input and output redirection is:

$ command -[options] [arguments] < input file > output file 

Redirection may fail under some circumstances: 1) if you have the variable noclobber set and you attempt to redirect output to an existing file without forcing an overwrite, 2) if you redirect output to a file you don’t have write access to, and 3) if you redirect output to a directory.

Examples:

$ who > names
Direct standard output to a file named names
$ (pwd; ls -l) > out
Direct output of both commands to a file named out
$ pwd; ls -l > out
Direct output of ls command only to a file named out

Input redirection can be useful if you have written a program which expects input from the terminal and you want to provide it from a file. In the following example, myprog, which was written to read standard input and write standard output, is redirected to read myin and write myout.

$ myprog < myin > myout

You can suppress redirected output and/or error by sending it to the null device/dev/null. The example shows redirection of standard error only:

$ who 2> /dev/null

To redirect standard error and output to different files (note that grouping is not necessary in Bourne shell):

$ cat myfile > myout 2> myerror

 

P.S. This works the same way in all operating system and is universal.

Courtesy : http://www.mathinfo.u-picardie.fr/asch/f/MeCS/courseware/users/help/general/unix/redirection.html

Linux File System Hierarchy

Do you need to know the file system hierarchy. You don’t have to search in Google to get familiarized with it. It’s there within your distro. Yes, Just type the following command to list the manual containing a detailed information about the file system hierarchy.

$ man hier

Playing around with fbcmd [HOWTO]

This post has been lying around my Drafts for about a month. While I was looking for ways to find mutual friends between two persons in Facebook, I realized that it is a painful job which involves a lot of playing around with Facebook API’s to get mutual friends listed. Whereas finding Mutual friends in Twitter is quite simple and so does with Identica too. You may find how to find them in this blog.

Let’s see how to achieve this..

1. Install fbcmd as per the blog post

2. Open your terminal and type the following to find mutual friendship between you and your friend

$ fbcmd mutual “<Enter_your_friend’s_full_name_within_quotes>”

For Example :

$ fbcmd mutual “vigneshwaran Raveendran”

NAME                     FRIEND_NAME

Vigneshwaran Raveendran  Kashi Vishwanath Revathy Ganesan

Karthikumar SK

Dhameswaran Natarajan

Mohindar Amarnath

Kamesh Jayachandran

[snip]

Isn’t that awesome. The following are a few commands that I felt it interesting..

How to list [and optionally save] all your friend’s profile photos ?

$ fbcmd ppics =all /tmp/fbcmd/ppics/

How to list [and optionally save] all photos where friend(s) are tagged

$ fbcmd fpics

How to list any friends who are currently online

$ fbcmd fonline

How to export all your friend’s B’day date in csv format ?

$ fbcmd finfo birthday_date -csv

How to know your profile ID ?

$ fbcmd whoami

How to set your status update
$ fbcmd status “is excited to play with fbcmd”
What not? Start playing with this app
$ fbcmd help #is your friend..
With this application, you can even schedule for a list of status updates with the help of a cron job :)
for additional help, examples, parameter usage, flists, preference settings,
visit the FBCMD wiki at:

[HOWTO] Access facebook through command line interface (CLI)

A majority of linux users prefer sticking to their terminal rather than accessing through a GUI for most of their daily tasks. Have you ever wondered if there is any way to access facebook from terminal? The answer is Yes… Now, it’s possible to access facebook from terminal. fbcmd application gives you a command line interface for Facebook. It is surprisingly available for Windows OS as well.

Installation of this app in Linux is pretty simple.

Make sure you have php installed in your system. If not, install as follows

$ sudo apt-get install php5 php5-cli

To test your PHP environment, try typing at a command prompt:

php -r “echo phpversion();”

While you’re at it, make sure this outputs “1″.

php -r “echo ini_get(‘allow_url_fopen’);”

Download fbcmd.zip from the this link and Unzip the file

$ unzip fbcmd.zip

$ cd fbcmd

To finish the installation:

$ sudo php fbcmd_update.php sudo

$ php fbcmd_update.php install

type fbcmd to begin

$ fbcmd

Welcome to fbcmd! [version 1.0-beta5-dev1]

This application needs to be authorized to access your facebook account.

You are almost done! This application needs to be authorized to access your facebook account. This is a one time process.

Step 1: Allow basic (initial) access to your acount via this url, execute:

$ fbcmd go access

 

Step 2: Generate an offline authorization code, execute:

$ fbcmd go auth

Step 3: Obtain your authorization code (XXXXXX) and then execute:

$ fbcmd auth XXXXXX

Step 4: Most FBCMD commands require additional permissions. To grant default permissions, execute

$ fbcmd addperm

You are done !

To know the syntax , execute

$ fbcmd help

Start playing around with it and let me know your comments.

Don’t forget to visit the following post to continue reading this..

http://www.ijeyanthan.com/blog/archives/playing-around-with-fbcmd-howto

[HOWTO] Enable Maximize, Minimize buttons on the title bar in Gnome 3

Though there are many blog posts available to show how to enable Maximize, Minimize buttons on the title bar in Gnome 3, this post is for my personal reference ;) .

As you know, there will be no title bar controls for minimize, maximize/restore. To enable them, open up the terminal and type in (or copy/paste) the following command:

I prefer the buttons to be in right corner.

gconftool-2 –set /desktop/gnome/shell/windows/button_layout –type string :minimize,maximize,close

Now, press Alt+F2, type in “r” without quotes and press enter. This will reload Gnome-Shell and the changes will come into effect.
If you login with fallback mode, you may still find the icons showing at left.

$ sudo apt-get install gconf-editor

Press Alt+F2 to bring up the Run Application dialog box, enter “gconf-editor”

The key that we want to edit is in apps/metacity/general

Change the text in the button_layout key Value text field to:

menu:maximize,minimize,close

Phew, We are done.