Difference between revisions of "User talk:Bossa nesta"
Bossa nesta (talk | contribs) (Removing all content from page) |
Bossa nesta (talk | contribs) |
||
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 22:15, 12 October 2008
Mid-term Note - SPR720
Contents
================== 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