|
|
Line 1: |
Line 1: |
− | Mid-term Note - SPR720
| + | chkconfig --list xinetd |
| + | chkconfig --list cwat |
| + | chkconfig swat on |
| + | chkconfig -ll swat |
| | | |
− | | + | service xinetd start |
− | ======================== File Permission ========================
| + | netstat -ant |
− | <pre>
| + | netstat -antp |
− | $ chmod 7777 rpm.txt ; ll rpm.txt
| + | more /etc/services |
− | -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.
| |
− | </pre>
| |
− | | |
− | ======================== BASH SCRIPTING ========================
| |
− | <pre>$ 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
| |
− | ========================
| |
− | | |
− | </pre>
| |
− | | |
− | ======================== RPM ========================
| |
− | <pre>
| |
− | 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
| |
− | </pre>
| |
− | | |
− | ======================== SYA710 ========================
| |
− | | |
− | <pre>
| |
− | # 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
| |
− | | |
− | </pre>
| |