Tuesday, April 29, 2014

Unix basic commannds

Basic Unix tools:
1. Explain the difference between these two commands. This question is very
important. If you don't know the answer, then look back at the shell chapter.
find /data -name "*.txt"
find /data -name *.txt
When *.txt is quoted then the shell will not touch it. The find tool will look in the
/data for all files ending in .txt.
When *.txt is not quoted then the shell might expand this (when one or more files
that ends in .txt exist in the current directory). The find might show a different result,
or can result in a syntax error.

2. Explain the difference between these two statements. Will they both work when
there are 200 .odf files in /data ? How about when there are 2 million .odf files ?
find /data -name "*.odf" > data_odf.txt
find /data/*.odf > data_odf.txt
The first find will output all .odf filenames in /data and all subdirectories. The shell
will redirect this to a file.
The second find will output all files named .odf in /data and will also output all files
that exist in directories named *.odf (in /data).
With two million files the command line would be expanded beyond the maximum
that the shell can accept. The last part of the command line would be lost.

3. Write a find command that finds all files created after January 30th 2010.
touch -t 201001302359 marker_date
find . -type f -newer marker_date
There is another solution :
find . -type f -newerat "20100130 23:59:59"

4. Write a find command that finds all *.odf files created in September 2009.
touch -t 200908312359 marker_start
touch -t 200910010000 marker_end
find . -type f -name "*.odf" -newer marker_start ! -newer marker_end
The exclamation mark ! -newer can be read as not newer.

5. Count the number of *.conf files in /etc and all its subdirs.
find /etc -type f -name '*.conf' | wc –l

6. Two commands that do the same thing: copy *.odf files to /backup/ . What would
be a reason to replace the first command with the second ? Again, this is an important
question.
cp -r /data/*.odf /backup/basic Unix tools
144
find /data -name "*.odf" -exec cp {} /backup/ \;
The first might fail when there are too many files to fit on one command line.

7. Create a file called loctest.txt. Can you find this file with locate ? Why not ? How
do you make locate find this file ?
You cannot locate this with locate because it is not yet in the index.
Updated

8. Use find and -exec to rename all .htm files to .html.
paul@rhel55 ~$ find . -name '*.htm'
./one.htm
./two.htm
paul@rhel55 ~$ find . -name '*.htm' -exec mv {} {}l \;
paul@rhel55 ~$ find . -name '*.htm*'
./one.html
./two.html

9. Issue the date command. Now display the date in YYYY/MM/DD format.
date +%Y/%m/%d

10. Issue the cal command. Display a calendar of 1582 and 1752. Notice anything
special ?
cal 1582
The calendars are different depending on the country. Check http://linux-training.be/
files/studentfiles/dates.txt

Working with directories:
1. Display your current directory.
pwd
2. Change to the /etc directory.
cd /etc
3. Now change to your home directory using only three key presses.
cd (and the enter key)
4. Change to the /boot/grub directory using only eleven key presses.
cd /boot/grub (use the tab key)
5. Go to the parent directory of the current directory.
cd .. (with space between cd and ..)
6. Go to the root directory.
cd /
7. List the contents of the root directory.
ls
8. List a long listing of the root directory.
ls -l
9. Stay where you are, and list the contents of /etc.
ls /etc
10. Stay where you are, and list the contents of /bin and /sbin.
ls /bin /sbin
11. Stay where you are, and list the contents of ~.
ls ~
12. List all the files (including hidden files) in your home directory.
ls -al ~
13. List the files in /boot in a human readable format.
ls -lh /boot
14. Create a directory testdir in your home directory.
mkdir ~/testdir
15. Change to the /etc directory, stay here and create a directory newdir in your home
directory.working with directories
34
cd /etc ; mkdir ~/newdir
16. Create in one command the directories ~/dir1/dir2/dir3 (dir3 is a subdirectory
from dir2, and dir2 is a subdirectory from dir1 ).
mkdir -p ~/dir1/dir2/dir3
17. Remove the directory testdir.
rmdir testdir
18. If time permits (or if you are waiting for other students to finish this practice),
use and understand pushd and popd. Use the man page of bash to find information
about these commands.
man bash
paul@laika:/etc$ cd /bin
paul@laika:/bin$ pushd /lib
/lib /bin
paul@laika:/lib$ pushd /proc
/proc /lib /bin
paul@laika:/proc$
paul@laika:/proc$ popd
/lib /bin
paul@laika:/lib$
paul@laika:/lib$
paul@laika:/lib$ popd
/bin
paul@laika:/bin$


Working with files:
1. List the files in the /bin directory
ls /bin
2. Display the type of file of /bin/cat, /etc/passwd and /usr/bin/passwd.
file /bin/cat /etc/passwd /usr/bin/passwd
3a. Download wolf.jpg and LinuxFun.pdf from http://linux-training.be (wget http://
linux-training.be/files/studentfiles/wolf.jpg and wget http://linux-training.be/files/
books/LinuxFun.pdf)
3b. Display the type of file of wolf.jpg and LinuxFun.pdf
file wolf.jpg LinuxFun.pdf
3c. Rename wolf.jpg to wolf.pdf (use mv).
mv wolf.jpg wolf.pdf
3d. Display the type of file of wolf.pdf and LinuxFun.pdf.
file wolf.pdf LinuxFun.pdf
4. Create a directory ~/touched and enter it.
mkdir ~/touched ; cd ~/touched
5. Create the files today.txt and yesterday.txt in touched.
touch today.txt yesterday.txt
6. Change the date on yesterday.txt to match yesterday's date.
touch -t 200810251405 yesterday.txt (substitute 20081025 with yesterday)
7. Copy yesterday.txt to copy.yesterday.txt
cp yesterday.txt copy.yesterday.txt
8. Rename copy.yesterday.txt to kim
mv copy.yesterday.txt kim
9. Create a directory called ~/testbackup and copy all files from ~/touched into it.
mkdir ~/testbackup ; cp -r ~/touched ~/testbackup/
10. Use one command to remove the directory ~/testbackup and all files into it.
rm -rf ~/testbackup
11. Create a directory ~/etcbackup and copy all *.conf files from /etc into it. Did you
include all subdirectories of /etc ?


File contents:
1. Display the first 12 lines of /etc/services.
head -12 /etc/services
2. Display the last line of /etc/passwd.
tail -1 /etc/passwd
3. Use cat to create a file named count.txt that looks like this:
cat > count.txt
One
Two
Three
Four
Five (followed by Ctrl-d)
4. Use cp to make a backup of this file to cnt.txt.
cp count.txt cnt.txt
5. Use cat to make a backup of this file to catcnt.txt.
cat count.txt > catcnt.txt
6. Display catcnt.txt, but with all lines in reverse order (the last line first).
tac catcnt.txt
7. Use more to display /var/log/messages.
more /var/log/messages
8. Display the readable character strings from the /usr/bin/passwd command.
strings /usr/bin/passwd
9. Use ls to find the biggest file in /etc.
ls -lrS /etc
10. Open two terminal windows (or tabs) and make sure you are in the same directory
in both. Type echo this is the first line > tailing.txt in the first terminal, then issue
tail -f tailing.txt in the second terminal. Now go back to the first terminal and type
echo This is another line >> tailing.txt (note the double >>), verify that the tail -f
in the second terminal shows both lines. Stop the tail -f with Ctrl-C.
11. Use cat to create a file named tailing.txt that contains the contents of tailing.txt
followed by the contents of /etc/passwd.
cat /etc/passwd >> tailing.txt
12. Use cat to create a file named tailing.txt that contains the contents of tailing.txt
preceded by the contents of /etc/passwd.
mv tailing.txt tmp.txt ; cat /etc/passwd tmp.txt > tailing.txt

File system tree:
1. Does the file /bin/cat exist ? What about /bin/dd and /bin/echo. What is the type
of these files ?
ls /bin/cat ; file /bin/cat
ls /bin/dd ; file /bin/dd
ls /bin/echo ; file /bin/echo
2. What is the size of the Linux kernel file(s) (vmlinu*) in /boot ?
ls -lh /boot/vm*
3. Create a directory ~/test. Then issue the following commands:
cd ~/test
dd if=/dev/zero of=zeroes.txt count=1 bs=100
od zeroes.txt
dd will copy one times (count=1) a block of size 100 bytes (bs=100) from the file /
dev/zero to ~/test/zeroes.txt. Can you describe the functionality of /dev/zero ?
/dev/zero is a Linux special device. It can be considered a source of zeroes. You
cannot send something to /dev/zero, but you can read zeroes from it.
4. Now issue the following command:
dd if=/dev/random of=random.txt count=1 bs=100 ; od random.txt
dd will copy one times (count=1) a block of size 100 bytes (bs=100) from the file /
dev/random to ~/test/random.txt. Can you describe the functionality of /dev/random
?
/dev/random acts as a random number generator on your Linux machine.
5. Issue the following two commands, and look at the first character of each output
line.
ls -l /dev/sd* /dev/hd*
ls -l /dev/tty* /dev/input/mou*
The first ls will show block(b) devices, the second ls shows character(c) devices. Can
you tell the difference between block and character devices ?
Block devices are always written to (or read from) in blocks. For hard disks, blocks
of 512 bytes are common. Character devices act as a stream of characters (or bytes).
Mouse and keyboard are typical character devices.
6. Use cat to display /etc/hosts and /etc/resolv.conf. What is your idea about the
purpose of these files ?the Linux file tree
71
/etc/hosts contains hostnames with their ip address
/etc/resolv.conf should contain the ip address of a DNS name server.
7. Are there any files in /etc/skel/ ? Check also for hidden files.
Issue "ls -al /etc/skel/". Yes, there should be hidden files there.
8. Display /proc/cpuinfo. On what architecture is your Linux running ?
The file should contain at least one line with Intel or other cpu.
9. Display /proc/interrupts. What is the size of this file ? Where is this file stored ?
The size is zero, yet the file contains data. It is not stored anywhere because /proc is
a virtual file system that allows you to talk with the kernel. (If you answered "stored
in RAM-memory, that is also correct...).
10. Can you enter the /root directory ? Are there (hidden) files ?
Try "cd /root". Yes there are (hidden) files there.
11. Are ifconfig, fdisk, parted, shutdown and grub-install present in /sbin ? Why are
these binaries in /sbin and not in /bin ?
Because those files are only meant for system administrators.
12. Is /var/log a file or a directory ? What about /var/spool ?
Both are directories.
13. Open two command prompts (Ctrl-Shift-T in gnome-terminal) or terminals (CtrlAlt-F1, Ctrl-Alt-F2, ...) and issue the who am i in both. Then try to echo a word from
one terminal to the other.
tty-terminal: echo Hello > /dev/tty1
pts-terminal: echo Hello > /dev/pts/1
14. Read the man page of random and explain the difference between /dev/random
and /dev/urandom.
man 4 random


Redirection and pipes:
1. Use ls to output the contents of the /etc/ directory to a file called etc.txt.
ls /etc > etc.txt
2. Activate the noclobber shell option.
set -o noclobber
3. Verify that nocclobber is active by repeating your ls on /etc/.
ls /etc > etc.txt (should not work)
4. When listing all shell options, which character represents the noclobber option ?
echo $- (noclobber is visible as C)
5. Deactivate the noclobber option.
set +o noclobber
6. Make sure you have two shells open on the same computer. Create an empty
tailing.txt file. Then type tail -f tailing.txt. Use the second shell to append a line of
text to that file. Verify that the first shell displays this line.
paul@deb503:~$ > tailing.txt
paul@deb503:~$ tail -f tailing.txt
hello
world
in the other shell:
paul@deb503:~$ echo hello >> tailing.txt
paul@deb503:~$ echo world >> tailing.txt
7. Create a file that contains the names of five people. Use cat and output redirection
to create the file and use a here document to end the input.
paul@deb503:~$ cat > tennis.txt << ace
> Justine Henin
> Venus Williams
> Serena Williams
> Martina Hingis
> Kim Clijsters
> ace
paul@deb503:~$ cat tennis.txt
Justine Henin
Venus Williams
Serena Williams
Martina Hingis
Kim Clijsters
paul@deb503:~$


***Linux security concepts(Groups & users):***
Groups:
1. Create the groups tennis, football and sports.
groupadd tennis ; groupadd football ; groupadd sports
2. In one command, make venus a member of tennis and sports.
usermod -a -G tennis,sports venus
3. Rename the football group to foot.
groupmod -n foot football
4. Use vi to add serena to the tennis group.
vi /etc/group
5. Use the id command to verify that serena is a member of tennis.
id (and after logoff logon serena should be member)
6. Make someone responsible for managing group membership of foot and sports.
Test that it works.
gpasswd -A (to make manager)
gpasswd -a (to add member)

Users:
1. Create the users Serena Williams, Venus Williams and Justine Henin, all of them
with password set to stargate, with username (lower case) as their first name, and
their full name in the comment. Verify that the users and their home directory are
properly created.
useradd -m -c "Serena Williams" serena ; passwd serena
useradd -m -c "Venus Williams" venus ; passwd venus
useradd -m -c "Justine Henin" justine ; passwd justine
tail /etc/passwd ; tail /etc/shadow ; ls /home
Keep user logon names in lowercase!
2. Create a user called kornuser, give him the Korn shell (/bin/ksh) as his default
shell. Log on with this user (on a command line or in a tty).
useradd -s /bin/ksh kornuser ; passwd kornuser
3. Create a user named einstime without home directory, give him /bin/date as his
default logon shell. What happens when you log on with this user ? Can you think of
a useful real world example for changing a user's login shell to an application ?
useradd -s /bin/date einstime ; passwd einstime
It can be useful when users need to access only one application on the server. Just
logging on opens the application for them, and closing the application automatically
logs them off.
4. Try the commands who, whoami, who am i, w, id, echo $USER $UID .
who ; whoami ; who am i ; w ; id ; echo $USER $UID
5a. Lock the venus user account with usermod.
usermod -L venus
5b. Use passwd -d to disable the serena password. Verify the serena line in /etc/
shadow before and after disabling.
grep serena /etc/shadow; passwd -d serena ; grep serena /etc/shadow
5c. What is the difference between locking a user account and disabling a user
account's password ?
Locking will prevent the user from logging on to the system with his password (by
putting a ! in front of the password in /etc/shadow). Disabling with passwd will erase
the password from /etc/shadow.
6. As root change the password of einstime to stargate.
Log on as root and type: passwd einstime
7. Now try changing the password of serena to serena as serena.
log on as serena, then execute: passwd serena... it should fail!

file permissions:
1. As normal user, create a directory ~/permissions. Create a file owned by yourself
in there.
mkdir ~/permissions ; touch ~/permissions/myfile.txt
2. Copy a file owned by root from /etc/ to your permissions dir, who owns this file
now ?
cp /etc/hosts ~/permissions/
The copy is owned by you.
3. As root, create a file in the users ~/permissions directory.
(become root)# touch /home/username/permissions/rootfile
4. As normal user, look at who owns this file created by root.
ls -l ~/permissions
The file created by root is owned by root.
5. Change the ownership of all files in ~/permissions to yourself.
chown user ~/permissions/*
You cannot become owner of the file that belongs to root.
6. Make sure you have all rights to these files, and others can only read.
chmod 644 (on files)
chmod 755 (on directories)
7. With chmod, is 770 the same as rwxrwx--- ?
yes
8. With chmod, is 664 the same as r-xr-xr-- ?
No
9. With chmod, is 400 the same as r-------- ?
yes
10. With chmod, is 734 the same as rwxr-xr-- ?
no
11a. Display the umask in octal and in symbolic form.
umask ; umask –Ss
11b. Set the umask to 077, but use the symbolic format to set it. Verify that this works.
umask -S u=rwx,go=
12. Create a file as root, give only read to others. Can a normal user read this file ?
Test writing to this file with vi.
(become root)
# echo hello > /home/username/root.txt
# chmod 744 /home/username/root.txt
(become user)
vi ~/root.txt
13a. Create a file as normal user, give only read to others. Can another normal user
read this file ? Test writing to this file with vi.
echo hello > file ; chmod 744 file
Yes, others can read this file
13b. Can root read this file ? Can root write to this file with vi ?
Yes, root can read and write to this file. Permissions do not apply to root.
14. Create a directory that belongs to a group, where every member of that group
can read and write to files, and create files. Make sure that people can only delete
their own files.
mkdir /home/project42 ; groupadd project42
chgrp project42 /home/project42 ; chmod 775 /home/project42

You can not yet do the last part of this exercise...

SSL Concepts

ssl_setup.bat
rem ==================================================================
rem One possible approach to creating the SSL key repositories
rem for two queue managers
rem
rem Using personal certificates only.
rem
rem The commands can be run (as written here) on a single machine
rem and then the completed key repositories moved into locations
rem accessible by the queue managers
rem
rem Dale Lane (http://hursleyonwmq.wordpress.com/)
rem ==================================================================
REM **************************************
REM *** ENVIRONMENT
REM **************************************
rem *** path for WebSphere MQ
set MQBASE=C:\Program Files\IBM\WebSphere MQ
set PASSWORD=passw0rd
REM *** command name (gsk7cmd on UNIX, runmqckm on Windows)
set GSK7CMD=runmqckm
REM --------------------------------------------------------------------
REM On Windows, using runmqckm acts as a wrapper for the GSkit command
REM gsk7cmd in the correct environment. Using runmqckm means you do
REM not need the following commands.
REM Alternatively, you could use gsk7cmd, and use the following two
REM commands to set the environment manually.
REM --------------------------------------------------------------------
rem *** Set the path to the GSKit programs used to create the repository ***
rem set PATH=%PATH%;C:\Program Files\IBM\gsk7\bin
rem *** Set the path to the JRE installed by WMQ for GSKit ***
rem set JAVA_HOME=%MQBASE%\gskit\jre
REM --------------------------------------------------------------------
REM **************************************
REM lowercase!
REM when used in label names, we need
REM queue manager names in lowercase,
REM regardless of the case of the qmgr
REM names
REM **************************************
set QMGR1NAME=qmgr1
set QMGR2NAME=qmgr2
REM ***********************************************************
REM create repositories for use by queue managers to store keys
REM
REM these should be moved to the SSL directory of the relevant
REM queue manager, or the queue manager SSLKEYR attribute
REM altered to point at this location
REM ***********************************************************
%GSK7CMD% -keydb -create -db qmgr1.kdb -pw %PASSWORD% -type cms -stash
%GSK7CMD% -keydb -create -db qmgr2.kdb -pw %PASSWORD% -type cms -stash
REM **********************************************
REM create certificates for use by queue managers
REM
REM once created, the public keys are exported
REM for adding to repositories for other queue
REM managers
REM **********************************************
rem *** Create a certificate to be signed for QMGR1 ***
%GSK7CMD% -cert -create -db qmgr1.kdb -pw %PASSWORD% -label ibmwebspheremq%QMGR1NAME% -dn "CN=Qmgr1,O=IBM,OU=Hursley blog,L=Hursley,C=UK"
rem *** Extract the public key for QMGR1 for use with other queue managers ***
%GSK7CMD% -cert -extract -db qmgr1.kdb -pw %PASSWORD% -label ibmwebspheremq%QMGR1NAME% -target qmgr1cert.arm
rem *** Create a certificate to be signed for QMGR2 ***
%GSK7CMD% -cert -create -db qmgr2.kdb -pw %PASSWORD% -label ibmwebspheremq%QMGR2NAME% -dn "CN=Qmgr2,O=IBM,OU=Hursley blog,L=Hursley,C=UK"
rem *** Extract the public key for QMGR1 for use with other queue managers ***
%GSK7CMD% -cert -extract -db qmgr2.kdb -pw %PASSWORD% -label ibmwebspheremq%QMGR2NAME% -target qmgr2cert.arm
REM **********************************************
REM add public keys for use by queue managers
REM
REM each queue manager needs the public key for
REM each other queue manager it will connect to
REM **********************************************
rem *** add the public key for QMGR2 to the QMGR1 key repository ***
%GSK7CMD% -cert -add -db qmgr1.kdb -pw %PASSWORD% -label ibmwebspheremq%QMGR2NAME% -file qmgr2cert.arm
rem *** add the public key for QMGR1 to the QMGR2 key repository ***
%GSK7CMD% -cert -add -db qmgr2.kdb -pw %PASSWORD% -label ibmwebspheremq%QMGR1NAME% -file qmgr1cert.arm
REM ---------------------------------------------------
REM THE FOLLOWING FILES REMAIN:
REM ---------------------------------------------------
REM QUEUE MANAGER KEY REPOSITORIES
REM qmgr1.kdb (and associated stash file qmgr1.sth)
REM qmgr2.kdb (and associated stash file qmgr2.sth)
REM are now ready for use by the queue managers
REM -----------------------------------------------------
REM qmgr1cert.arm
REM qmgr2cert.arm
REM these are the queue manager certificates for
REM importing into each queue manager repository
REM and can now be deleted
REM ---------------------------------------------------
rem ==================================================================
rem END
rem ==================================================================

Wednesday, April 2, 2014

MQ Channels

Current and active

The channel is "current" if it is in any state other than inactive. A current channel is "active" unless it is in RETRYING, STOPPED, or STARTING state. If a channel is "active" it may also show a sub-state giving more detail of exactly what the channel is doing.
Figure 1. Flows between channel states
The diagram shows the flows between channel states. A stopped channel can be started, and becomes inactive. A start command, trigger, remote initiation, or a channel initiator places the channel in the initializing state. The channel moves into starting state, and then binding state, while it establishes session and initial data exchange. If the status is OK, the channel state becomes running. The channel can be placed into a paused state while waiting for message-retry interval, or a stopping state after an error, a STOP request, or if a disconnect interval expires. The channel could then move into a retrying state, or back to the stopped state.

Note:
  1. When a channel is in one of the six states highlighted in figure (INITIALIZING, BINDING, REQUESTING, RUNNING, PAUSED, or STOPPING), it is consuming resource and a process or thread is running; the channel is active.
  2. When a channel is in STOPPED state, the session may be active because the next state is not yet known.