Linux-Essential Commands :)

#ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS

List processes by memory usage.

Output:

11572 /usr/local/apache/bin/httpd -k restart -DSSL
11896 /usr/local/apache/bin/httpd -k restart -DSSL
15228 tailwatchd
19404 MailScanner: starting child
22032 MailWatch SQL
27652 /usr/sbin/named -u named

#ps -e -o pcpu,cpu,nice,state,cputime,args —sort pcpu | sed ‘/^ 0.0 /d’

Processes by % cpu usage

Output:

%CPU CPU NI S TIME COMMAND
0.1 – 0 S 00:00:00 /usr/local/apache/bin/httpd -k restart -DSSL
0.1 – 0 S 00:00:00 /usr/local/apache/bin/httpd -k restart -DSSL
0.1 – 0 S 00:00:00 /usr/local/apache/bin/httpd -k restart -DSSL
0.1 – 0 S 09:40:37 [kjournald]

#netstat -tn|grep :80|awk {print $5}|cut -d: -f1|sort|uniq -c|sort -rn|head

List the number of current connections of port 80 (with IP)

This command will list the IP’s which are currently using the mentioned port-80(http) and the number of connections of that too.

Output:
12 218.248.35.90
7 122.167.25.155
1 80.240.220.83
1 65.55.106.143
1 216.129.119.13

#ipcs -s | grep nobody | perl -e ‘while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}’

This command will remove the apache semaphores.

Note: This will stop the apache and you need to start the apache again.

Tar (Tape archive):
Tar is a powerfull backup/archiving utility. It is used to create the
files/folders as compressed formats like “.tar”, “.tar.gz”. Tar is also used to uncompress the tar files.

*We are able to take different type of backups (normal, incremental)
*Through this utility we are able to restore the files with the same permissions (with -p option)

Options :

-t, –list list the contents of an archive
-x, –extract, –get extract files from an archive
-c, –create create a new archive
-d, –diff, –compare find differences between archive and file system
-r, –append append files to the end of an archive
-u, –update only append files newer than copy in archive
-A, –catenate append tar files to an archive
–concatenate same as -A
–delete delete from the archive (not on magnetic tapes!)
-k, –keep-old-files don’t replace existing files when extracting
–owner=NAME force NAME as owner for added files
–group=NAME force NAME as group for added files
–mode=CHANGES force (symbolic) mode CHANGES for added files
–atime-preserve don’t change access times on dumped files
-m, –modification-time don’t extract file modified time
–same-owner try extracting files with the same ownership
–no-same-owner extract files as yourself
–numeric-owner always use numbers for user/group names
-p, –same-permissions extract permissions information
–no-same-permissions do not extract permissions information
–preserve-permissions same as -p
-s, –same-order sort names to extract to match archive
–preserve-order same as -s
–preserve same as both -p and -s
-j, –bzip2 filter the archive through bzip2
-z, –gzip, –ungzip filter the archive through gzip
-Z, –compress, –uncompress filter the archive through compress
-C, –directory=DIR change to directory DIR
-T, –files-from=NAME get names to extract or create from file NAME
-X, –exclude-from=FILE exclude patterns listed in FILE
-v, –verbose verbosely list files processed

How to create a tar file or how to take a backup using tar?
Ex: we are going to take backup of /var/log folder
#tar -cvf log_12_02_2009.tar /var/log
-c –> create
-v –> verbose
-f –> output file/destination file

create .tar.gz (or) .tgz file
same as above with -z option
#tar -cvzf log_12_02_2009.tar.gz /var/log
-z –> compressing (.gz)

create .tar.bz (or) .tbz file
same as above with -j option
#tar -cvjf log_12_02_2009.tar.bz /var/log
-j –> compressing (.bz)

How to list and uncompress(untar) a file (.tar)?
First step, to list the file log_12_02_2009.tar
#tar -tvf log_12_02_2009.tar
-t –> listing the contents of the file
-v –> verbose
-f –> Source file

Then, to extract the file log_12_02_2009.tar,
#tar -xvf log_12_02_2009.tar
-x –> Extract the file
By default, the files will be restored in “/var/log”. If we need to retore
on another directory we have to mention the specific directory.
Ex:
#tar -xvf log_12_02_2009.tar -C /tmp/

To extract the specific files in that tar file.
#zcat log_12_02_2009.tar |tar -xvf – log_12_02_2009/messages*.*

How to extract tar.gz file,
#tar -xvzf log_12_02_2009.tar.gz

How to extract tar.bz file,
#tar -xvjf log_12_02_2009.tar.bz

How to take the backup with the permissions and ownership:
#tar -cvpsf log_12_02_2009.tar /var/log

-p –> preserve permissions
-s –> same ownership

Gzip :
Gzip is a file compression utility available in linux.It’s also used to
uncompress the files.
options:
-c –stdout write on standard output, keep original files unchanged
-d –decompress decompress
-f –force force overwrite of output file and compress links
-h –help give this help
-l –list list compressed file contents
-L –license display software license
-n –no-name do not save or restore the original name and time stamp
-N –name save or restore the original name and time stamp
-q –quiet suppress all warnings
-r –recursive operate recursively on directories
-S .suf –suffix .suf use suffix .suf on compressed files
-t –test test compressed file integrity
-v –verbose verbose mode
-V –version display version number
-1 –fast compress faster
-9 –best compress better
–rsyncable Make rsync-friendly archive

Ex:
How to create .gz file?
#gzip /var/log/maillog (original file will be changed to
“/var/log/maillog.gz”)

If you want to keep the source file,
#gzip -c /var/log/maillog > maillog.gz

To unzip the .gz file
#gunzip mailllog.gz (or)
#gzip -d maillog.gz

Bzip2 :
Bzip2 also one more file compression utility.

Options:
-h –help print this message
-d –decompress force decompression
-z –compress force compression
-k –keep keep (don’t delete) input files
-f –force overwrite existing output files
-t –test test compressed file integrity
-c –stdout output to standard out
-q –quiet suppress noncritical error messages
-v –verbose be verbose (a 2nd -v gives more)
-L –license display software version & license
-V –version display software version & license
-s –small use less memory (at most 2500k)
-1 .. -9 set block size to 100k .. 900k
–fast alias for -1
–best alias for -9
Ex:
How to create .bz2 file?
#bzip2 /var/log/messages (original file will be changed to
“/var/log/messages.bz2”)
Output file will be : messages.bz2

If you want to keep the source file,
#bzip2 -c /var/log/messages > messages.bz2

To unzip the .bz2 file
#bzip2 -d messages.bz2
(or) bunzip2 messages.bz2

Zip:
Zip is an another utility to compress files.

Ex:
How to make a zip file?
#zip test.zip jai.txt ls.doc new.jpg
(or) zip test.zip /home/user/* (zip all files in /home/user directory)

How to unzip?
#unzip test.zip (by default it will uncompress to the same folder (which
is zipped))

Options:
-f freshen: only changed files -u update: only changed or new files
-d delete entries in zipfile -m move into zipfile (delete files)
-r recurse into directories -j junk (don’t record) directory names
-0 store only -l convert LF to CR LF (-ll CR LF to LF)
-1 compress faster -9 compress better
-q quiet operation -v verbose operation/print version info
-c add one-line comments -z add zipfile comment
-@ read names from stdin -o make zipfile as old as latest entry
-x exclude the following names -i include only the following names
-F fix zipfile (-FF try harder) -D do not add directory entries
-A adjust self-extracting exe -J junk zipfile prefix (unzipsfx)
-T test zipfile integrity -X eXclude eXtra file attributes
-y store symbolic links as the link instead of the referenced file
-R PKZIP recursion (see manual)
-e encrypt -n don’t compress these suffixes

PS :
What is ps?
PS is a command to list the processes under linux/unix systems.
PS –> Precess Status. The command is used to display the currently
running processes on Unix/Linux systems.Ps can show the running processes
on our system in different ways.

ps command has so many options, some important options i listed here.
Ex:
#ps
#ps ux –> display all processes owned by a specific user (root is the user)

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 1604 580 ? S Feb11 0:00 init [3]
root 2 0.0 0.0 0 0 ? S Feb11 0:00
[migration/0/0]
root 3 0.0 0.0 0 0 ? SN Feb11 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S< Feb11 0:00 [events/0]
root 5 0.0 0.0 0 0 ? S< Feb11 0:00 [khelper]
root 6 0.0 0.0 0 0 ? S< Feb11 0:00 [kblockd/0]
root 29 0.0 0.0 0 0 ? S Feb11 0:01 [pdflush]
root 28 0.0 0.0 0 0 ? S Feb11 0:00 [ubstatd]

#ps U act –> display all process owned by the user “act”
PID TTY STAT TIME COMMAND
6161 pts/0 S 0:00 bash
6178 pts/0 R+ 0:00 ps U act

#ps -ef |less
-e List information about every process now running.
-f Generate a full listing.
Output:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:05 ? 00:00:01 init [3]
root 2 1 0 11:05 ? 00:00:00 [ksoftirqd/0]
root 3 1 0 11:05 ? 00:00:00 [events/0]
root 4 3 0 11:05 ? 00:00:00 [khelper]
root 5 3 0 11:05 ? 00:00:00 [kblockd/0]

#ps aux |less

-a List information about all processes most frequently requested:
all those except process group leaders and processes not associated
with a terminal.
-u uidlist List only process data whose effective user ID number or
login name is given in uidlist. In the listing, the numerical user ID
will be printed unless you give the -f option, which prints the login
name.
-x The -x option adds to the list processes that have no controlling
terminal, such as daemons, which are programs that are launched
during booting (i.e., computer startup) and run unobtrusively in the
background until they are activated by a particular event or
condition.

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 3384 560 ? S 11:05 0:01 init [3]
root 2 0.0 0.0 0 0 ? SN 11:05 0:00 [ksoftirqd/0]
root 3 0.0 0.0 0 0 ? S< 11:05 0:00 [events/0]
root 4 0.0 0.0 0 0 ? S< 11:05 0:00 [khelper]
root 5 0.0 0.0 0 0 ? S< 11:05 0:00 [kblockd/0]

Fuser:
fuser displays the PIDs of processes using the specified files or file
systems.

Options:
-a display unused files too
-k kill processes accessing that file
-i ask before killing (ignored without -k)
-l list signal names
-m mounted FS
-n space search in the specified name space (file, udp, or tcp)
-s silent operation
-signal send signal instead of SIGKILL
-u display user ids
-v verbose output
-V display version information
-4 search IPv4 sockets only
-6 search IPv6 sockets only
– reset options

Output:
#fuser -v /usr/bin/passwd
USER PID ACCESS COMMAND
/usr/bin/passwd root 6915 …e. passwd

#fuser -v /usr/bin/watch
USER PID ACCESS COMMAND
/usr/bin/watch jai 7049 …e. watch

Top:
The Top command provides a dynamic real time view of a running system.It
can display system summary information as well as a list of tasks
currently being managed by the Linux kernel.

Usage: top -hv | -bcisS -d delay -n iterations [-u user | -U user] -p pid
[,pid …]

Output:

#top
top – 06:00:44 up 1:55, 4 users, load average: 0.26, 0.08, 0.02
Tasks: 80 total, 2 running, 72 sleeping, 6 stopped, 0 zombie
Cpu(s): 0.6% us, 0.4% sy, 0.0% ni, 98.6% id, 0.2% wa, 0.0% hi, 0.2% si
Mem: 252256k total, 199968k used, 52288k free, 24428k buffers
Swap: 522072k total, 0k used, 522072k free, 133956k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8418 root 16 0 8552 2976 7328 S 0.6 1.2 0:00.24 vim
2573 root 16 0 1452 460 1292 S 0.2 0.2 0:03.33 klogd
6221 root 16 0 6780 2072 6308 S 0.2 0.8 0:00.56 sshd
8520 root 16 0 1876 944 1664 R 0.2 0.4 0:00.10 top
1 root 16 0 1604 580 1408 S 0.0 0.2 0:00.45 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0/0

PID –> Process Id of the task/process
USER –> The effective user name of the task’s owner.
PR –> The priority of the task.
NI –> The nice value of the task
VIRT –> The total amount of virtual memory used by the task(in KB)
RES –> The non-swapped physical memory a task has used.(in KB)
SHR –> The amount of shared memory used by a task.(in KB)
S –> The status of the task which can be one of:
’D’ = uninterruptible sleep
’R’ = running
’S’ = sleeping
’T’ = traced or stopped
’Z’ = zombie
%CPU –> CPU usage of the tasks
%MEM –> A task’s currently used share of available physical memory.
TIME+ –> CPU Time, hundredths
COMMAND –> Command line or Program name

Top command Switches:
top -hv | -bcisS -d delay -n iterations [-u user | -U user] -p pid [,pid …]
-h –> help
-v –> version
-d –> delay in seconds (refresh delay time in seconds)
-n –> iterations (ex: top -n 1, will display top result onetime)
-u –> lists Specific user owned process (ex: top -u act)
-p –> Only lists the specific pid process. (ex: top -p 7086)

Ipcalc:
Ipcalc command is using to calculate the netmask,broadcast address from
the IP/netmask which we are given.

Ex:
#ipcalc -bm 74.125.113.99/8
Output of the above command:
NETMASK=255.0.0.0
BROADCAST=74.255.255.255

#ipcalc -h 74.125.113.99 –>diaplay the hostname of the IP which we are
given.
Output:
HOSTNAME=vw-in-f99.google.com

Netstat:
Netstat is a useful tool for checking your network configuration and
activity. It has lot of switches and options.
Some of the examples and it’s outputs are listed below:

#netstat -a
-a Show the state of all sockets and all routing table entries.

Output:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address
State
tcp 0 0 *:ssh *:*
LISTEN
tcp 0 0 localhost.localdomain:5335 *:*
LISTEN
tcp 0 0 server1.example.com:ssh 192.168.1.24:40361
ESTABLISHED
tcp 0 0 server1.example.com:ssh 192.168.1.25:35786
ESTABLISHED

#netstat -an
-a Show the state of all sockets and all routing table entries.
-n Displays the port no. instead of program name.

Output:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address
State
tcp 0 0 0.0.0.0:80 0.0.0.0:*
LISTEN
tcp 0 0 192.168.1.20:21 0.0.0.0:*
LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN
tcp 0 0 192.168.1.20:22 192.168.1.24:40361
ESTABLISHED
tcp 0 640 192.168.1.20:22 192.168.1.25:35786
ESTABLISHED

#netstat -rn
-r Display the routing table of the system
-n Displays the port no. instead of program name.

Output:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt
Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.1.4 0.0.0.0 UG 0 0 0 eth0

#netstat -pan
-p Show the address resolution (ARP) tables.
-a Show the state of all sockets and all routing table entries.
-n Displays the port numbers instead of program name.

Output:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:*
LISTEN 8849/httpd
tcp 0 0 192.168.1.20:21 0.0.0.0:*
LISTEN 4957/ftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN 4893/sshd

#netstat -tpn
-t TCP protocol based connections
-p Show the address resolution (ARP) tables.
-n Displays the port numbers instead of program name.

Output:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 0 192.168.1.25:36485 192.168.1.9:22
ESTABLISHED 5239/ssh
tcp 0 0 192.168.1.25:36498 192.168.1.9:22
ESTABLISHED 5260/ssh
tcp 0 0 192.168.1.25:36503 192.168.1.9:22
ESTABLISHED 5279/ssh

#netstat -tux
-t Lists TCP socket based connections
-u Lists UDP socket connections
-x Lists Unix socket connections

Output:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address
State
tcp 0 0 192.168.1.20:ssh 192.168.1.27:34126
ESTABLISHED
tcp 0 0 192.168.1.20:ssh 192.168.1.24:41679
ESTABLISHED
udp 0 0 0.0.0.0:10000 0.0.0.0:*
5082/perl
udp 0 0 0.0.0.0:5353 0.0.0.0:*
4864/mDNSResponse
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 11 [ ] DGRAM 6524 /dev/log
unix 2 [ ] DGRAM 193492
@/var/run/hal/hotplug_socket
unix 2 [ ] DGRAM 4002 @udevd

#netstat -ts
-t Lists TCP socket based connections
-s Statistics of speciefied protocol socket.

Output:
Tcp:
52 active connections openings
120 passive connection openings
0 failed connection attempts
18 connection resets received
7 connections established
TcpExt:
1 invalid SYN cookies received
8 resets received for embryonic SYN_RECV sockets
ArpFilter: 0
54 TCP sockets finished time wait in fast timer

#netstat -i –>Lists all interfaces(statistics) available in the system.

-i, –interfaces=[<Iface>] display interface table

Output:
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP
TX-OVR Flg
eth0 1500 0 244988 0 0 0 77006 0 0
0 BMRU
lo 16436 0 7212 0 0 0 7212 0 0
0 LRU

Finger:
finger – user information lookup program. It will lists the user’s name,
lastname, Shell, last login time, home directory, terminal name and mail
info.
Ex:
#finger jai

Output:
Login: jai Name: (null)
Directory: /home/jai Shell: /bin/bash
Last login Sat Feb 14 03:31 (IST) on pts/1 from 192.168.1.25
New mail received Mon Feb 9 21:19 2009 (IST)
Unread since Mon Feb 9 17:16 2009 (IST)

Traceroute:
Traceroute is an utility to trace the route IP packets take from a source
system to some destination system.

For an example, we are are getting google.com page from Server. The data
which we are receiving it has been passed through different countries
networks, various paths and multiple servers.
but, it has a path. Traceroute shows the data path from source to
destination.

Ex:
#traceroute google.co.in

Output of google.co.in traceroute :
traceroute: Warning: google.co.in has multiple addresses; using
209.85.171.104
traceroute to google.co.in (209.85.171.104), 30 hops max, 38 byte packets
1 192.168.1.4 (192.168.1.4) 0.562 ms 0.474 ms 0.428 ms
2 abs-static-209.29.68.58.aircel.co.in (58.68.29.209) 34.006 ms 34.439
ms 40.181 ms
(ouput omitted)
18 cg-in-f104.google.com (209.85.171.104) 365.369 ms 478.372 ms
631.554 ms

Options:
-i –> Interface using
-I –> Use ICMP ECHO instead of UDP datagrams.
-m –> Max time-to-live (max number of hops) used in outgoing probe packets.
-n –> Print hop addresses numerically

Lsof:
LiSt Open Files (LSOF) is a Linux utility that allows you to view current
network connections and the files associated with them..

Ex:

#lsof –> This plain command will show network connections and all files
opened by all users/processes

#lsof -i
-i –> lists all open files associated with Internet(network) connections
-R –> This option directs lsof to list the Parent Process IDentification
number in the PPID
column.
-p –> lists the particular pid process.
-u username –> lists the specific user owned process/connections
-s –> This option directs lsof to display file size at all times.

#lsof -i tcp
-i tcp –> lists all TCP protocol opened connections and files.

#lsof -i tcp:21
This will lists only ftp(21) based connections and ftp associated files.

Tips and Tricks:
**How will you take backup MBR of a Linux System?
#dd if=/dev/hda of=mbr.bin bs=512 count=1
Note: /dev/hda for IDE harddisks, for sata or SCSI will be /dev/sda
To view the backup file
#od -xa mbr.bin

Iptables:
Iptables is a firewall using in Linux Operating system. It is included
with the default installation of Linux distributions.
Formerly Iptables is called as “Ipchains”. Iptables development and
updates are taking care by Netfilter.org.

Latest release of IPtables:1.4.3-rc1 / November 13, 2008
IPtable rules saved in this file : /etc/sysconfig/iptables
Iptables Configuration File: /etc/sysconfig/iptables-config
Iptables Service/daemon: /etc/init.d/iptables
{start|stop|restart|condrestart|status|panic|save}

How to allow an IP through IPtables?
#iptables -A INPUT -p TCP -s 192.168.1.26 -j ACCEPT
(OR)
#iptables -A INPUT -p TCP -s 192.168.1.26 -d 192.168.1.20 -j ACCEPT

-A Append this rule to INPUT chain
-p Protocol (like tcp,udp,icmp or all)
-s Source address (which IP you want to allow)
-j Jump to this –> ACCEPT
-d Destination address (by default it will take the local system)

How to deny an IP through IPtables?
#iptables -A INPUT -p TCP -s 192.168.1.26 -j DROP
(or)
#iptables -A INPUT -p TCP -s 192.168.1.26 -j REJECT

-A Append this rule to INPUT chain
-p Protocol (like tcp,udp,icmp or all)
-s Source address (which IP you want to allow)
-j Jump to this –> DROP/REJECT
Note: DROP only drop the signal, but REJECT will notify to destination
like “connection refused”.
-d Destination address (by default it will take the local system)
Note: The rules mentioned above are allow/deny an IP to whole TCP protocol
suite,not for a specific service or port.

How to allow an IP to access a system through SSH?
#iptables -A INPUT -p TCP –dport 22 -s 192.168.1.26 -j ACCEPT
–dport Destination port. (ssh port number:22)

How to block an IP to access a system through FTP?
#iptables -A INPUT -p TCP –dport 21 -s 192.168.1.26 -j ACCEPT
–dport Destination port. (ssh port number:22)

How to redirect all traffic on http port(80) to port 8080
#iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-port 8080
-t –>Queue type, 3 types of queues available: 1.filter 2.nat 3.mangle
1.Filter : (Packet Filtering)
It has 3 chains : 1.INPUT 2.OUTPUT 3.FORWARD
2.Nat : (Network Address Translation)
It has 3 Chains : 1.PREROUTING 2.POSTROUTING 3.OUTPUT
3.Mangle : (TCP Header modification)
It has 5 chains : 1.PREROUTING 2.POSTROUTING 3.OUTPUT 4.INPUT 5.FORWARD

Other Options:
-i : Match “input” interface on which the packet enters
-o : Match “output” interface on which the packet exits
Ex:
#iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p TCP -j ACCEPT
In the above rule, -s 0/0 is mentioned for “all”

How to Prevent from SYN flood attacks?
#iptables -A INPUT -p tcp –syn -m limit –limit 5/s -i eth0 -j ACCEPT
The above rule will not allow for syn floods more than 5/second.

To prevent icmp (ping protocol) requests/replies
#iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 1/s -i eth0 -j ACCEPT
The above rule will not allow more than 1 echo-request reply/second.

1 Comment

  1. Thosi Fernandas said,

    October 20, 2009 at 5:03 am

    Hi,

    I have seen your webpage about linux is nice…

    It is very useful.

    Regards,
    Thosi Fernandas
    Bangalore


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: