Thursday, October 18, 2012

How to find the current shell in UNIX Solaris Linux?

This method works perfectly in any shell.

NOTE: $$ holds the process id of current shell.

[penguin@cheetah:/home/penguin]#ps | grep -i `echo $$`
 18530             0:00 ksh

[penguin@cheetah:/home/penguin]#bash
bash-3.00$ ps | grep -i `echo $$`
 18574 pts/196     0:00 bash

bash-3.00$ csh
cheetah% ps | grep -i `echo $$`
 18578 pts/196     0:00 csh

cheetah% tcsh
> ps | grep -i `echo $$`
 18590             0:00 tcsh


Monday, October 1, 2012

What is meant by Pipe and Filter in Unix or Linux?

PIPE:
Pipe is a way of passing data from standard output of one process to standard input of another process.

Filter:
It is a program that by default reads from standard input and writes to standard output.

Friday, September 28, 2012

How to list only hidden files in UNIX?

ls -1A | grep '^\.'

Eg:


[vjsujay@cheetah:/home/vjsujay]#ls -1A | grep '^\.'
.profile
.recently-used
.sh_history
.softwareupdate
.ssh
[vjsujay@cheetah:/home/vjsujay]#

[vjsujay@cheetah:/home/vjsujay]#ls -1a | grep '^\.'
.
..
.profile
.recently-used
.sh_history
.softwareupdate
.ssh
[vjsujay@cheetah:/home/vjsujay]#


FYI.

-a will list hidden files along with default directories single dot(.) and double-dot(..)
-A will list hidden files without single dot and double dot

Thursday, September 27, 2012

How to update and replace files in a tar archive?


Question 1: How to update an existing tarball contents with newfile(s)?
Answer: We have to use the function ‘u’ to update newfile(s) to an existing tarball.

Question 2: How to replace an existing tarball contents with newfile(s)?
Answer: We have to use the function ‘r’ to replace newfile(s) to an existing tarball.


I am providing the definition of function update(u) and replace(c) as per solaris man page.

Function letters           Function
r                                  Replace. The named files are written at the end of  the tarfile
u                                  Update. The named files are written at the end  of  the tarfile  if  they are not already in the tarfile, or if they have been modified since last written to that tar-file.

Example:


[st39422@dios8:/home/st39422]#ls -l fileABC.tar Aiszipped.zip Biszipped.zip
-rw-r--r--   1 st39422  users    7486342 Aug  8 14:19 Aiszipped.zip
-rw-r--r--   1 st39422  users    11256018 Aug  8 14:19 Biszipped.zip
-rw-r--r--   1 st39422  users       8192 Aug  6 12:55 fileABC.tar

Creation of a tarball: AB.tar

[st39422@dios8:/home/st39422]#tar -cvf AB.tar Aiszipped.zip Biszipped.zip
a Aiszipped.zip 7311K
a Biszipped.zip 10993K
[st39422@dios8:/home/st39422]#

Contents of the created tarball: AB.tar

[st39422@dios8:/home/st39422]#tar -tvf AB.tar
-rw-r--r-- 48153/63002 7486342 Aug  8 14:19 2012 Aiszipped.zip
-rw-r--r-- 48153/63002 11256018 Aug  8 14:19 2012 Biszipped.zip
[st39422@dios8:/home/st39422]#

Updating a file(fileABC.tar) to the existing tar archive(AB.tar):

[st39422@dios8:/home/st39422]#tar -uvf  AB.tar  fileABC.tar
a fileABC.tar 8K
[st39422@dios8:/home/st39422]#

[st39422@dios8:/home/st39422]#tar -tvf AB.tar
-rw-r--r-- 48153/63002 7486342 Aug  8 14:19 2012 Aiszipped.zip
-rw-r--r-- 48153/63002 11256018 Aug  8 14:19 2012 Biszipped.zip
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
[st39422@dios8:/home/st39422]#

If you try to update the already available file in the archive, it will be added at the end of the archive; provided the file is modified. Otherwise it will be ignored.

[st39422@dios8:/home/st39422]#tar -uvf AB.tar fileABC.tar
[st39422@dios8:/home/st39422]#tar -tvf AB.tar
-rw-r--r-- 48153/63002 7486342 Aug  8 14:19 2012 Aiszipped.zip
-rw-r--r-- 48153/63002 11256018 Aug  8 14:19 2012 Biszipped.zip
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
[st39422@dios8:/home/st39422]#

Replace an existing file will always add the mentioned file at the end of the archive:

[st39422@dios8:/home/st39422]#tar -rvf AB.tar fileABC.tar
a fileABC.tar 8K
[st39422@dios8:/home/st39422]#tar -tvf AB.tar
-rw-r--r-- 48153/63002 7486342 Aug  8 14:19 2012 Aiszipped.zip
-rw-r--r-- 48153/63002 11256018 Aug  8 14:19 2012 Biszipped.zip
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
[st39422@dios8:/home/st39422]#

Replacing multiple files:
[st39422@dios8:/home/st39422]#tar -rvf AB.tar fileABC.tar fileABC.tar
a fileABC.tar 8K
a fileABC.tar 8K
[st39422@dios8:/home/st39422]#tar -tvf AB.tar
-rw-r--r-- 48153/63002 7486342 Aug  8 14:19 2012 Aiszipped.zip
-rw-r--r-- 48153/63002 11256018 Aug  8 14:19 2012 Biszipped.zip
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
[st39422@dios8:/home/st39422]#

Updating multiple files:
[st39422@dios8:/home/st39422]#tar -uvf AB.tar fileA fileB
a fileA 1K
a fileB 1K
[st39422@dios8:/home/st39422]#tar -tvf AB.tar
-rw-r--r-- 48153/63002 7486342 Aug  8 14:19 2012 Aiszipped.zip
-rw-r--r-- 48153/63002 11256018 Aug  8 14:19 2012 Biszipped.zip
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
-rw-r--r-- 48153/63002   8192 Aug  6 12:55 2012 fileABC.tar
-rw-r--r-- 48153/63002    227 Aug  6 12:42 2012 fileA
-rw-r--r-- 48153/63002    227 Aug  6 12:43 2012 fileB

How to pass large number of files as an argument for tar archive creation?


Question: How to pass large number of files as an argument for tar archive creation?
Answer: Using the option ‘I’  

From Solaris Man page:

-I include-file   Opens include-file containing a list of  files,  one per line, and treats
                        it  as   if   each   file   appeared separately  on  the command line. Be
                        careful of  trailing  white  spaces. Also beware of leading white spaces,
                        since, for each line in the included file,  the  entire  line (apart from
                        the newline) will be used  to  match against  the initial string of files
                         to  include

SYNTAX:  tar –cvf  archive.tar  -I  filename 

archive.tar -> your desired archive name
filename ->  pass the file name which has list of files to be archived

Example:

Listing the available files:
[st39422@dios8:/home/st39422]#ls -ltr
total 64
-rw-r--r--   1 st39422  users        227 Aug  6 12:42 fileA
-rw-r--r--   1 st39422  users        227 Aug  6 12:43 fileB
-rw-r--r--   1 st39422  users         19 Aug  6 12:47 fileD
-rw-r--r--   1 st39422  users         19 Aug  6 12:49 fileC

Putting filenames in a file and checking the content:
[st39422@dios8:/home/st39422]#cat > files_to_be_archived
fileA
fileB
fileC
fileD
[st39422@dios8:/home/st39422]#cat files_to_be_archived
fileA
fileB
fileC
filed

Creating a tar archive:
[st39422@dios8:/home/st39422]#tar -cvf multiple_files.tar  -I files_to_be_archived
a fileA 1K
a fileB 1K
a fileC 1K
a fileD 1K

Listing tar file contents:
[st39422@dios8:/home/st39422]#tar -tvf multiple_files.tar
tar: blocksize = 10
-rw-r--r-- 48153/63002    227 Aug  6 12:42 2012 fileA
-rw-r--r-- 48153/63002    227 Aug  6 12:43 2012 fileB
-rw-r--r-- 48153/63002     19 Aug  6 12:49 2012 fileC
-rw-r--r-- 48153/63002     19 Aug  6 12:47 2012 fileD
[st39422@dios8:/home/st39422]#

NOTE:  Depending on the type and version of tar utility, option needs to be used ( -I or –L  eg: tar -cvf abc.tar -L jskfile or tar -cvf xyz.tar -I jskfile )

How to extract the desired file/directory from a tar archive in Unix or Linux or Solaris


Question: To extract the desired file/directory from a tarball

Answer:  Pass the desired file/directory as an extra argument to the normal tar extraction command

Syntax:   tar –xvf  filename.tar  desiredfilename/dirname

Example: To extract a file which is under two directories

1.      First we need to know the location of the file in the tarball  ( tar –tvf filename.tar  | grep filename)
2.      Secondly we need to apply that location as an additional argument  ( tar –xvf filename.tar  “output of last command” )

Now the command part,

[vjsujay@cheetah:/home/vjsujay]#tar -tvf abcd.tar | grep FileD
tar: blocksize = 15
-rw-r--r-- 48153/63002     14 Aug  2 12:41 2012 ./c/d/FileD

[vjsujay@cheetah:/home/vjsujay]#tar -xvf abcd.tar ./c/d/FileD
tar: blocksize = 15
x ./c/d/FileD, 14 bytes, 1 tape blocks

NOTE: If similar file already exist in the same location, then please move the tarball to different location and extract it to avoid the overwritten of the file

How to find the default shell in UNIX or Linux or Solaris


Question: Default shell of the logged in User

Answer: There are many ways to find the default shell.

a)      By checking the last column in the /etc/passwd file  ( grep –i username /etc/passwd )

Eg:  [vjsujay@cheetah:/home/vjsujay]#grep -i vjsujay /etc/passwd
       vjsujay:x:48153:63002:Sujay-kumar:/home/vjsujay:/bin/ksh

b)      By displaying the value of global environment variable SHELL  ( echo $SHELL )

Eg: [vjsujay@cheetah:/home/vjsujay]#echo $SHELL
/bin/ksh

NOTE: This will give correct default shell name as output as long as your current shell is your default shell

c)      By using the command echo $0

Eg: [vjsujay@cheetah:/home/st39422]#echo $0
-ksh
       

Wednesday, September 26, 2012

What is the flow in UNIX or UNIX like operating system for commands execution?

As soon as we press the enter key after the command, the below sequence will be followed.

1.  Check alias and then execute the command(shell-built-in or external command) accordingly
2.  Shell built-in command
3.  External command

Note 1: If command is executed with absolute path then external command or script will run. Else above sequence will be followed.

Note 2: If PATH value is empty, then shell will presume that the command is available in the current directory and hence it will try to run it from current directory.

Friday, September 14, 2012

Why we shouldn't give 777 to any directory in UNIX or LINUX?

Giving 777 to any directory in UNIX or Linux or UNIX based Operating System is a potential security risk. Because if a directory contains 777 permission, then any user can get inside the directory and remove other users files or directories. At times, we may need to permit all users to get in to the same directory and also need to allow them to create files and directories. In that case, we have to set 'sticky' bit for the particular directory to avoid the issue of removal of other users files intentionally.

Tuesday, September 11, 2012

How to find RAM size, CPU speed and CPU count in Solaris Sparc System


1.)Question: How to find the number of CPU, CPU Speed and RAM size?
Ans: prtdiag

Command Name: prtdiag
Purpose: To display the system diagnostics information

Ex:
[st39422@dios8:/home/st39422]#/usr/sbin/prtdiag -v
System Configuration: Sun Microsystems  sun4u Sun Ultra 45 Workstation
System clock frequency: 200 MHZ
Memory size: 2GB

==================================== CPUs ====================================
               E$          CPU                    CPU
CPU  Freq      Size        Implementation         Mask    Status      Location
---  --------  ----------  ---------------------  -----   ------      --------
0    1600 MHz  1MB         SUNW,UltraSPARC-IIIi    3.4    on-line     MB/0

============================ Memory Configuration ============================
Segment Table:
-----------------------------------------------------------------------
Base Address       Size       Interleave Factor  Contains
-----------------------------------------------------------------------
0x0                2GB               4           BankIDs 0,1,2,3

[st39422@dios8:/home/st39422]#

2.) Question: How to find the number of CPU?
Ans: psrinfo

Command Name: psrinfo
Purpose: To display information about processors

Ex:
[st39422@dios8:/home/st39422]#psrinfo -p
1

3.) Question: How to find the memory size(RAM)?
Ans: prtconf

Command Name: prtconf
Purpose: To print system configuration

Ex:
[st39422@dios8:/home/st39422]#prtconf -v | grep 'Memory'
Memory size: 2048 Megabytes