20 Most used Linux-based system monitoring tools

tuxsysad

The following are some of the  basic CLI, GUI, TUI commands to use in monitoring linux operated systems and helps in in-depth system analysis and debugging of server problems. These commands commonly help resolve issues regarding CPU, Memory, Network, and Storage.

1: top – Process Activity Command

The top program provides a dynamic real-time view of a running system i.e. actual process activity. By default, it displays the most CPU-intensive tasks running on the server and updates the list every five seconds.

#top 
top

top

2: vmstat – System Activity, Hardware and System Information

The command vmstat reports information about processes, memory, paging, block IO, traps, and cpu activity.

#vmstat -a
vmstat

vmstat

3: w – Find Out Who Is Logged on And What They Are Doing

w command displays information about the users currently on the machine, and their processes.

# w testuser 
w

w

4: uptime – Tell How Long The System Has Been Running

The uptime command can be used to see how long the server has been running. The current time, how long the system has been running, how many users are currently logged on, and the system load averages for the past 1, 5, and 15 minutes.

# uptime
uptime

uptime

1 can be considered as optimal load value. The load can change from system to system. For a single CPU system 1 – 3 and SMP systems 6-10 load value might be acceptable.

5: ps – Displays The Processes

ps

ps

ps command will report a snapshot of the current processes. To select all processes use the -A or -e option:

# ps -A

ps is just like top but provides more information.

Show Long Format Output

# ps -Al
To turn on extra full mode (it will show command line arguments passed to process):
# ps -AlF

To See Threads ( LWP and NLWP)

# ps -AlFH

To See Threads After Processes

# ps -AlLm

Print All Process On The Server

# ps ax
# ps axu

Print A Process Tree

# ps -ejH
# ps axjf
# pstree

Print Security Information

# ps -eo euser,ruser,suser,fuser,f,comm,label
# ps axZ
# ps -eM

See Every Process Running As User testuser

# ps -U testuser -u testuser u

Set Output In a User-Defined Format

# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -eopid,tt,user,fname,tmout,f,wchan

Display Only The Process IDs of Lighttpd

# ps -C lighttpd -o pid=
OR
# pgrep lighttpd
OR
# pgrep -u testuser php-cgi

Display The Name of PID 55977

# ps -p 55977 -o comm=

Find Out The Top 10 Memory Consuming Process

# ps -auxf | sort -nr -k 4 | head -10

Find Out top 10 CPU Consuming Process

# ps -auxf | sort -nr -k 3 | head -10

6: free - Memory Usage 

The command free displays the total amount of free and used physical and swap memory in the system, as well as the buffers used by the kernel.

# free 
free

free

7: iostat – Average CPU Load, Disk Activity

The command iostat report Central Processing Unit (CPU) statistics and input/output statistics for devices, partitions and network filesystems (NFS).

# iostat 
iostat

iostat

8: sar – Collect and Report System Activity

The sar command is used to collect, report, and save system activity information. To see network counter, enter:

sar

sar

# sar -n DEV | more
To display the network counters from the 24th:
# sar -n DEV -f /var/log/sa/sa24 | more
You can also display real time usage using sar:
# sar 4 5

9: mpstat – Multiprocessor Usage

The mpstat command displays activities for each available processor, processor 0 being the first one. mpstat -P ALL to display average CPU utilization per processor:

# mpstat -P ALL
mpstat

mpstat

10: pmap – Process Memory Usage

The command pmap report memory map of a process. Use this command to find out causes of memory bottlenecks.

# pmap -d PID 

To display process memory information for pid # 47394, enter:

# pmap -d 47394 
pmap

pmap

11 netstat – Network Statistics

The command netstat displays network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

netstat

netstat

12: ss – Network Statistics

ss command is used to dump socket statistics. It allows showing information similar to netstat.

ss

ss

13: iptraf – Real-time Network Statistics

The iptraf command is interactive colorful IP LAN monitor. It is an ncurses-based IP LAN monitor that generates various network statistics including TCP info, UDP counts, ICMP and OSPF information, Ethernet load info, node stats, IP checksum errors, and others. It can provide the following info in easy to read format:

  • Network traffic statistics by TCP connection
  • IP traffic statistics by network interface
  • Network traffic statistics by protocol
  • Network traffic statistics by TCP/UDP port and by packet size
  • Network traffic statistics by Layer2 address
iptraf1

iptraf1

iptraf2

iptraf2

14: tcpdump – Detailed Network Traffic Analysis

The tcpdump is simple command that dump traffic on a network. However, you need good understanding of TCP/IP protocol to utilize this tool. For.e.g to display traffic info about DNS, enter:

 # tcpdump -i eth0 'tcp port 80'

To display all IPv4 HTTP packets to and from port 80, i.e. print only packets that contain data, not, for example, SYN and FIN packets and ACK-only packets, enter:

# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' 

To display all FTP session to 202.54.1.5, enter:

# tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20' 

To display all HTTP session to 192.168.1.5:

# tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'

Use wireshark to view detailed information about files, enter:

# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80 
tcpdump

tcpdump

15: strace – System Calls

Trace system calls and signals. This is useful for debugging webserver and other server problems. See how to use to trace the process and see What it is doing.

Strace

Strace

16: /Proc file system – Various Kernel Statistics

/proc file system provides detailed information about various hardware devices and other Linux kernel information. See Linux kernel /proc documentations for further details. Common /proc examples:

# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# cat /proc/mounts
proc

proc

17: Nagios – Server And Network Monitoring

Nagios is a popular open source computer system and network monitoring application software. You can easily monitor all your hosts, network equipment and services. It can send alert when things go wrong and again when they get better. FAN is “Fully Automated Nagios”. FAN goals are to provide a Nagios installation including most tools provided by the Nagios Community. FAN provides a CDRom image in the standard ISO format, making it easy to easilly install a Nagios server. Added to this, a wide bunch of tools are including to the distribution, in order to improve the user experience around Nagios. See how to install Nagios

nagios

nagios

18: Cacti – Web-based Monitoring Tool

Cacti is a complete network graphing solution designed to harness the power of RRDTool’s data storage and graphing functionality. Cacti provides a fast poller, advanced graph templating, multiple data acquisition methods, and user management features out of the box. All of this is wrapped in an intuitive, easy to use interface that makes sense for LAN-sized installations up to complex networks with hundreds of devices. It can provide data about network, CPU, memory, logged in users, Apache, DNS servers and much more. See how to install and configure Cacti network graphing tool on linux box.

cacti

cacti

19: KDE System Guard – Real-time Systems Reporting and Graphing

KSysguard is a network enabled task and system monitor application for KDE desktop. This tool can be run over ssh session. It provides lots of features such as a client/server architecture that enables monitoring of local and remote hosts. The graphical front end uses so-called sensors to retrieve the information it displays. A sensor can return simple values or more complex information like tables. For each type of information, one or more displays are provided. Displays are organized in worksheets that can be saved and loaded independently from each other. So, KSysguard is not only a simple task manager but also a very powerful tool to control large server farms.

kdesystemguard

kdesystemguard

20: Gnome System Monitor – Real-time Systems Reporting and Graphing

The System Monitor application enables you to display basic system information and monitor system processes, usage of system resources, and file systems. You can also use System Monitor to modify the behavior of your system. Although not as powerful as the KDE System Guard, it provides the basic information which may be useful for new users:

  • Displays various basic information about the computer’s hardware and software.
  • Linux Kernel version
  • GNOME version
  • Hardware
  • Installed memory
  • Processors and speeds
  • System Status
  • Currently available disk space
  • Processes
  • Memory and swap space
  • Network usage
  • File Systems
  • Lists all mounted filesystems along with basic information about each.
gnome-system-monitor

gnome-system-monitor

More Tools of interest

A few more tools:

  • nmap – scan your server for open ports.
  • lsof – list open files, network connections and much more.
  • ntop web based tool – ntop is the best tool to see network usage in a way similar to what top command does for processes i.e. it is network traffic monitoring software. You can see network status, protocol wise distribution of traffic for UDP, TCP, DNS, HTTP and other protocols.
  • Conky – Another good monitoring tool for the X Window System. It is highly configurable and is able to monitor many system variables including the status of the CPU, memory, swap space, disk storage, temperatures, processes, network interfaces, battery power, system messages, e-mail inboxes etc.
  • GKrellM – It can be used to monitor the status of CPUs, main memory, hard disks, network interfaces, local and remote mailboxes, and many other things.
  • vnstat – vnStat is a console-based network traffic monitor. It keeps a log of hourly, daily and monthly network traffic for the selected interface(s).
  • htop – htop is an enhanced version of top, the interactive process viewer, which can display the list of processes in a tree form.
  • mtr – mtr combines the functionality of the traceroute and ping programs in a single network diagnostic tool.
  • wireshark - is a free and open-source packet analyzer. It is used for network troubleshooting, analysis, software and communications protocol development, and education. Originally named Ethereal, in May 2006 the project was renamed Wireshark due to trademark issues.
  • snort – Snort’s open source network-based intrusion detection system (NIDS) has the ability to perform real-time traffic analysis and packet logging on Internet Protocol (IP) networks. Snort performs protocol analysis, content searching, and content matching. The program can also be used to detect probes or attacks, including, but not limited to, operating system fingerprinting attempts, common gateway interface, buffer overflows, server message block probes, and stealth port scans.
  • Centreon – Centreon is an Open Source software package that lets you supervise all the infrastructures and applications comprising your information system.

References:

http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html

http://www.wireshark.org/about.html

Invoking GUI Network tool on Centos 6

 nm-connection-editor

you need to first install NetworkManager using YUM

yum install NetworkManager

Or check it is already started or not

service NetworkManager status

else start the service

service NetworkManager start
chkconfig NetworkManager on

To open to GUI interface you need to execute “nm-applet” command. and to configure or edit configurations “nm-connection-editor” use this command

nm-applet
nm-connection-editor (note: this command is formerly known as system-config-network-gui)

Snort (Intrusion Detection Utility) Installation in Centos 6

snort

Definition

snort2SNORT  is a free and open source network intrusion prevention system (NIPS) and network intrusion detection system (NIDS)[2] created by Martin Roesch in 1998.Snort is now developed by Sourcefire, of which Roesch is the founder and CTO.In 2009, Snort entered InfoWorld’s Open Source Hall of Fame as one of the “greatest [pieces of] open source software of all time”.

Snort’s open source network-based intrusion detection system (NIDS) has the ability to perform real-time traffic analysis and packet logging on Internet Protocol (IP) networks. Snort performs protocol analysis, content searching, and content matching. The program can also be used to detect probes or attacks, including, but not limited to, operating system fingerprinting attempts, common gateway interface, buffer overflows, server message block probes, and stealth port scans.

Snort can be configured in three main modes: sniffer, packet logger, and network intrusion detection. In sniffer mode, the program will read network packets and display them on the console. In packet logger mode, the program will log packets to the disk. In intrusion detection mode, the program will monitor network traffic and analyze it against a rule set defined by the user. The program will then perform a specific action based on what has been identified.

Before proceeding with Snort installation you will need to install the required packages.  Follow the steps to do prior to snort’s installation.

Pre-Installation

Make sure to have the latest version of  MySQL, HTTP, Development Tools and Development Libraries.

     Install the necessary packages needed to run snort successfully.

 #yum install mysql-bench mysql-devel php-mysql gcc php-gd gd glib2-devel gcc-c++

      Yum install libcap, libpcap and pcre

#yum install libcap*
#yum install libpcap*
#yum install pcre*

      Install libdnet 1.12

#cd /
#mkdir snort_install
#cd snort_install
#wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
#tar -zxvf libdnet-1.12.tgz
#cd libdnet-1.12
#./configure
#make && make install

     Install daq version 2.0.0

#cd /snort_install
#wget http://www.snort.org/downloads/2103
#tar -zxvf daq-2.0.0.tar.gz
#cd daq-2.0.0
#./configure
#make && make install

     Install snort version 2.9.4

#cd /snort_install
#wget http://www.snort.org/downloads/2112
#tar -zxvf snort-2.9.4.tar.gz
#cd snort-2.9.4
#./configure
#make && make install

Post Installation Instruction

      prepare for rules installation

# groupadd snort
# useradd -g snort snort -s /sbin/nologin
# mkdir /etc/snort
# mkdir /etc/snort/rules
# mkdir /etc/snort/so_rules
# mkdir /etc/snort/preproc_rules
# mkdir /var/log/snort
# chown snort:snort /var/log/snort
# mkdir /usr/local/lib/snort_dynamicrules
# cd /snort_install/snort-2.9.4/etc/
# cp * /etc/snort/

      Register on Snort official web site and download rules to  /snort_install directory

#cd /snort_install
#tar -zxvf snortrules-snapshot-2940.tar.gz
#cd rules/
#cp * /etc/snort/rules
#cp ../so_rules/precompiled/Centos-5-4/i386/2.9.4.0/* /etc/snort/so_rules
#cp ../preproc_rules/* /etc/snort/preproc_rules/

     Edit /etc/snort/snort.conf file

1.change “var RULE_PATH ../rules” to “var RULE_PATH /etc/snort/rules”,
change “var SO_RULE_PATH ../so_rules” to “var SO_RULE_PATH /etc/snort/so_rules”,
change “var PREPROC_RULE_PATH ../preproc_rules” to “var PREPROC_RULE_PATH /etc/snort/preproc_rules”
2. comment on the whole “Reputation preprocessor” section, because we haven’t whitelist file
3. find “Configure output plugins” section and add the line “output unified2: filename snort.log, limit 128″

    Install Barnyard 2

#cd /snort_install
#wget http://www.securixlive.com/download/barnyard2/barnyard2-1.9.tar.gz
#tar -zxvf barnyard2-1.9.tar.gz 
#cd barnyard2-1.9
#./configure 
#./configure --with-mysql-libraries=/usr/lib/mysql/
#make 
#make install
#cp etc/barnyard2.conf /etc/snort/
#mkdir /var/log/barnyard2
#chmod 666 /var/log/barnyard2
#touch /var/log/snort/barnyard2.waldo

       Setup MySQL Database

#echo "SET PASSWORD FOR root@localhost=PASSWORD('yourpassword');"| mysql -u root -p
#echo "create database snort;"| mysql -u root -p
#cd /snort_install/barnyard2-1.9
#mysql -u root -p -D snort < schemas/create_mysql
#echo "grant create, insert on root.* to snort@localhost;" | mysql -u root -p
#echo "SET PASSWORD FOR snort@localhost=PASSWORD('yourpassword');" | mysql -u root -p
#echo "grant create,insert,select,delete,update on snort.* to snort@localhost" | mysql -u root -p

     Edit the file /etc/snort/barnyard2.conf

change “config hostname: thor” to “config hostname: localhost”

change “config interface: eth0″ to “config interface: eth1″

add the line at the end of file “output database: log, mysql, user=snort password=yourpassword dbname=snort     host=localhost”

      Test

#/usr/local/bin/snort -u snort -g snort -c /etc/snort/snort.conf -i eth1

    If it prompts “Initialization Complete”, it proves to work.

      or  Execute snort from command line

#snort -c /etc/snort/snort.conf -l /var/log/snort/

If testing and manual run working perfectly fine proceed with the next step

      Make Snort and Barnyard2 boot up automatically

Edit the file /etc/rc.local, add the below lines

/sbin/ifconfig eth1 up /usr/local/bin/snort -D -u snort -g snort -c /etc/snort/snort.conf -i eth1

/usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort   /barnyard2.waldo -D

Restart to test changes.

#init 6

References:

http://www.snort.org/

http://en.wikipedia.org/wiki/Snort_%28software%29

http://www.securixlive.com/

http://kezhong.wordpress.com/2012/04/07/install-snort-2-9-2-2-on-centos5-8x86_64/http://www.securixlive.com/

Analyze, Find, Review and Delete Duplicate files in Windows and Linux

 

I was having problems with my pc storage space sometime ago. So basically i need to  go over all the files i have in my pc and have a hard time condescending which files/folders to delete to free up space. So i decided to analyze in which directory i should start. So in my perspective i cannot recursively go down each directory just to find which eats up most space. So i used WinDirStat  to check disk usage.

After scanning your system, WinDirStat shows you exactly which folders, file types, and files are using the most space. Ensure you don’t delete any important system files – only delete personal data files. If you see a program’s folder in the Program Files folder using a large amount of space, you can uninstall that program – WinDirStat can tell you just how much space a program is using, even if the Programs and Features Control Panel doesn’t.

windirstat

windirstat

 

Definition:

Download WinDirStat here

WinDirStat is a disk usage statistics viewer and cleanup tool for various versions of Microsoft Windows.
Note: if you are looking for an alternative for Linux, you are looking for KDirStat (apt-get install kdirstat on Debian-derivatives) and for MacOS X it would be Disk Inventory X or GrandPerspective.

 

So now i know which directories to move forward too. I browsed the contents to check. I found out that there are duplicate files in these different locations/folders but it would take weeks before i finish manually searching for those duplicate files. Luckily i found this application that search, let’s you review and delete the duplicate files in your chosen directory.  The application’s name is dupeGuru.  But it would let you delete only 10 at a time for the free version, but if you want to do chosen action without any restrictions you need to purchase the full version.

dupeGuru

dupeGuru

 

Definition:

Download dupeGuru here

dupeGuru is a tool to find duplicate files on your computer. It can scan either filenames or contents. The filename scan features a fuzzy matching algorithm that can find duplicate filenames even when they are not exactly the same. dupeGuru runs on Windows, Mac OS X and Linux.

 

 

Features

dupeGuru is efficient.

Find your duplicate files in minutes, thanks to its quick fuzzy matching algorithm. dupeGuru not only finds filenames that are the same, but it also finds similar filenames.

dupeGuru is customizable.

You can tweak its matching engine to find exactly the kind of duplicates you want to find. The Preference page of the help file lists all the scanning engine settings you can change.

dupeGuru is safe.

Its engine has been especially designed with safety in mind. Its reference directory system as well as its grouping system prevent you from deleting files you didn’t mean to delete.

Do whatever you want with your duplicates.

Not only can you delete duplicates files dupeGuru finds, but you can also move or copy them elsewhere. There are also multiple ways to filter and sort your results to easily weed out false duplicates (for low threshold scans).

Supported languages:

English, French, German, Chinese (Simplified), Czech, Italian, Armenian, Russian, Ukrainian, Brazilian.

After doing some clean up using the applications above a whopping 35 G was been added to my free space. That’s really something. Try it yourself! Have a happy time cleaning your pc.

Linux Shell Scripting with Bash(Bash Commands)

bashcommands

Getting Help

The Bash shell comes with a built-in help command to describe the various built-in Bash commands.The -s switch displays a summary for the command you specify.

$ help -s printf
printf: printf format [arguments]

Help only describes Bash commands.To get help on Linux commands, you need to use the man (manual) command.

 $ man date
32 Chapter 3 Files, Users, and Shell Customization

Linux divides its manual pages into a number of logical volumes. man displays any matching entries from any volume.Volume 1 contains the commands you can execute from the shell.To restrict your search to shell commands, use man 1.

 $ man 1 date

If there are pages in more than one manual volume, only the page from the first volume that matches your search is displayed.To find matching pages across all manual volumes, use the -a (all) switch.
The -k switch searches the Linux manual for a particular keyword and lists all man pages referring to that keyword.

 $ man 1 -k alias

The command help type gives you different information than man 1 type.The help type command tells you about Bash’s built-in type command, whereas the man 1 type command tells you about the Linux type command. If you are not sure whether a command is a Bash command, always try the help command before using the man command.

Fixing the Display

There will be times when a Bash session becomes unusable. Certain character sequences can lock your display, hide what you type, or change the characters being shown into strange symbols.This can happen, for example, when you’re trying to display a binary file.

The reset command attempts to restore a Bash session to a safe, sane state. If reset fails, you might also need to use stty sane to restore the session to a normal state. The clear command clears the display and returns the cursor to the upper-left corner.
There are several Linux commands for removing, copying, and moving files. mkdir (make directory) creates a new directory. Use mkdir to organize your files.

$ mkdir prototypes
$ ls -l
total 4
drwxr-xr-x 2 ken users 4096 Jan 24 12:50 prototypes

There are two switches for mkdir:
n –mode=m (-m)—Sets the permission mode (as in chmod)
n –parents (-p)—Makes all necessary directories even if they don’t currently exist

$ mkdir --parents --mode=550 read_only/backup/january
$ ls -l
Working with Files 33
total 4
drwxr-xr-x 2 ken users 4096 Jan 24 12:50 backup
drwxr-xr-x 3 ken users 4096 Jan 24 12:51 read_only
$ ls -l read_only/backup
total 4
dr-xr-x--- 2 ken users 4096 Jan 24 12:51 january

The values for mode are discussed with the chmod command in Chapter 15,“Shell Security.” However, when –parents is used, the –mode affects only the final directory in the list.

rmdir (remove directory) deletes a directory.The directory must be empty before it can be removed.There are two switches: n –ignore-fail-on-non-empty—Doesn’t report an error when it can’t delete a directory with files still in it
n –parents (-p)—Removes all parent directories as well as the subdirectory

 $ rmdir read_only
rmdir: read_only: Directory not empty
$ rmdir --parents read_only/backup/january/

The rm (remove) command permanently deletes files. If the file is a symbolic or hard link, it removes the link but leaves the file intact.

$ rm old_notes.txt
$ ls old_notes.txt
ls: old_notes.txt: No such file or directory

There are several switches for rm:
n –directory (-d)—Removes a directory
n –force (-f)—Never prompts the user and ignores missing files
n –interactive (-i)—Always prompts the user
n –recursive (-r or -R)—Removes contents of all subdirectories

Using the –recursive and –force switches simultaneously removes all the specified files, including all sub directories, without warning. Make sure you are deleting the correct files.

Some Linux distributions have the –interactive switch on by default so that rm requires that you confirm when you want to delete a particular file.

$ rm --interactive old_notes.txt
rm: remove ‘old_notes.txt’? y
$

Normally rm won’t delete a directory, but the –recursive switch deletes any directories encountered.

The cp (copy) command copies files from any location to another. If the final file listed is a directory, copy copies the other files into that directory.

There are many switches for copy—the complete list is in the reference section at the
end of this chapter. Some common switches are as follows:

n –force (-f)—Never prompts the user; always overwrites
n –interactive (-i)—Always prompts user
n –link (-l)—Creates a hard link instead of copying
n –parents (-P)—Appends the source path to destination directory
n –recursive (-R)—Copies any subdirectories
n –symbolic-link (-s)—Creates a symbolic link instead of copying
n –update (-u)—Overwrites old files or copies missing files

$ cp notes.txt old_notes.txt # copying
$ mkdir backup
$ cp old_notes.txt backup
$ ls backup
old_notes.txt

Like rm, some Linux distributions have –interactive on by default, warning when a file will be overwritten.

$ cp --interactive project_notes.txt old_notes
cp: overwrite ‘old_notes/project_notes.txt’? n
$

The mv (move) command moves and renames files.This is the same as making a copy of the file and deleting the original. Move also effectively renames a file by moving it to a new name in the same directory.

$ mv notes.txt project_notes.txt # renaming

The most common mv switches are similar to cp:
n –backup (-b)—Makes a backup of any existing file before overwriting by adding
a ~ to the name
n –force (-f)—Never prompts the user; always overwrites
n –interactive (-i)—Always prompts the user before overwriting
n –update (-u)—Overwrites old files or copies missing files
There is no –recursive switch.When move moves a directory, it moves the directory
and all its contents automatically.

The namei (name inode) command lists all the components in a path, including any symbolic links.

$ namei files
f: files
l files -> /home/geroge/text/scripts
d /
Working with People 35
d home
d geroge
d text
d scripts

In this case, the file named files is a symbolic link. Each of the files in the link path is a directory, marked with a d. Other file designations include l for symbolic link, s for socket, b for block device, c for character device, – for regular file, and ? for an error accessing a file in the path. Complete file permissions, such as seen with ls -l, can be shown with the -m (mode)
switch.

Working with People
There are several commands for checking to see who is on the computer and what they are doing.

The finger command shows who is on the computer and provides additional information, including how long their session has been idle, and their contact information.

$ finger
Login  Name          TTY  Idle    When     Bldg.     Phone
grm   Geroge Malgler  *p6   4:19 Thu 14:06 8th Floor   ext 9703
xel  Xian Lim       *con  6:07 Fri 08:47 Technical   ext 9876
vis  Violet Smith   *p7   10   Fri 17:32

Some versions of Linux no longer include finger because of security concerns over finger’s .plan files. Read the finger manual page for more information.
There are several other commands with similar functions.The users command shows a list of login names.

$ users
grm xel vis

The who command shows who is on the computer, which connection they are using, and when they signed on.

$ who
grm ttyp6 Mar 29 14:12
xel console Apr 6 09:57
vis ttyp7 Apr 6 13:32

The w command provides even more information, including system statistics and what the users are currently running.

$ w
3:18pm up 9 days, 20:33, 3 users, load average: 0.64, 0.66, 0.64
User tty login@ idle JCPU PCPU what
grm ttyp6 2:12pm 4:28 8:01 8:01 csh
xel console 9:57am 5:10 sh
vis ttyp7 1:32pm 19 bash

Linux Shell Scripting with Bash (printf command)

printfcommand

printf Command
The built-in printf (print formatted) command prints a message to the screen. You will use this command a lot in shell scripts. printf is very similar to the C standard I/O printf() function, but they are not identical. In particular, single- and double-quoted strings are treated differently in shell scripts than in C programs.

The first parameter is a format string describing how the items being printed will be represented. For example, the special formatting code “%d” represents an integer number, and the code “%f” represents a floating-point number.

$ printf “%d\n” 5
5
$ printf “%f\n” 5
5.000000

Include a format code for each item you want to print. Each format code is replaced with the appropriate value when printed. Any characters in the format string that are not part of a formatting instruction are treated as printable characters.

 $ printf “There are %d customers with purchases over %d.\n” 50 20000
There are 50 customers with purchases over 20000.

printf is sometimes used to redirect a variable or some unchanging input to a command. For example, suppose all you want to do is pipe a variable to a command. Instead of using printf, Bash provides a shortcut <<< redirection operator. <<< redirects a string into a command as if it were piped using printf.

The tr command can convert text to uppercase. This example shows an error message being converted to uppercase with both printf and <<<.

 $ printf “%s\n” “$ERRMSG” | tr [:lower:] [:upper:]
WARNING: THE FILES FROM THE OHIO OFFICE HAVEN’T ARRIVED.
$ tr [:lower:] [:upper:] <<< “$ERRMSG”
WARNING: THE FILES FROM THE OHIO OFFICE HAVEN’T ARRIVED.

The format codes include the following.
%a—Represent a floating-point number in hexadecimal format, using lowercase
letters
%A—Represent a floating point number in hexadecimal format, using uppercase
letters
%b—Expand backslash sequences
%c—Represent a single character
%d—Display a signed number
%e—Display a floating-point number, shown in exponential (also called “scientific”)
notation
%f (or %F)—Display a floating-point number without exponential notation
%g—(General) Let Bash choose %e or %f, depending on the value
%i—Same as %d
%0—Display an octal number
%q—Quote a string so it can be read properly by a shell script
30 Chapter 3 Files, Users, and Shell Customization
%s—Display an unquoted string
%u—Display an unsigned number
%x—Display an unsigned hexadecimal number, using lowercase letters
%X—Display an unsigned hexadecimal number, using uppercase letters
%%—Display a percent sign

If a number is too large, Bash reports an out-of-range error.

 $ printf “%d\n” 123456789123456789012
bash: printf: warning: 123456789123456789012: Numerical result out of range

For compatibility with C’s printf, Bash also recognizes the following flags, but treats
them the same as %d:
%j—A C intmax_t or uintmax_t integer
%t—A C ptrdiff_t integer
%z—A C size_t or ssize_t integer
Also for C compatibility, you can preface the format codes with a l or L to indicate a long number.

The %q format is important in shell script programming and it is discussed in the  quoting section, in the Chapter 5,“Variables.”

To create reports with neat columns, numbers can proceed many of the formatting codes to indicate the width of a column. For example, “%10d” prints a signed number in a column 10 characters wide.

 $ printf “%10d\n” 11
11

Likewise, a negative number left-justifies the columns.

$ printf “%-10d %-10d\n” 11 12
11 12

A number with a decimal point represents a column width and a minimum number of digits (or decimal places with floating-point values). For example, “%10.5f” indicates a floating-point number in a 10-character column with a minimum of five decimal places.

$ printf “%10.5f\n” 17.2
17.20000

Finally, an apostrophe (‘)displays the number with thousands groupings based on the current country locale.
The \n in the format string is an example of a backslash code for representing unprintable characters. \n indicates a new line should be started. There are special backslash formatting codes for the representation of unprintable characters.

\b—Backspace
\f—Form feed (that is, eject a page on a printer)
\n—Start a new line
\r—Carriage return
\t—Tab
\v—Vertical tab
\’—Single quote character (for compatibility with C)
\\—Backslash
n—n is an octal number representing an 8-bit ASCII character

$ printf “Two separate\nlines\n”
Two separate
Lines

Any 8-bit byte or ASCII character can be represented by or \ and its octal value.

$ printf “ASCII 65 (octal 101) is the character 101\n”
ASCII 65 (octal 101) is the character A

printf recognizes numbers beginning with a zero as octal notation, and numbers beginning with 0x as hexadecimal notation. As a result, printf can convert numbers between these different notations.

 $ printf “%d\n” 010
8
$ printf “%d\n “ 0xF
15
$ printf “0x%X\n “ 15
0xF
$ printf “0%o\n “ 8
010

Linux Shell Scripting with Bash (Listing Files)

lsandrmcommand

Listing Files
The ls (list) command shows the contents of the current directory.

$ ls
archive command_checker.sh commands.txt

ls has switches that affect how the files are listed, including the level of detail, the sorting order, and the number of columns. ls hides files that begin with a period.This is the Linux convention for configuration files, history files, and other files that a user isn’t normally interested in.

To see these files,use the -

A (all) switch. Use -a (absolutely all) to show the implicit . and .. files as well.

 $ ls -A
.bash_history .bash_logout .bash_profile .bashrc archive
command_checker.sh commands.txt

The filenames can be printed in color to show the kind of file they are. The colors are defined in a file /etc/DIR_COLORS. You can customize the colors using a .dir_colors file in your own directory. The format of the file is described in the
/etc/DIR_COLORS file.

To display the files without color and with symbols instead, use the –color and –classify (or -F) switches. (On most Linux distributions, this feature is turned on using aliases.)

$ ls --color=never --classify
archive/ command_checker.sh* commands.txt

The –classify symbols are directories (/), programs (*), symbolic links (@), pipes (|), and Unix domain socket files (=). These symbols are not a part of the name: They are hints as to the type of file. In this example, archive is a directory and command_checker.sh is a program.

Another very important switch is –hide-control-chars (or -q). Linux filenames can contain any character, even control characters. It is possible to create a filename with hidden characters in the name. In these cases, you can’t rename or delete the file unless you know what the hidden characters are. Contrary to what the name implies, the
–hide-control-chars switch displays any unprintable characters in the filename as question marks, making their locations visible.

 $ rm commands.txt 
rm: commands.txt  non-existent
$ ls --color=never --classify –-hide-control-chars
archive/ command_checker.sh* comm?ands.txt

Linux Shell Scripting with Bash

bash-icone1So back to basics. I am trying to do some shell scripting in Linux using Bash. There’s a vast number of commands that you can use that bash can interpret, so i can’t do it in one posting. From time to time i will be posting some commands that i used for bash. So for the meantime here are the basics of bash commands.

 

bashBash Keywords
A keyword is a word or symbol that has a special meaning to a computer language.The
following symbols and words have special meanings to Bash when they are unquoted
and the first word of a command.

                
      !      esac       select            }
      case   fi         then              [[
      do     for        until             ]]
      done   function   while            
      elif   if         time              
      else   in         {

Unlike most computer languages, Bash allows keywords to be used as variable names
even though this can make scripts difficult to read.To keep scripts understandable, keywords
should not be used for variable names.
Command Basics
The commands that can be typed at the Bash shell prompt are usually Linux programs
stored externally on your file system. Some commands are built into the shell for speed,
standardization, or because they can function properly only when they are built-in.

No matter what their source, commands fall into a number of informal categories.
Utilities are general-purpose commands useful in many applications, such as returning the
date or counting the number of lines in a file.
Filters are commands that take the results of one command and modify them in some
way, such as removing unwanted lines or substituting one word for another. Many commands
act as filters under the right circumstances.
To execute a command, type it at the Bash command prompt.The prompt is usually a
$, but often Linux distributions customize it to something else. S.u.S.E., for example, uses
a > command prompt.
The date command prints the current date and time on the screen.

$ date
Wed Apr 4 10:44:52 EDT 2001

All files, including shell commands, are case-sensitive. By convention, all shell commands
are in lowercase.

$ DATE
bash: DATE: command not found

Arguments are additional information supplied to a command to change its behavior.
The date command takes a format argument to change the appearance of the date and
time.

$ date ‘+%H:%M’
10:44

Switches (also called “options” or “flags”) are characters proceeded by a minus sign that
enable command features.To see the date in Coordinated Universal Time (UTC, formerly
called GMT), use the -u switch.

$ date -u
Wed Apr 4 14:46:41 UTC 2001

Because the terms “options” and “flags” are used in so many contexts, they are
referred to as switches in this book.
Switches and arguments are collectively called parameters. Some commands allow any
number of parameters or have parameters that can be arranged in complex ways.
The GNU and Linux convention is for longer, more readable options to be proceeded
by a double minus sign.The longer equivalent to the -u switch is –universal.

$ date --universal
Wed Apr 4 14:46:41 UTC 2001

The long switches remind the reader exactly what the switch does.This makes future
debugging of shell scripts much easier because there is no standard convention for the
short switches across Linux commands. Most Linux commands recognize the long
switches –help, –verbose, and –version.
Command-Line Editing 15
Comments can be added to the end of any command or they can be typed on a line
by themselves. Comments are denoted with a number sign (#).

 $ date --universal # show the date in UTC format

Built-in Bash commands and most other GNU software treat — as a special switch
that indicates the end of a list of switches.This can be used when one of the arguments
starts with a minus sign.
Command-Line Editing

There are special key combinations to edit what you type or to repeat previous commands.
Bash has two editing modes.These modes emulate the keys used in two popular
Linux text editors. Vi mode mimics the vi and vim editors. Emacs mode works like emacs,
nano or pico.

The current editing mode can be checked with the shopt command. shopt -o
emacs is on if you are in emacs mode. shopt -o vi is on if you are in vi mode. Only
one mode can be on at a time.

$ shopt -o emacs
emacs on
$ shopt -o vi
vi off

Regardless of the mode, the arrow keys move the cursor and step through the most
recently executed command:
n Left arrow—Moves back one character to the left. No characters are erased.
n Right arrow—Moves forward one character to the right.
n Up arrow—Moves to the previous command in the command history.
n Down arrow—Moves to the next command in the command history (if any).
Using the left and right arrows, the cursor moves to any position in the command. In
the middle of a line, new text is inserted into the line without overwriting any old
typing.

Emacs mode is the default mode on all the major Linux distributions.The most common
emacs keys are as follows:

n control-b—Moves back one character to the left. No characters are erased.
n control-f—Moves forward one character to the right.
n control-p—Moves to the previous command in the command history.
n control-n—Moves to the next command in the command history (if any).
n Tab key—Finds a matching filename and completes it if there is one exact match.

The filename completion feature attempts to find a matching filename beginning
with the final word on the line. If a matching filename is found, the rest of the filename
is typed in by Bash. For example,
$ dat
is completed when the Tab key is pressed to

 $ date

if date is the only command that can be found starting with the characters dat.
The vi mode key combinations are as follows:
n Esc—Enters/exits editing mode.
n h—Moves back one character to the left. No characters are erased.
n l—Moves forward one character to the right.
n k—Moves to the previous command in the command history.
n j—Moves to the next command in the command history (if any).
n Esc twice—Finds a matching filename and completes it if there is one exact
match.

A complete list of key combinations (or bindings) is listed in the Bash man page in the
Readline section.The default key combinations can be changed, listed, or reassigned
using the bind command.To avoid confusion, it is best to work with the defaults unless
you have a specific application in mind.

Other editing keys are controlled by the older Linux stty (set teletype) command.
Running stty shows the common command keys as well as other information about
your session. Use the -a (all) switch for all settings.

$ stty
speed 9600 baud; evenp hupcl
intr = ^C; erase = ^?; kill = ^X;
eol2 = ^@; swtch = ^@;
susp = ^Z; dsusp = ^Y;
werase = ^W; lnext = ^@;
-inpck -istrip icrnl -ixany ixoff onlcr
-iexten echo echoe echok
-echoctl -echoke

Many of these settings are used only when you’re working with serial port devices
and can be ignored otherwise.The other settings are control key combinations marked
with a caret (^) symbol. Keys with ^@ (or ASCII 0) are not defined.The keys are as follows:
n erase (usually ^?, which is the backspace key on IBM-style keyboards)—Moves
left and erases one character.
n intr (usually ^C)—Interrupts/stops the current program or cancels the current
line.

n kill (usually ^X)—Erases the current line.
Variable Assignments and Displaying Messages 17
n rprnt (usually ^R)—Redraws the current line.
n stop (usually ^S)—Pauses the program so you can read the results on the screen.
n start (usually ^Q)—Resumes the program.
n susp (usually ^Z)—Suspends the current program.
n werase (usually ^W)—Erases the last word typed.
To change the suspend character to control-v, type
$ stty susp ‘^v’

Changing key combinations can be very difficult. For example, if you are running an
X Windows server (the software that runs on a client computer) on a Microsoft Windows
computer to access a Linux computer, key combinations can be affected by the
following:

n Microsoft Windows
n The X server software
n The Linux window manager
n The stty settings
Each acts like layers of an onion and they must all be in agreement. For example,
shift-insert, often used to paste text, might be handled by your X Window server before
your Linux computer or your shell have a chance to see it.
Variable Assignments and Displaying Messages
Variables can be created and assigned text using an equals sign. Surround the text with
double quotes.

$ FILENAME=”info.txt”

The value of variables can be printed using the printf command. printf has two
arguments: a formatting code, and the variable to display. For simple variables, the formatting
code is “%s\n” and the variable name should appear in double quotes with a
dollar sign in front of the name

$ printf “%s\n” “$FILENAME” 
info.txt

printf can also display simple messages. Put the message in the place of the formatting
code.

 $ printf “Bash is a great shell.\n”

Bash is a great shell.

printf and variables play an important role in shell scripting and they are described
in greater detail in the chapters to come.
18 Chapter 2 Operating the Shell
The results of a command can be assigned to a variable using backquotes.

$ DATE=`date`
$ printf “%s\n” “$DATE”
Wed Feb 13 15:36:41 EST 2002

The date shown is the date when the variable DATE is assigned its value.The value of
the variable remains the same until a new value is assigned.

$ printf “%s\n” “$DATE”
Wed Feb 13 15:36:41 EST 2002
$ DATE=`date`
$ printf “%s\n” “$DATE”
Wed Feb 13 15:36:48 EST 2002

Multiple Commands
Multiple commands can be combined on a single line. How they are executed depends
on what symbols separate them.
If each command is separated by a semicolon, the commands are executed consecutively,
one after another.

$ printf “%s\n” “This is executed” ; printf “%s\n” “And so is this”
This is executed
And so is this

If each command is separated by a double ampersand (&&), the commands are executed
until one of them fails or until all the commands are executed.

$ date && printf “%s\n” “The date command was successful”
Wed Aug 15 14:36:32 EDT 2001 
The date command was successful

If each command is separated by a double vertical bar (||), the commands are executed
as long as each one fails until all the commands are executed.

$ date ‘duck!’ || printf “%s\n” “The date command failed”
date: bad conversion
The date command failed

Semicolons, double ampersands, and double vertical bars can be freely mixed in a single
line.

 $ date ‘format-this!’ || printf “%s\n” “The date command failed” && \
printf “%s\n” “But the printf didn’t!”
date: bad conversion
The date command failed
But the printf didn’t!

These are primarily intended as command-line shortcuts:When mixed with redirection
operators such as >, a long command chain is difficult to read and you should avoid
it in scripts.

Command History 19
Command History

Bash keeps a list of the most recently typed commands.This list is the command history.
The easiest way to browse the command history is with the Up and Down arrow
keys.The history can also be searched with an exclamation mark (!).This denotes the
start of a command name to be completed by Bash. Bash executes the most recent command
that matches. For example,

$ date
Wed Apr 4 11:55:58 EDT 2001
$ !d
Wed Apr 4 11:55:58 EDT 2001

If there is no matching command, Bash replies with an event not found error
message.

$ !x
bash: !x: event not found

A double ! repeats the last command.

$ date
Thu Jul 5 14:03:25 EDT 2001
$ !!
date
Thu Jul 5 14:03:28 EDT 2001

There are many variations of the ! command to provide shortcuts in specific situations.
A negative number indicates the relative line number.That is, it indicates the number
of commands to move back in the history to find the one to execute. !! is the same as
!-1.

$ date
Thu Jul 5 14:04:54 EDT 2001
$ printf “%s\n” $PWD
/home/kburtch/
$ !-2
date
Thu Jul 5 14:05:15 EDT 2001

The !# repeats the content of the current command line. (Don’t confuse this with #!
in shell scripts.) Use this to run a set of commands twice.

 $ date ; sleep 5 ; !#
date ; sleep 5 ; date ; sleep 5 ;
Fri Jan 18 15:26:54 EST 2002
Fri Jan 18 15:26:59 EST 2002
20 Chapter 2 Operating the Shell

Bash keeps the command history in a file called .bash_history unless a variable
called HISTFILE is defined. Each time you quit a Bash session, Bash saves the history of
your session to the history file. If the histappend shell option is on, the history is
appended to the old history up to the maximum allowed size of the history file. Each
time you start a Bash session, the history is loaded again from the file.
Another shell option, histverify, enables you to edit the command after it’s
retrieved instead of executing it immediately.

Bash has a built-in command, history, which gives full control over the command
history.The history command with no parameters lists the command history. If you
don’t want to see the entire history, specify the number of command lines to show.

$ history 10
1026 set -o emacs
1027 stty
1028 man stty
1029 stty -a
1030 date edhhh
1031 date edhhh
1032 date
1033 date
1034 !
1035 history 10

You can test which command will be matched during a history completion using the
-p switch.

$ history -p !d
history -p date
date

A particular command line can be referred to by the line number.

$ !1133
date
Thu Jul 5 14:09:05 EDT 2001

history -d deletes an entry in the history.

$ history -d 1029
$ history 10
1027 stty
1028 man stty
1029 date edhhh
1030 date edhhh
1031 date
1032 date
1033 !
1034 history 10
1035 history -d 1029
1036 history 10
Directory Commands 21

The -s switch adds new history entries. -w (write) and -r (read) save or load the history
from a file, respectively.The -a (append) switch appends the current session history to
the history file.This is done automatically when you quit the shell.The -n switch loads
the complete history from the history file. history -c (clear) deletes the entire history.
The command history can be searched with !? for the most recent command containing
the text. If there is additional typing after the !? search, the command fragment
will be delineated with a trailing ?.

$ date
Thu Jul 5 14:12:33 EDT 2001
$ !?ate
date
Thu Jul 5 14:12:38 EDT 2001
$ !?da? ‘+%Y’
date ‘+%Y’
2001

The quick substitution history command, ^, runs the last command again, replacing
one string with another.

$ date ‘+%Y’
2001
$ ^%Y^%m^
date ‘+%m’
07

The Bash history can be turned off by unsetting the -o history shell option.The
cmdhist option saves multiple line commands in the history.The lithist option breaks
up commands separated by semicolons into separate lines.
Directory Commands
The built-in pwd (present working directory) command returns the name of your current
directory.

$ pwd
/home/dsmith

Although you might not think such a simple command needs options, pwd has a couple
of switches.The -P (physical) switchshows the actual directory, whereas the default -L
(logical) switch shows the directory, including any symbolic links. For example, if /home
was a link to a directory called /user_drive/homes, the switches work as follows:

$ pwd -P
/user_drive/homes/dsmith
$ pwd -L
/home/dsmith
22 Chapter 2 Operating the Shell

The built-in cd (change directory) command changes your current directory. As discussed
in Chapter 1,“The Linux Environment,” the special directory .. represents the
parent directory, whereas . represents the current directory.

$ pwd
/home/dsmith
$ cd .
$ pwd
/home/kburtch
$ cd ..
$ pwd
/home
$ cd dsmith
$ pwd
/home/dsmith

Each time you change the directory, Bash updates the variable PWD containing the
path to your current working directory. Bash also maintains a second variable called OLDPWD
that contains the last directory you were in.
Using the minus sign (–) with cd, you can switch between the current directory and
the last directory.This is a useful shortcut if you are doing work in two different directories.

$ pwd
/home/dsmith
$ cd ..
$ pwd
/home
$ cd -
$ pwd
/home/dsmith
$ cd -
$ pwd
/home

The tilde (~) represents your current directory. Use it to move to a directory relative
to your home directory.To move to a directory called mail in your home directory, type

$ cd ~/mail

Although . and .. work in all Linux programs, ~ and – are features of Bash and only
work with Bash and Bash scripts.

cd by itself returns you to your home directory, the same as cd ~.
If a CDPATH variable exists, it is assumed to contain a list of directories similar to the
PATH variable.This is a throwback to the days when a user was only able to use one shell
session on his terminal and is now considered a security risk. Its use should be avoided.

Specialized Navigation and History 23
Specialized Navigation and History

Because most users can open multiple shell sessions, there is little need for complex
movement between directories. cd – switches between two directories, which is suitable
for most circumstances. However, if you are restricted to a single shell session and want
Bash to remember more directories, there are three built-in commands that maintain a
list of directories.

The built-in dirs command shows the list of saved directories.The current directory
is always the first item in the list.

$ dirs

~
The built-in pushd (push directory) command adds (or pushes) directories onto the list
and changes the current directory to the new directory.

 $ pushd /home/dsmith/invoices
~/invoices ~ 
$ pushd /home/dsmith/work
~/work ~/invoices ~
$ pwd
/home/dsmith/work

There are now three directories in the list.
The -n (no change) switch will put a directory into the list without changing directories.
-N (rotate Nth) moves the nth directory from the left (or, with +N, from the right) to
the top of the list.
The dirs -l switch displays the directory names without any short forms.

$ dirs -l
/home/dsmith/work /home/dsmith/invoices /home/dsmith

The -v switchdisplays the list as a single column, and -p shows the same information
without the list position.The -c switch clears the list.The -N (view Nth) shows the nth
directory from the left (or, with +N, from the right).

$ dirs +1
~

The built-in popd (pop directory) command is the opposite of the pushd. popd discards
the first directory and moves to the next directory in the list.

 $ popd
~/invoices ~
$ pwd
/home/dsmith/invoices

The switches for popd are similar to pushd: -n to pop without moving, and -N to
delete the Nth entry from the left (or, with +N, the right).
24 Chapter 2 Operating the Shell
The Colon Command
The simplest shell command is the colon (:).This is the colon command (sometimes called
a “no-op” or “null command”) and does nothing.What’s the use of a command that
does nothing? There are some places in shell programs where a statement is required. In
those cases, you can use : to indicate nothing special should be done.
At the command prompt, : has no effect.

$ :
$

The colon command can have parameters and file redirections.This can have strange
effects, such as running the date command using backquotes, giving the results to the
null command that quietly discards them.

$ : `date`
$

This has the same effect as redirecting the output of date to the /dev/null file.

$ date > /dev/null

 

date Command Switches
n –date=s (or -d s)—Displays time described by s.
n –file=f (or -f f)—Displays times listed in file f.
n –iso-8601=t (or -I t)—Displays an ISO-8601 standard time.
n –reference=f (or -r f)—Displays last modification date of file.
n –rfc-822 (or -R)—Uses RFC-822 format.
n –universal (or –utc or -u)—Uses Coordinated Universal Time.

stty Command Switches
n –all (or -a)—Displays all stty settings.
n –save (or -g)—Displays settings so they can be used as parameters to stty.
n –file=d (or -F d)—Opens tty device d instead of stdin.

history Command Switches
n -a—Appends to history file.
n -c—Clears history.
n -d—Deletes history entry.
n -n—Loads from history file.
n -p—Performs history lookup/substitution.
n -r—Reads history from a file.
n -s—Adds new history entries.

pwd Command Switches

n -P—Physical directory
n -L—Logical directory

dirs Command Switches
n -c—Clears all entries
n -l—Shows a long listing (no tildes)
n -p—Lists the entries
n -v—Shows a verbose listing

SVN (Subversion) Commands

subversion by apache

What is SVN (Subversion)?

Apache Subversion (often abbreviated SVN, after the command name svn) is a software versioning and revision control system distributed under an open source license. Developers use Subversion to maintain current and historical versions of files such as source code, web pages, and documentation. Its goal is to be a mostly compatible successor to the widely used Concurrent Versions System (CVS).

The open source community has used Subversion widely: for example in projects such as Apache Software Foundation, Free Pascal, FreeBSD, GCC, Mono and SourceForge. Google Code also provides Subversion hosting for their open source projects. BountySource systems use it exclusively. CodePlex offers access to Subversion as well as to other types of clients.

The corporate world has also started to adopt Subversion. A 2007 report by Forrester Research recognized Subversion as the sole leader in the Standalone Software Configuration Management (SCM) category and as a strong performer in the Software Configuration and Change Management (SCCM) category.[1]

Subversion was created by CollabNet Inc. in 2000 and is now a top-level Apache project being built and used by a global community of contributors.

Some of the commands frequently used related to SVN is listed below.

* Create Svn Repository

Syntax: svnadmin create <svn data directory><$repository_name>

E.g:

  $ svnadmin create /var/www/svn/repotest

-Command to create a repository using the default configuration.

$ chown apache.apache /var/www/svn/repotest 

- Command to use after creating the repository to assign ownership of the repository root directory to apache.

Or

Syntax: svnadmin create –fs-type fsfs <svn data directory><$repository_name>

  $ svnadmin create --fs-type fsfs /var/www/svn/repotest

-Command to create a repository using specifying the repository type.

$ chown apache.apache /var/www/svn/repotest 

- Command to use after creating the repository to assign ownership of the repository root directory to apache.

  * Initially input repo data to repository

$ svn import -m "Initial import." /var/www/svn/repotest/ file:///var/www/svn/myrepo

- where /var/www/svn/repotest is the root directory of the repository and file:///var/www/svn/repotest will be the online repository directory

  * list and view contents of a repo in tree view

Syntax: svnlook tree <repository absolute path>

  $ svnlook tree /var/www/svn/repotest/ 

  * View SVN Information

$ svn info

  * List down all repo

$ svn st

  * Add to svn a file or folder

$ svn add <file>

  * Create a Directory for svn

$ svn mkdir <directory>

 * Log svn

$ svn log

  *To revert to original file

$  svn revert <path>

  - revert a whole directory of files, use the --depth=infinity option:

$ svn revert --depth=infinity <path>

 

  *Delete a file or directory from svn

$ svn delete <directory>

  *Commit all changes made to file (Note: must be inside the repository path

$ svn ci -m "adding directories"

- Where ci is the commit command and -m is the parameter for the additional message and “adding directories” would be the notes included for the commit .
or

If you want to use a file that’s under version control for your commit message with --file, you need to pass the --force-log s witch:

$ svn commit --file file_under_vc.txt foo.c
svn: The log message file is under version control
svn: Log message file is a versioned file; use '--force-log' to override

$ svn commit --force-log --file file_under_vc.txt foo.c
Sending        foo.c
Transmitting file data .
Committed revision 6.

  *Checkout contents of Repository/get files and details

Syntax: svn co <repository_site> <path>

$ svn co http://svnrepo.com/svn/repos/  /var/www/svn/repotest/ 

For more commands on SVN Click here.

Happy versioning.