Unix – Useful commands and scenarios

Print Friendly, PDF & Email

Crontab syntax

*     *     *     *     *    Command/file/script to be executed (5 numerical values followed by command)
-     -     -     -     -
|     |     |     |     |
|     |     |     |     \/
|     |     |     \/    Day of the week (0-6 - Sunday = 0)
|     |     \/    Month (1-12)
|     \/    Day of the month (1-31)
\/    Hour (0-23)
Min (0 - 59)

One liner to extract a string from file name in BASH shell

This will print the whole given string until the given pattern starts
# i=scriptABC.ksh_wip; echo ${i%_wip}

This will rename all the file names which have “_wip” at the end to the new name without “_wip”.
# ls | while read i; do new_name=`echo ${i%_wip}`; echo " mv $i $new_name";  mv $i $new_name; done

How to check WWN of solaris server?

# fcinfo hba-port

How to find WWN on linux box

# systool -c fc_host -v

How to check ntp servers configured on Sol boxes?

# ntpq -p
# cat /etc/inet/ntp.conf

How to see the list of files in gzipped tar ball (tar.gz) without gunzipping/untarring it

# gunzip < /var/tmp/etc-rc-samba.tar.gz | tar -tvpf -

How to extract the dev id (string) from syminq for given command

# syminq | egrep "emcpower34s2|emcpower35s2|emcpower36s2|emcpower37s2|emcpower38s2" | awk '{print $5}' 
| while read i; do echo ${i:3:4}; done

How to print out the paths for a given device from powerpath output

Save the output of powermt into a file. Run nawk to display 2 lines prior to string 00CD (device id 00CD) and 7 lines after the string. If more than 2 paths, then increase b from 7 to 9 (4 paths), 11 (6 paths etc)

#/etc/powermt display dev=all > test
# nawk '$0~s{for(c=NR-b;c<=NR+a;c++)r[c]=1}{q[NR]=$0}END{for(c=1;c<=NR;c++)if(r[c])print q[c]}' b=2 
a=7 s="00CD" test
Pseudo name=emcpower128a
Symmetrix ID=000292601057
Logical device ID=00CD
state=alive; policy=SymmOpt; priority=0; queued-IOs=0;
--------------- Host ---------------   - Stor -   -- I/O Path --  -- Stats ---
###  HW Path               I/O Paths    Interf.   Mode    State   Q-IOs Errors
3072 pci@7c0/pci@0/pci@8/fibre-channel@0/fp@0,0 c2t5000097408108510d13s0 FA  5eA   active  alive    0      0
3074 pci@7c0/pci@0/pci@9/fibre-channel@0/fp@0,0 c4t500009740810852Cd13s0 FA 12eA   active  alive    0      0 

How to pass on the variable to awk?

# ssh hostA "show flex virtual" | grep bay | awk '{print chassis" "$2" "$3}' chassis=hostA

How to split the strings in awk

# echo 1234567890 | nawk '{ct=substr($1,1,index($1,"8") )};{print ct}'

How to yank multiple lines (copy multiple lines) in vi editor?

Move the custor down/up at the first line and press: mp
Mmove the cursor down/up to the desired line and press: y’p
Move the custor down/up where you want to paste the lines and press: p or P

How to copy across large data between 2 servers (works on ksh shell):

For local-local
( cd /source/directory && tar cf - . ) | ( cd /destination/directory && tar xfbBo - 1 )

For local-remote
( cd /source/directory && tar cf - . ) | rsh usREMOTE "cd /destination/directory && tar xfbBo - 1"

For remote-local
rsh usREMOTE "cd /source/directory && tar cf - ." | ( cd /destination/directory && tar xfbBo - 1 )

How to troubleshoot the core dump

echo '$<msgbuf' | adb -k unix.1 vmcore.1

To find max_throttle in Solaris

# echo "sd_max_throttle/X" |adb -k
physmem fb92ab

Number is in hex, so 100 = 256

To change the value of a kernel parameter dynamically

# mdb -kw
Loading modules: [ unix krtld genunix specfs dtrace ufs fcp fctl qlc sd ip sctp usba nca lofs zfs random nfs ipc md cpc crypto wrsmd fcip logindmux ptm ]
> noexec_user_stack/D
noexec_user_stack:              0
> maxusers/D
maxusers: 495
> maxusers/W 200
maxusers: 0x1ef = 0x200
> $q

How to autoexpire the email after 2 hours

Exchange Server can automatically delete an email after 2 hours if following was added to its header:
Expiry-Date = Mon, 18 Oct 2010 10:11:07 +0100

Easiest way of getting this format with the desired time in the future (upto 24 hours without date maths) is to use the TZ environmental variable before calling the unix date command, i.e.

2 hours in the future

# TZ=GMT-3 date +"%a, %d %h %Y %T +0100"
Mon, 18 Oct 2010 12:12:47 +0100

To run a script on a remote server without copying a script to it

# rsh hostA "cat > /tmp/scriptA.ksh ; ksh /tmp/scriptA.ksh" < /original/LocationOfScript/on/LocalServer/scriptA.ksh

To check which ports are active on the server

# netstat -an | awk '$1~ /\*\./ {print $0}'

To check all ipv4 ports in use

# netstat -f inet

To check all TCP sockets in use

# netstat -P tcp

to check what is using port 80

# lsof -i:80

How to map socket name to port using the port number

# pfiles -F /proc/* | nawk '/^[0-9]+/ { proc=$2} ; /[s]ockname: AF_INET/ { print proc "\n " $0 }'

How to map the files to ports using the PID

# /usr/proc/bin/pfiles <PID> 2>/dev/null | /usr/xpg4/bin/grep <PID>
# /usr/bin/ps -o pid -o args -p <PID> | sed 1d

How to crash the system to generate dump

# adb -k -w /dev/ksyms /dev/mem
rootdir/W 0

What are different reboot commands

# reboot -d (force a crash dump)
# reboot -q (quick and ungraceful – without shutting down running processes first)
# reboot --dl -- --rv (Passing the -r and -v arguments to boot)
# reboot ""disk1 kernel.test/unix"" (reboot using a specific disk and kernel – quotes used for more than one argument)

Where are pseudo terminal, serial devices, current file descriptors, lock and special files for processes kept?

Pseudo Terminal devices – /dev/pts
Serial devices – /dev/term
File descriptors – /dev/fd
Lock and special files for processes – /var/run

/etc/path_to_install is corrupted, can’t boot.

Remove the file and boot with -a. It should ask to rebuild the file. It is possible, that you can’t boot the server even after that. Controller numbers might have got changed. Get the new device ctds numbers and update vfstab.

What are important programs and files for sudo?

Programs are /usr/local/bin/sudo & /usr/local/sbin/visudo, config file is /etc/sudoers

How do you check type of file system?

# fstyp /dev/vx/rdsk/dg01/mqmsw

How do you check which command was used to format a file system?

# fstyp -v /dev/vx/rdsk/dg01/gloss_env


# mkfs -m /dev/vx/rdsk/dg01/gloss_env
mkfs -F ufs -o nsect=64,ntrack=32,bsize=8192,fragsize=1024,cgsize=49,free=1,rps=120,nbpi=8271,opt=t,apc=0,
gap=0,nrpos=8,maxcontig=128 /dev/vx/rdsk/dg01/gloss_env 28076032

What are the different values of /dev/console?

File is /etc/default/login
CONSOLE=/dev/console – Root can login only from console
#CONSOLE=/dev/console – Root can login from anywhere
CONSOLE=/dev/ttya – Root can login only from ttya
CONSOLE=- – Direct root login disallowed everywhere”

Where do you set “su” login variables?

/etc/default/su – SULOG to log (usually in /var/adm/sulog) and SYSLOG variables

How does the entry in /var/adm/sulog reveal su logins?

The file has entries as below:
SU 07/16 10:02 – pts/6 sanaswati-root (sanaswati su to root FAILED)
SU 07/17 10:23 + pts/8 sanaswati-root (sanaswati su to root succeeded)

What are different fields of shadow file?

Passwd: a 13-character encrypted user password; the string *LK*, which indicates an inaccessible account; or the string NP, which indicates no password for the account.
Lastchg: Indicates the number of days between January 1, 1970, and the last password modification date.
Min: Contains the minimum number of days required between password changes.
Max: Contains the maximum number of days the password is valid before the user is prompted to specify a new password.
Inactive: Contains the number of days a user account can be inactive before being locked.
Expire: Contains the absolute date when the user account expires. Past this date, the user cannot log in to the system.

How do you lock and unlock user account?

#passwd -l username (to lock)
#passwd -u username (to unlock)

Error: /dev/ptmx: No such device when attempting ssh/telnet/rlogin

Increase the number of pseudo ttys. Edit /etc/system and add set pt_cnt = , halt and boot -r. From Solaris 8 onwards, this number increases dynamically.

How to set up password less logins as root from one box to another?

hostA# ssh-agent bash
hostA# ssh-add
Enter passphrase for /root/.ssh/id_dsa: XXXXXXX (Enter it here)
Identity added: /root/.ssh/id_dsa (/root/.ssh/id_dsa)
hostA# ssh hostB
Last login: Thu Aug 12 20:15:33 2010 from hostA

How do you reset the NVRAM to factory defaults?

During the boot, press Stop + N.

What is /proc?

/proc is a memory image of each process; it’s a virtual file system that occupies no disk space. /proc is used for programs such as ps and top and all the tools in /usr/proc/bin that can be used to examine process state.

How do you restrict number of processes per user?

Set following in /etc/system: set maxuprc =

How do you find large sized files?

# find /u01 -xdev -size +5240 -exec ls -l {} \;

What will you do when /var is full. Df -k shows 100% but du -k shows a very low value.

This happens when a process has its file opened with a link count of zero (a file with open file descriptor unlinked) and that file has been deleted. The ways to troubleshoot are:
1. Run lsof -a +L1 /var to find out the culprit
2. find /proc/* /fd -links 0 -type f -ls
3. find /proc/* /fd -links 0 -type f -size +2000 -ls
4. find /var -type f | xargs -h | sort -n | tail -n 5 > topfive.txt

Examples of sed

Insert a blank line above every line which matches “regex”

# sed '/regex/{x;p;x;}' filename

Insert a blank line below every line which matches “regex”

# sed '/regex/G' filename

Insert a blank line above and below every line which matches “regex”

# sed '/regex/{x;p;x;G;}' filename

number each line of file, but only print numbers if line is not blank

# sed '/./=' filename | sed '/./N; s/\n/ /'

Delete leading whitespace (spaces, tabs) from front of each line aligns all text flush left

# sed 's/^[ \t]*//' filename # see note on ‘\t’ at end of file

Delete trailing whitespace (spaces, tabs) from end of each line

# sed 's/[ \t]*$//' filename   # see note on ‘\t’ at end of file

Delete BOTH leading and trailing whitespace from each line

# sed 's/^[ \t]*//;s/[ \t]*$//' filename

Insert 5 blank spaces at beginning of each line (make page offset)

# sed 's/^/     /' filename

Reverse each character on the line (emulates “rev”)

# sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

Substitute (find and replace) “foo” with “bar” on each line

# sed 's/foo/bar/' # replaces only 1st instance in a line
# sed 's/foo/bar/4' # replaces only 4th instance in a line
# sed 's/foo/bar/g' # replaces ALL instances in a line
# sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # replace the next-to-last case
# sed 's/\(.*\)foo/\1bar/' # replace only the last case
# sed 's/://g'   # remove all : in WWN

Substitute “foo” with “bar” ONLY for lines which contain “baz”

# sed '/baz/s/foo/bar/g'

Substitute “foo” with “bar” EXCEPT for lines which contain “baz”

# sed '/baz/!s/foo/bar/g'

Delete the first 10 lines of a file

# sed '1,10d'

Delete the last line of a file

# sed '$d'

Delete lines matching pattern

# sed '/pattern/d'

Delete ALL blank lines from a file (same as “grep ‘.’ “)

# sed '/^$/d'   # method 1
# sed '/./!d'   # method 2

Using Tar to move all data

This will NOT copy hidden files; it will copy straight into the same directory level – no dir1 will be created under /dir2.
#(cd /dir1; tar cpEf - *) | (cd /dir2; tar xpEf -)
This will copy hidden files; but it will copy /dir2/dir1.
#(cd /; tar cpEf - dir1) | (cd /dir2; tar xpEf -)

To format disks larger than 1TB

# format -e /dev/vx/c1t1t2s2

How to move hidden files

# ls -A <source> | while read i; do mv <source>/"$i" <destination>; done

ILOM Break Sequence for an x4200:

The escape/break sequence to get from the OS to the SP is [Esc] + [Shift 9]
Hit the Escape key followed by a ( (Shift+9)
Just in case, to get from the SP to the OS, start /SP/console

Break Sequence on LOM?

#. or ~.

A quick command to generate high cpu load

# perl -e 'while (--$ARGV[0] and fork) {}; while () {}' 4
Change “4” to equal your CPU count. Hit Cntrl-C to end the load.

Default password on Brocade 5K:

Accounts are root, admin, user, factory and the default passwords for accounts admin and root are:
When configuring a brand new switch, login as admin/password – then it will prompt you to change all the passwords (for root, user, admin, factory)

Setting up ILOM/ALOM passwords on T5120

Sun T5120 have ILOM on teh system controllers. Below is the screen shot of how to login using the factory password, change it and create a new account ‘admin’ with ALOM cli.

SUNSP002128167CA3 login: root
Password: changeme
Waiting for daemons to initialize...

Daemons ready
Sun(TM) Integrated Lights Out Manager
Copyright 2007 Sun Microsystems, Inc. All rights reserved.
Warning: password is set to factory default.

-> set /SP/users/root/ password=(our standard console password)
Changing password for user /SP/users/root...
Enter new password again: *********
New password was successfully set for user /SP/users/root
-> create /SP/users/admin password=(our standard console password) role=Administrator cli_mode=alom
Creating user...
Created /SP/users/admin
-> set /HOST/bootmode script="setenv auto-boot? false"
Set 'script' to 'setenv auto-boot? false'
-> exit

SUNSP002128167CA3 login: admin
Waiting for daemons to initialize...

Daemons ready
Sun(TM) Integrated Lights Out Manager
Copyright 2007 Sun Microsystems, Inc. All rights reserved.  Use is subject to license terms.

sc> poweron
sc> Chassis | major: Host has been powered on
sc> console
Enter #. to return to ALOM.
0:0:0>SPARC-Enterprise[TM] T5120/T5220 POST 4.28.0 2008/01/22 21:38
       /export/delivery/delivery/4.28/4.28.0/post4.28.x/Niagara/huron/integrated  (root)
0:0:0>Copyright 2008 Sun Microsystems, Inc. All rights reserved
0:0:0>VBSC cmp 0 arg is: 00000000.ffffffff
0:0:0>Basic Memory Tests....Done
0:0:0>Setup POST Mailbox ....Done
0:0:0>Init MMU.....
0:0:0>L2 Tests....Done
2008-11-04 14:34:40.114 0:0:0>INFO:
2008-11-04 14:34:40.140 0:0:0>Master set ACK for vbsc runpost command and spin...
Chassis | major: Host is running
SPARC Enterprise T5120, No Keyboard
Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.28.0, 8064 MB memory available, Serial #85359770.
Ethernet address 0:21:28:16:7c:9a, Host ID: 85167c9a.
auto-boot? =            false
{0} ok

To set M4000 domain autoboot to power on?

Check setting:

XSCF> showdomainmode -d 0
Host-ID             :85021f42
Diagnostic Level    :min
Secure Mode         :off
Autoboot            :off                ? Should be set to "on"
CPU Mode            :auto

Change setting:

XSCF> setdomainmode -d 0 -m autoboot=on ? ? to change setting to "on"
Diagnostic Level    :min        -> -
Secure Mode         :off        -> -
Autoboot            :off        -> on
CPU Mode            :auto       -> -
The specified modes will be changed.
Continue? [y|n] :y
Diagnostic Level    :min
Secure Mode         :off (host watchdog: unavailable  Break-signal:receive)
Autoboot            :on (autoboot:on)
CPU Mode            :auto

Check setting:

XSCF> showdomainmode -d 0
Host-ID             :85021f42
Diagnostic Level    :min
Secure Mode         :off
Autoboot            :on
CPU Mode            :auto

How to clean up /var/adm/wtmpx?

# cd /var/adm/
# /usr/lib/acct/fwtmp < wtmpx > wtmpx.a
# cp wtmpx.a wtmpx.a.bak
# cat /dev/null > wtmpx.a
# /usr/lib/acct/fwtmp -ic < wtmpx.a > wtmpx

How to change milestones/runlevel in Sol 10?

boot -s -> boots into single user mode
boot -m milestone=single-user -> boots into single user mode and leaves there when Ctrl+D is pressed (unlike init S)
different milestones are: single-user, multi-user, multi-user-server, all (all enabled services online), none (very useful in repairing systems that have failures early in the boot process
To change the milestone level when the system is running:
svcadm milestone milestone/multi-user:default
To set the default milestone level:
svcadm milestone -d milestone/multi-user:default

How to enable/bring back the service you deleted from repository using svccdg delete?

# svccfg import /var/svc/menifest/network/nfs/server.xml

How to change shm parameters in Sol 10

# projadd -c "Sybase" 'user.sybase' --->This creates the default project for that user
# cat /etc/project
# projmod -s -K "project.max-shm-memory=(privileged,30GB,deny)" 'user.sybase'
# cat /etc/project

Definition of other SHM parameters:
*project.max-shm-ids: Maximum shared memory IDs for a project. Replaces shmmni
*project.max-sem-ids: Maximum semaphore IDs for a project.Replaces semmni
*project.max-msg-ids: Maximum message queue IDs for a project. Replaces msgmni
*project.max-shm-memory: Total amount of shared memory allowed for a project. Replaces shmmax
*process.max-sem-nsems: Maximum number of semaphores allowed per semaphore set.Replaces semmsl
*process.max-sem-ops: Maximum number of semaphore operations allowed per semop.Replaces semopm
*process.max-msg-qbytes: Maximum number of bytes of messages on a message queue. Replaces msgmnb
*process.max-msg-messages: Maximum number of messages on a message queue.Replaces msgtql

How to find out which Sun Disk array it is connected to?

# cfgadm -lav | grep  ses | grep connected

How to unconfigure FC devices using commands

# cfgadm -o unusable_FCP_dev -f -c unconfigure c2::50001fe15003d298

How to create the exact same directory structure on a server as it exists on the other server?

1.On first server, go the directory from where you want to move the stuff and run:
# find . -type d | cpio -ocvdu > hostA.cpio

2.FTP/SCP/RCP over hostA.cpio file to destination server.

3.Go to the directory where you want the directory tree to be created and run:
# cpio -icvdu < /tmp/*.cpio

How to make new veritas devices visible in Sol 10 zone?

To export VxVM volumes to a non-global zone
1. Create a volume vol1 in the global zone:
global# ls -l /dev/vx/rdsk/rootdg/vol1
crw-------   1 root     root     301, 102000 Jun  3 12:54 /dev/vx/rdsk/rootdg/vol1
crw-------   1 root     sys      301, 10200 0 Jun  3 12:54 /devices/pseudo/vxio@0:rootdg,vol1,102000,raw

2. Add the volume device vol1 to the non-global zone myzone:
global# zonecfg -z myzone
zonecfg:myzone> add device
zonecfg:myzone:device> set match=/dev/vx/rdsk/rootdg/vol1
zonecfg:myzone:device> end
zonecfg:myzone> commit

3. Ensure that the devices will be seen in the non-global zone:
global# zoneadm -z myzone halt
global# zoneadm -z myzone boot

4. Verify that /myzone/dev/vx contains the raw volume node and that the non-global zone can perform I/O to the raw volume node.

How to check zone status and configurations?

# zoneadm list -vc (shows the zone names and their status)
# zonecfg -z zonename info (shows zone configuration)

How to set setuid and setgids?

# chmod 1710 /usr/bin/scriptA
# ls -l $_
-rwx--x--T   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 0710 /usr/bin/scriptA
# ls -l $_
-rwx--x---   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 0510 /usr/bin/scriptA
# ls -l $_
-r-x--x---   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 2510 /usr/bin/scriptA
# ls -l $_
-r-x--s---   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 4510 /usr/bin/scriptA
# ls -l $_
-r-s--x---   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 1510 /usr/bin/scriptA
# ls -l $_
-r-x--x--T   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 1514 /usr/bin/scriptA
# ls -l $_
-r-x--xr-T   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 1515 /usr/bin/scriptA
# ls -l $_
-r-x--xr-t   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 4515 /usr/bin/scriptA
# ls -l $_
-r-s--xr-x   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA
# chmod 4510 /usr/bin/scriptA
# ls -l $_
-r-s--x---   1 root     dbaadmin    6900 Mar  3 13:07 /usr/bin/scriptA

How to replace commas (or any other character with other character)

# echo 1001,1002,1003,1004,1005,1006 | tr "," "\n"

How to use kerberos credentials

# kinit username/root (enter your password)
# ksu
Define an alias for above in .bashrc to makes it a single command.
alias kroot='kinit userjohn/root && ksu'

Finding out where the storage is presented on a Solaris Zone

Scenario : Storage is visible to zone zoneA but you don’t know the global zone where the storage was actually presented.

1.Login to the zone and find out the name of bge interface

zoneA# ifconfig -a
lo0:1: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet netmask ff000000
bge0:2: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet netmask fffffc00 broadcast
nxge0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 4
        inet netmask fffffc00 broadcast

2. Use arp -a to find connections from the zone to the global zone. Filter out with grep the interface you’re interested in and hosts with lonux. The global zone is usually the lowest instance (hostnameA in this case)

zoneA# arp -a | grep bge0 | grep hostname | sort
bge0   hostnameA SPLA     00:21:28:46:bf:48
bge0   hostnameB o        00:21:28:46:bf:f2
bge0   hostnameC SPLA     00:21:28:46:bf:48
bge0   hostnameD SPLA     00:21:28:46:bf:48

3. Verify that this actually is the global zone and run ls on /etc/zones.

hostnameA# ls /etc/zones/zone*.xml
/etc/zones/zoneA.xml  /etc/zones/zone2.xml

(In this case, zoneA and zoneB are running off global zone hostnameA)

How Storage is Presented from the Global Zone to the Zone

For this, view the xml file listed above and you will see a line like follows –
<filesystem special="/dev/vx/dsk/dg_zoneA/zoneA_data_1"
directory="/local/1" type="vxfs"/>

How to clean up removed EMC disks?

# update_drv -f sd
Cannot unload module: sd
Will be unloaded upon reboot.
Forcing update of sd.conf.
# defvsadm -C
# /etc/powercf -q
# symcfg discover
This operation may take up to a few minutes. Please be patient...
# echo | format | grep unknown

How to find out the PWWN of the remote node connected to given HBA

# fcinfo remote-port -s -p 10000000c98f551f
Remote Port WWN: 50060e8005000001
        Active FC4 Types: SCSI
        SCSI Target: yes
        Node WWN: 50060e8005000001
        LUN: 0
          Vendor: HITACHI
          Product: OPEN-V      -SUN
          OS Device Name: /dev/rdsk/c5t50060E8005000001d0s2
        LUN: 1
          Vendor: HITACHI
          Product: OPEN-V      -SUN
          OS Device Name: /dev/rdsk/c5t50060E8005000001d1s2
        LUN: 2
          Vendor: HITACHI
          Product: OPEN-V      -SUN
          OS Device Name: /dev/rdsk/c5t50060E8005000001d2s2

, , , , , , , ,

No comments yet.

Leave a Reply