ASCII – Special Characters – Alt Keyboard Shortcuts

extend
ASCII

To type a special character, using an Alt keyboard sequence

1. Make sure that the Num Lock key has been pressed, to activate the numeric key section of the keyboard.

2. Press and hold down the Alt key.                        3. While the Alt key is pressed, type the sequence of numbers (on the numeric keypad) from the Alt code in the above table.

4. Release the Alt key, and the character will appear.

Some sequence from the above table skipped since no symbol representation or duplicate symbol.

How to Install memcached in Centos 6

memcached

I was building a website of my own and was onmy testing phase when I noticed its a little bit slow. It might be because i have too many graphics loading and heavy database when doing some searching. I searched Google ways to speed up websites and i found out about memcached and found some article on how to install the said application. I tried it and I noticed a big difference on my website’s performance.

MEMCACHED DEFINITION

Memcached is a distributed, high-performance, in-memory caching system that is primarily used to speed up sites that make heavy use of databases. It can however be used to store objects of any kind. Nearly every popular CMS has a plugin or module to take advantage of memcached, and many programming languages have a memcached library, including PHP, Perl, Ruby, and Python. Memcached runs in-memory and is thus quite speedy, since it does not need

to write to disk.

Here’s how to install it on CentOS 6:

Memcached does have some dependencies that need to be in place. Install libevent using yum:

yum install libevent libevent-devel

The memcached install itself starts with

To start installing memcached, change your working directory to /usr/local/src and download the latest memcached source:

cd /usr/local/src 
wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz

Uncompress the tarball you downloaded and change into the directory that is created:

tar xvzf memcached-1.4.15.tar.gz
cd memcached-1.4.15

Note:

Check memcached.org for a newer version before proceeding with the installation. Their might be newer version existing after the publication of this post. Please note the tarball version we are using is 1.4.15.

Next, configure your Makefile. The simplest way is to run:

./configure

Additional configure flags are available and can improve performance if your server is capable. For 64-bit OSes, you can enable memcached to utilize a larger memory allocation than is possible with 32-bit OSes:

./configure --enable-64bit

If your server has multiple CPUs or uses multi-core CPUs, enable threading:

./configure --enable-threads

If your server supports it, you can use both flags:

./configure --enable-threads --enable-64bit

n.b.: if the configure script does not run, you may have to install compiling tools on your server. That is as simple as

yum install gcc
yum install make

Once the configure script completes, build and install memcached:

make && make install

Last but not least, start a memcached server:

memcached -d -u nobody -m 512 -p 11211 127.0.0.1

Put another way, the previous command can be laid out like this:

memcached -d -u [user] -m [memory size] -p [port] [listening IP]

Let’s go over what each switch does in the above command:

-d
Tell memcached to start up as a backgrounded daemon process
-u
Specify the user that you want to run memcached
-m
Set the memory that you want to be allocated my memcached
-p
The port on which memcached will listen.

Now your site is ready for a fast run literally.

Resources:

http://memcached.org/

http://www.liquidweb.com/kb/how-to-install-memcached-on-centos-6/

How to recover mysql root password in Linux

mysql

I installed my mysql two months ago and got busy afterwards. I already set everything, root password, permissions, cron for dump, phpmyadminl and some other stuffs. Since i got busy, never had a chance to explore and go back until now. But the problem is, i forgot the root password i set. In case you need to recover the root password in Linux here are some steps that can help you.

 

 

Step # 1: Stop the MySQL server process.

Step # 2: Start the MySQL (mysqld) server/daemon process with the –skip-grant-tables option so that it will not prompt for password.

Step # 3: Connect to mysql server as the root user.

Step # 4: Setup new mysql root account password i.e. reset mysql password.

Step # 5: Exit and restart the MySQL server.

 

The corresponding commands to use in accordance to above steps are the following.  Make sure you are logged as root in your linux box when doing it.

Step # 1 : Stop mysql service

# /etc/init.d/mysql stop

Output:

Stopping MySQL database server: mysqld.

Step # 2: Start to MySQL server w/o password:

# mysqld_safe --skip-grant-tables &

Output:

130607 14:16:49  mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
130607 14:16:49  InnoDB: Initializing buffer pool, size = 8.0M
130607 14:16:49  InnoDB: Completed initialization of buffer pool
130607 14:16:49  InnoDB: Started; log sequence number 0 44233

Step # 3: Connect to mysql server using mysql client:

# mysql -u root

Output:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

Step # 4: Setup new MySQL root user password

mysql> use mysql;
mysql> update user set password=PASSWORD("New_root_password") where User='root';
mysql> flush privileges;
mysql> quit

Step # 5: Stop MySQL Server:

# /etc/init.d/mysql stop

Output:

Stopping MySQL database server: mysqld
STOPPING server from pid file /var/run/mysqld/mysqld.pid
mysqld_safe[6186]: ended
[1]+  Done                    mysqld_safe --skip-grant-tables

Step # 6: Start MySQL server and test it

# /etc/init.d/mysql start
# mysql -u root -p

 

Reference

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”
Note: the device eth1 may vary depending on your system set-up. The example given above is a 2 network device(eth0,eth1) setup where snort was applied to the second network device(eth1)
 

      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