User talk:Bossa nesta

From CDOT Wiki
Revision as of 06:22, 14 October 2008 by Bossa nesta (talk | contribs)
Jump to: navigation, search

Mid-term Note - SPR720


================== File Permission ==================
$ chmod 7777 rpm.txt ; ll rpm.txt
-rwsrwsrwt 1 BossaNesta BossaNesta 41310 2008-10-12 16:39 rpm.txt
$ chmod 7000 rpm.txt ; ll rpm.txt
---S--S--T 1 BossaNesta BossaNesta 41310 2008-10-12 16:39 rpm.txt
$ chmod 4234 rpm.txt ; ll rpm.txt
--wS-wxr-- 1 BossaNesta BossaNesta 41310 2008-10-12 16:39 rpm.txt


> set-user-id (suid)
 = use owner ID instead of current user ID
> set-group-id (sgid)
 = inherit group ID from directory, 
 = sub-dir will automatic has same sgid
 = even over sudo command and root ID
> sticky bit
 = on old systems, file was not swapped out and stuck in memory
 = a file in that directory can be renamed or deleted only by the
 owner of the file/directory or the superuser.
================== BASH SCRIPTING ==================
$ cal 16 2008 2>&1 >all-output.txt
run 'cal' with parameter "16 2008", err out to display/terminal,
 output to "all-output.txt"
$ cal 16 2008 2>err.txt >all-output.txt
err out to "err.txt", output to file "all-output.txt"

grep "/bin/bash$" /etc/passwd | cut -d: -f1 | 
           sort | mail -s "Bash users" joe@example.com

1. selects all BASH users from the system account file /etc/passwd
2. cuts out the user name ('cut -d: -f1')
3. sorts them into order ('sort')
4. e-mails them to joe@example.com with the subject line "Bash users". 

$ vi $(date +%Y)-notes.txt
creat a note that start with year, forexample, "2007-note.txt", "2008-note.txt"

$ vi $(date +%Y%m%d)-notes.txt
creat a note with current year, month, date, e.g: "20081012-note.txt'

$ vi Nes$(date +%Y%m%d)-notes.txt
creat a note with the name started with "Nes" follow by current year,
 month, date, e.g: "Nes20081012-note.txt'


= single quote is actual value/string, double or no quote is variable

$ X="Test"
$ echo "$X"
Test
$ echo '$X'
$X
$ echo $X
Test

= ALWAYS use double quote for value
$ touch "test file"
$ NAME="test file"
$ rm $NAME
rm: cannot remove `test': No such file or directory
rm: cannot remove `file': No such file or directory
$ rm "$NAME"

= 'export' to turn variables into environment variables, 
 so, all sub process can use the variable(s)
$ TEST="Yes"
$ bash -c 'echo $TEST'
  
$ export TEST
$ bash -c 'echo $TEST'
Yes
$

= destory/erase variables
unset Var_NAME


Common Environment Variables

Variable   ↓	Description   ↓
$PATH 		command search paths
$HOME 		Current user's home directory.
$MAIL 		Current user's mailbox.
$DISPLAY 	X window display specification.
$TERM 		Current terminal type (used to analyze keypresses
		and send special codes such as colours and effects to the terminal).
$SHELL 		Absolute pathname of the default shell for the current user.
$HOSTNAME 	Name of the host (computer) on which the shell is executing.
$PS1 		Primary prompt, used by the shell to request a command from the user.
$PS2 		Secondary prompt, used to request additional info from the user.
$PS3 		3rd prompt (rarely used).
$PS4 		4th prompt (rarely used). 

= BASH automatically updates the value of certain special variables:
Variable   ↓	Description   ↓
$? 		Exit status of last pipeline
$$ 		Process ID of the current shell
$! 		Process ID of the last background pipeline
$RANDOM 	Random integer (usually in the range 0-327687).


Retrieving Exist Status
= ONLY '0' IS  successfull, the rest are error
$ ls /tmp >/dev/null
$ echo $?
0
$ ls /temp >/dev/null
ls: cannot access /temp: No such file or directory
$ echo $?
2

$ exit 2
Set exit variable to '2"

$ exit 2143
Set exit variable to '2143"

The test Command

= BASH has a built-in test command (similar to /bin/test) 
which can perform basic string and integer comparisons 
using these operators (results are returned as an exit code):
= return 0 or 1, where 0 is true, 1 is false

Operator 	Comparision type	Comparison 	Example
-eq 		Integer 		Equal 		$x -eq 4
-ne 		Integer 		Not equal 	$x -ne 4
-gt 		Integer 		Greater than 	$x -gt 0
-lt 		Integer 		Less than 	$x -lt 1000
-ge 		Integer 		Greater/equal 	$x -ge $y
= 		String	 		Equal 		"$x" = "Y"
!= 		String 			Not equal 	"$x" != "NEVER"

Unary File Tests
Operator 	Test 			Example
-e 		File exists 		[ -e /etc/passwd ]
-r 		File is readable 	[ -r /etc/hosts ]
-w 		File is writable 	[ -w /tmp ]
-x 		File is executable 	[ -x /usr/bin/ls ]
-f 		File is a regular file 	[ -f /dev/tty ]
-d 		File is a directory 	[ -d /dev/tty ] 

= For example....
$ test 10 -gt 5
$ echo $?
0

$ test 10 -lt 5
$ echo $?
1

$ [ -w /etc/passwd ]
$ echo $?
1

$ a=10; [ "$a" -ge 100 -a "$a" -le 1000 ]; echo $?
1

$ [ ! "a" = "b" ]; echo $?
0

$ [ ! "a" != "b" ]; echo $?
1

======================== BASH FLOW CONTROL ========================


Format of 'if'
========================
if pipeline
then
  success-commands
[elif pipeline2
  else-if-commands
]
[else
  alt-commands
]
fi
========================

== CASE == 
echo -n "Are you sure you wish to remove '$file'?"
read YN
if [ "$YN" = "y" -o "$YN" = "Y" ]
then
   echo "Deleting '$file'..."
   rm "$file"
else
   echo "Aborted. '$file' not deleted."
fi


if [ "$(date +%Y)" -lt 2010 ]
then
   echo "Still waiting for the Whistler Olympics."
fi


Format of "while"
========================
while pipeline
do
  commands
done
========================

== CASE ==
num=1
while [ $num -le 5 ]
do
  echo $num
  num=$[ $num + 1 ]
done

== CASE ==
# In this case it will just print number 1 to 5
========================
while (( 1 ))
do
  eject -T
done


========================
Format of "for"
========================
for COLOUR in red blue green
do
   print "$COLOUR"
done
========================
for ((x=0; x<=10; x++))
do 
   echo $x
done
========================
for FILE in /etc/*
do
   if [ -x $FILE ]
   then
      echo "$FILE is executable"
   fi
done
========================

================== RPM ==================
RPM file names normally have the following format:
<name>-<version>-<release>.<arch>.rpm

== Query / Verify commands
   1. Getting detailed information:
      $ rpm -qi wget
   2. Determining which package installed /usr/bin/wget:
      $ rpm -qf /usr/bin/wget
   3. Showing all the files installed by the package wget:
      $ rpm -ql wget
   4. Viewing the documentation files for the command wget:
      $ rpm -qd wget
   5. Listing all files included in the not yet installed package wget 
          by entering the following:
      $ rpm -qpl /mnt/iso/suse/i586/wget-1.10.2-78.i586.rpm
   6. Listing all files included in the installed package wget:
      $ rpm -ql wget
   7. Verifying that a package is no longer installed by entering:
      $ rpm -qa | grep wget
   8. Seeing what has changed in the files on your hard drive since the 
wget RPM was originally installed by entering the following:
      $ rpm -V wget
   9. Checking package to ensure its integrity and origin: (NOTE: gpg or
 pgp software must be installed on your system before you use this command)
      $ rpm -K /mnt/iso/suse/i586/wget-1.10.2-78.i586.rpm

== Install / Uninstall / Upgrade commands
  1. Installing the package wget:
      $ rpm -ivh /mnt/iso/suse/i586/wget-1.10.2-78.i586.rpm
  2. Uninstalling the package wget:
      $ rpm -e wget
  3. Upgrading the package wget: (NOTE: if the package is not installed 
it will install it for You, like option "-ivh")
      $ rpm -Uvh /mnt/iso/suse/i586/wget-1.10.2-78.i586.rpm
  4. Extracting RPM file using rpm2cpio and cpio command: (NOTE: RPM content
 will be extracted the current directory)
      $ rpm2cpio wget-1.10.2-78.i586.rpm | cpio -idmv
================== SYA710 ==================
# Create a regular file (filled with zeros) as 
the container for file system

       dd if=/dev/zero of=fakedisk bs=1024 count=10000 

# associate file "fakedisk" with /dev/loop0
       losetup /dev/loop0 fakedisk 

# Now create a file system in the container:
       mkfs -t ext2 /dev/loop0 
# Make an ext3 file system in the new partition:
       mkfs -t ext3 /dev/sda4

# Mount the file system:
       mount /dev/loop0 /mnt1 
# mount /dev/sda4 into /mnt1
       mount /dev/sda4 /mnt1 
# Unmount the file system
       umount /mnt1 

# Display partition info
-h, --human-readable	in K,M,G form

-i, --inodes		print inodes instaed of block usage
-T, --print-type	print file system type
       df -Thi /dev/loop0

# Delete the loop device
       losetup -d /dev/loop0 

# Inform the kernel of the change in the partition table
       partprobe 

# Now copy the contents of your /home directory to this
 new file system like this:
       cp -a /home/* /mnt1 

# make /dev/sda4 as /home, in  /etc/fstab file...
       /dev/sda4 	/home 	ext3 	defaults 	1 3

# initialize two unused partitions to LVM.
	pvcreate /dev/sda5 /dev/sda6

# Create a volume group 'seneca' and put physical volume /dev/sda5 into it.
	vgcreate seneca /dev/sda5

# label partition /dev/seneca/home as "myhome"
	e2label /dev/seneca/home myhome

# Verify a partition label 
	e2label /dev/seneca/home

# add physical volumes to a volume group
	vgextend seneca /dev/sda6

# extend the size of a logical volume
	lvextend -L+1G /dev/seneca/home

# ext2/ext3 file system resizer
	resize2fs /dev/seneca/home

# unpack a bz2 file into a directory
	tar xvjf linux-2.6.26.tar.bz2 

# decompress a gz with gzip
	gzip -d config.gz 

# creates initial ramdisk images for preloading modules  
	mkinitrd -k vmlinuz-2.6.26 -i initrd-2.6.26