Difference between revisions of "User talk:Bossa nesta"

From CDOT Wiki
Jump to: navigation, search
(Removing all content from page)
Line 1: Line 1:
 +
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

Revision as of 23:15, 12 October 2008

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

  1. 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