Wednesday, March 19, 2008
What is Effective Communication??
Jack and Max are walking from religious service. Jack wonders whether it would
be all right to smoke while praying.
Max replies, "Why don't you ask the Priest?"
So Jack goes up to the Priest and asks, "Priest,may I smoke while I pray?"
But the Priest says,
"No, my son, you may not. That's utter disrespect to our religion."
Jack goes back to his friend and tells him what the good Priest told him.
Max says, "I'm not surprised. You asked the wrong question. Let me try."
And so Max goes up to the Priest and asks, "Priest, may I pray while I smoke?"
To which the Priest eagerly replies, "By all means, my son. By all means."
Moral : The reply you get depends on the question you ask.
For Example : Can I work on this project while I'm on vacation ?!?
Linux CLI commands
| Command | Description | |
| • | apropos whatis | Show commands pertinent to string. See also threadsafe |
| • | man -t man | ps2pdf - > man.pdf | make a pdf of a manual page |
| which command | Show full path name of command | |
| time command | See how long a command takes | |
| • | time cat | Start stopwatch. Ctrl-d to stop. See also sw |
| • | nice info | Run a low priority command (The "info" reader in this case) |
| • | renice 19 -p $$ | Make shell (script) low priority. Use for non interactive tasks |
| dir navigation | ||
| • | cd - | Go to previous directory |
| • | cd | Go to $HOME directory |
| (cd dir && command) | Go to dir, execute command and return to current dir | |
| • | pushd . | Put current dir on stack so you can popd back to it |
| file searching | ||
| • | alias l='ls -l --color=auto' | quick dir listing |
| • | ls -lrt | List files by date. See also newest and find_mm_yyyy |
| • | ls /usr/bin | pr -T9 -W$COLUMNS | Print in 9 columns to width of terminal |
| find -name '*.[ch]' | xargs grep -E 'expr' | Search 'expr' in this dir and below. See also findrepo | |
| find -type f -print0 | xargs -r0 grep -F 'example' | Search all regular files for 'example' in this dir and below | |
| find -maxdepth 1 -type f | xargs grep -F 'example' | Search all regular files for 'example' in this dir | |
| find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2; done | Process each item with multiple commands (in while loop) | |
| • | find -type f ! -perm -444 | Find files not readable by all (useful for web site) |
| • | find -type d ! -perm -111 | Find dirs not accessible by all (useful for web site) |
| • | locate -r 'file[^/]*\.txt' | Search cached index for names. This re is like glob *file*.txt |
| • | look reference | Quickly search (sorted) dictionary for prefix |
| • | grep --color reference /usr/share/dict/words | Highlight occurances of regular expression in dictionary |
| archives and compression | ||
| gpg -c file | Encrypt file | |
| gpg file.gpg | Decrypt file | |
| tar -c dir/ | bzip2 > dir.tar.bz2 | Make compressed archive of dir/ | |
| bzip2 -dc dir.tar.bz2 | tar -x | Extract archive (use gzip instead of bzip2 for tar.gz files) | |
| tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg' | Make encrypted archive of dir/ on remote machine | |
| find dir/ -name '*.txt' | tar -c --files-from=- | bzip2 > dir_txt.tar.bz2 | Make archive of subset of dir/ and below | |
| find dir/ -name '*.txt' | xargs cp -a --target-directory=dir_txt/ --parents | Make copy of subset of dir/ and below | |
| ( tar -c /dir/to/copy ) | ( cd /where/to/ && tar -x -p ) | Copy (with permissions) copy/ dir to /where/to/ dir | |
| ( cd /dir/to/copy && tar -c . ) | ( cd /where/to/ && tar -x -p ) | Copy (with permissions) contents of copy/ dir to /where/to/ | |
| ( tar -c /dir/to/copy ) | ssh -C user@remote 'cd /where/to/ && tar -x -p' | Copy (with permissions) copy/ dir to remote:/where/to/ dir | |
| dd bs=1M if=/dev/sda | gzip | ssh user@remote 'dd of=sda.gz' | Backup harddisk to remote machine | |
| rsync (Use the --dry-run option for testing) | ||
| rsync -P rsync://rsync.server.com/path/to/file file | Only get diffs. Do multiple times for troublesome downloads | |
| rsync --bwlimit=1000 fromfile tofile | Locally copy with rate limit. It's like nice for I/O | |
| rsync -az -e ssh --delete ~/public_html/ remote.com:'~/public_html' | Mirror web site (using compression and encryption) | |
| rsync -auz -e ssh remote:/dir/ . && rsync -auz -e ssh . remote:/dir/ | Synchronize current directory with remote one | |
| ssh (Secure SHell) | ||
| ssh $USER@$HOST command | Run command on $HOST as $USER (default command=shell) | |
| • | ssh -f -Y $USER@$HOSTNAME xeyes | Run GUI command on $HOSTNAME as $USER |
| scp -p -r $USER@$HOST: file dir/ | Copy with permissions to $USER's home directory on $HOST | |
| ssh -g -L 8080:localhost:80 root@$HOST | Forward connections to $HOSTNAME:8080 out to $HOST:80 | |
| ssh -R 1434:imap:143 root@$HOST | Forward connections from $HOST:1434 in to imap:143 | |
| wget (multi purpose download tool) | ||
| • | (cd cli && wget -nd -pHEKk http://www.pixelbeat.org/cmdline.html) | Store local browsable version of a page to the current dir |
| wget -c http://www.example.com/large.file | Continue downloading a partially downloaded file | |
| wget -r -nd -np -l1 -A '*.jpg' http://www.example.com/dir/ | Download a set of files to the current directory | |
| wget ftp://remote/file[1-9].iso/ | FTP supports globbing directly | |
| • | wget -q -O- http://www.pixelbeat.org/timeline.html | grep 'a href' | head | Process output directly |
| echo 'wget url' | at 01:00 | Download url at 1AM to current dir | |
| wget --limit-rate=20k url | Do a low priority download (limit to 20KB/s in this case) | |
| wget -nv --spider --force-html -i bookmarks.html | Check links in a file | |
| wget --mirror http://www.example.com/ | Efficiently update a local copy of a site (handy from cron) | |
| networking (Note ifconfig, route, mii-tool, nslookup commands are obsolete) | ||
| ethtool eth0 | Show status of ethernet interface eth0 | |
| ethtool --change eth0 autoneg off speed 100 duplex full | Manually set ethernet interface speed | |
| iwconfig eth1 | Show status of wireless interface eth1 | |
| iwconfig eth1 rate 1Mb/s fixed | Manually set wireless interface speed | |
| • | iwlist scan | List wireless networks in range |
| • | ip link show | List network interfaces |
| ip link set dev eth0 name wan | Rename interface eth0 to wan | |
| ip link set dev eth0 up | Bring interface eth0 up (or down) | |
| • | ip addr show | List addresses for interfaces |
| ip addr add 1.2.3.4/24 brd + dev eth0 | Add (or del) ip and mask (255.255.255.0) | |
| • | ip route show | List routing table |
| ip route add default via 1.2.3.254 | Set default gateway to 1.2.3.254 | |
| • | tc qdisc add dev lo root handle 1:0 netem delay 20msec | Add 20ms latency to loopback device (for testing) |
| • | tc qdisc del dev lo root | Remove latency added above |
| • | host pixelbeat.org | Lookup DNS ip address for name or vice versa |
| • | hostname -i | Lookup local ip address (equivalent to host `hostname`) |
| • | whois pixelbeat.org | Lookup whois info for hostname or ip address |
| • | netstat -tupl | List internet services on a system |
| • | netstat -tup | List active connections to/from system |
| windows networking (Note samba is the package that provides all this windows specific networking support) | ||
| • | smbtree | Find windows machines. See also findsmb |
| nmblookup -A 1.2.3.4 | Find the windows (netbios) name associated with ip address | |
| smbclient -L windows_box | List shares on windows machine or samba server | |
| mount -t smbfs -o fmask=666,guest //windows_box/share /mnt/share | Mount a windows share | |
| echo 'message' | smbclient -M windows_box | Send popup to windows machine (off by default in XP sp2) | |
| text manipulation (Note sed uses stdin and stdout, so if you want to edit files, append | ||
| sed 's/string1/string2/g' | Replace string1 with string2 | |
| sed 's/\(.*\)1/\12/g' | Modify anystring1 to anystring2 | |
| sed '/ *#/d; /^ *$/d' | Remove comments and blank lines | |
| sed ':a; /\\$/N; s/\\\n//; ta' | Concatenate lines with trailing \ | |
| sed 's/[ \t]*$//' | Remove trailing spaces from lines | |
| sed 's/\([\\`\\"$\\\\]\)/\\\1/g' | Escape shell metacharacters active within double quotes | |
| • | seq 10 | sed "s/^/ /; s/ *\(.\{7,\}\)/\1/" | Right align numbers |
| sed -n '1000p;1000q' | Print 1000th line | |
| sed -n '10,20p;20q' | Print lines 10 to 20 | |
| sed -n 's/.* | Extract title from HTML web page | |
| sort -t. -k1,1n -k2,2n -k3,3n -k4,4n | Sort IPV4 ip addresses | |
| • | echo 'Test' | tr '[:lower:]' '[:upper:]' | Case conversion |
| • | tr -dc '[:print:]' < /dev/urandom | Filter non printable characters |
| • | history | wc -l | Count lines |
| set operations (Note you can export LANG=C for speed. Also these assume no duplicate lines within a file) | ||
| sort file1 file2 | uniq | Union of unsorted files | |
| sort file1 file2 | uniq -d | Intersection of unsorted files | |
| sort file1 file1 file2 | uniq -u | Difference of unsorted files | |
| sort file1 file2 | uniq -u | Symmetric Difference of unsorted files | |
| join -a1 -a2 file1 file2 | Union of sorted files | |
| join file1 file2 | Intersection of sorted files | |
| join -v2 file1 file2 | Difference of sorted files | |
| join -v1 -v2 file1 file2 | Symmetric Difference of sorted files | |
| math | ||
| • | echo '(1 + sqrt(5))/2' | bc -l | Quick math (Calculate φ). See also bc |
| • | echo 'pad=20; min=64; (100*10^6)/((pad+min)*8)' | bc | More complex (int) e.g. This shows max FastE packet rate |
| • | echo 'pad=20; min=64; print (100E6)/((pad+min)*8)' | python | Python handles scientific notation |
| • | echo 'pad=20; plot [64:1518] (100*10**6)/((pad+x)*8)' | gnuplot -persist | Plot FastE packet rate vs packet size |
| • | echo 'obase=16; ibase=10; 64206' | bc | Base conversion (decimal to hexadecimal) |
| • | echo $((0x2dec)) | Base conversion (hex to dec) ((shell arithmetic expansion)) |
| • | units -t '100m/9.74s' 'miles/hour' | Unit conversion (metric to imperial) |
| • | units -t '500GB' 'GiB' | Unit conversion (SI to IEC prefixes) |
| • | units -t '1 googol' | Definition lookup |
| • | seq 100 | (tr '\n' +; echo 0) | bc | Add a column of numbers. See also add and funcpy |
| calendar | ||
| • | cal -3 | Display a calendar |
| • | cal 9 1752 | Display a calendar for a particular month year |
| • | date -d fri | What date is it this friday. See also day |
| • | date --date='25 Dec' +%A | What day does xmas fall on, this year |
| • | date --date '1970-01-01 UTC 2147483647 seconds' | Convert number of seconds since the epoch to a date |
| • | TZ=':America/Los_Angeles' date | What time is it on West coast of US (use tzselect to find TZ) |
| echo "mail -s 'get the train' P@draigBrady.com < /dev/null" | at 17:45 | Email reminder | |
| • | echo "DISPLAY=$DISPLAY xmessage cooker" | at "NOW + 30 minutes" | Popup reminder |
| locales | ||
| • | printf "%'d\n" 1234 | Print number with thousands grouping appropriate to locale |
| • | BLOCK_SIZE=\'1 ls -l | get ls to do thousands grouping appropriate to locale |
| • | echo "I live in `locale territory`" | Extract info from locale database |
| • | LANG=en_IE.utf8 locale int_prefix | Lookup locale info for specific country. See also ccodes |
| • | locale | cut -d= -f1 | xargs locale -kc | less | List fields available in locale database |
| recode (Obsoletes iconv, dos2unix, unix2dos) | ||
| • | recode -l | less | Show available conversions (aliases on each line) |
| recode windows-1252.. file_to_change.txt | Windows "ansi" to local charset (auto does CRLF conversion) | |
| recode utf-8/CRLF.. file_to_change.txt | Windows utf8 to local charset | |
| recode iso-8859-15..utf8 file_to_change.txt | Latin9 (western europe) to utf8 | |
| recode ../b64 <> file.b64 | Base64 encode | |
| recode /qp.. <> file.qp | Quoted printable decode | |
| recode ..HTML <> file.html | Text to HTML | |
| • | recode -lf windows-1252 | grep euro | Lookup table of characters |
| • | echo -n 0x80 | recode latin-9/x1..dump | Show what a code represents in latin-9 charmap |
| • | echo -n 0x20AC | recode ucs-2/x2..latin-9/x | Show latin-9 encoding |
| • | echo -n 0x20AC | recode ucs-2/x2..utf-8/x | Show utf-8 encoding |
| CDs | ||
| gzip < /dev/cdrom > cdrom.iso.gz | Save copy of data cdrom | |
| mkisofs -V LABEL -r dir | gzip > cdrom.iso.gz | Create cdrom image from contents of dir | |
| mount -o loop cdrom.iso /mnt/dir | Mount the cdrom image at /mnt/dir (read only) | |
| cdrecord -v dev=/dev/cdrom blank=fast | Clear a CDRW | |
| gzip -dc cdrom.iso.gz | cdrecord -v dev=/dev/cdrom - | Burn cdrom image (use dev=ATAPI -scanbus to confirm dev) | |
| cdparanoia -B | Rip audio tracks from CD to wav files in current dir | |
| cdrecord -v dev=/dev/cdrom -audio *.wav | Make audio CD from all wavs in current dir (see also cdrdao) | |
| oggenc --tracknum='track' track.cdda.wav -o 'track.ogg' | Make ogg file from wav file | |
| disk space (See also FSlint) | ||
| • | ls -lSr | Show files by size, biggest last |
| • | du -s * | sort -k1,1rn | head | Show top disk users in current dir. See also dutop |
| • | df -h | Show free space on mounted filesystems |
| • | df -i | Show free inodes on mounted filesystems |
| • | fdisk -l | Show disks partitions sizes and types (run as root) |
| • | rpm -q -a --qf '%10{SIZE}\t%{NAME}\n' | sort -k1,1n | List all packages by installed size (Bytes) on rpm distros |
| • | dpkg-query -W -f='${Installed-Size;10}\t${Package}\n' | sort -k1,1n | List all packages by installed size (KBytes) on deb distros |
| • | dd bs=1 seek=2TB if=/dev/null of=ext3.test | Create a large test file (taking no space). See also truncate |
| monitoring/debugging | ||
| • | tail -f /var/log/messages | Monitor messages in a log file |
| • | strace -c ls >/dev/null | Summarise/profile system calls made by command |
| • | strace -f -e open ls >/dev/null | List system calls made by command |
| • | ltrace -f -e getenv ls >/dev/null | List library calls made by command |
| • | lsof -p $$ | List paths that process id has open |
| • | lsof ~ | List processes that have specified path open |
| • | tcpdump not port 22 | Show network traffic except ssh. See also tcpdump_not_me |
| • | ps -e -o pid,args --forest | List processes in a hierarchy |
| • | ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d' | List processes by % cpu usage |
| • | ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS | List processes by mem usage. See also ps_mem.py |
| • | ps -C firefox-bin -L -o pid,tid,pcpu,state | List all threads for a particular process |
| • | ps -p 1,2 | List info for particular process IDs |
| • | last reboot | Show system reboot history |
| • | free -m | Show amount of (remaining) RAM (-m displays in MB) |
| • | watch -n1 'cat /proc/interrupts' | Watch changeable data continuously |
| system information (see also sysinfo) ('#' means root access is required) | ||
| • | uname -a | Show kernel version and system architecture |
| • | head -n1 /etc/issue | Show name and version of distribution |
| • | cat /proc/partitions | Show all partitions registered on the system |
| • | grep MemTotal /proc/meminfo | Show RAM total seen by the system |
| • | grep "model name" /proc/cpuinfo | Show CPU(s) info |
| • | lspci -tv | Show PCI info |
| • | lsusb -tv | Show USB info |
| • | mount | column -t | List mounted filesystems on the system (and align output) |
| # | dmidecode -q | less | Display SMBIOS/DMI information |
| # | smartctl -A /dev/sda | grep Power_On_Hours | How long has this disk (system) been powered on in total |
| # | hdparm -i /dev/sda | Show info about disk sda |
| # | hdparm -tT /dev/sda | Do a read speed test on disk sda |
| # | badblocks -s /dev/sda | Test for unreadable blocks on disk sda |
| interactive (see also linux keyboard shortcuts) | ||
| • | readline | Line editor used by bash, python, bc, gnuplot, ... |
| • | screen | Virtual terminals with detach capability, ... |
| • | mc | Powerful file manager that can browse rpm, tar, ftp, ssh, ... |
| • | gnuplot | Interactive/scriptable graphing |
| • | links | Web browser |
| miscellaneous | ||
| • | alias hd='od -Ax -tx1z -v' | Handy hexdump. (usage e.g.: • hd /proc/self/cmdline | less) |
| • | alias realpath='readlink -f' | Canonicalize path. (usage e.g.: • realpath ~/../$USER) |
| • | set | grep $USER | Search current environment |
| touch -c -t 0304050607 file | Set file timestamp (YYMMDDhhmm) | |
waitpid()
waitpid - wait for process termination
Headers:
#include
#include
DESCRIPTION
The waitpid function suspends execution of the current
process until a child as specified by the pid argument has
exited, or until a signal is delivered whose action is to
terminate the current process or to call a signal handling
function. If a child as requested by pid has already
exited by the time of the call (a so-called "zombie" pro-
cess), the function returns immediately. Any system
resources used by the child are freed.
The value of pid can be one of:
< -1 which means to wait for any child process whose
process group ID is equal to the absolute value of
-1 which means to wait for any child process; this is
the same behaviour which wait exhibits.
0 which means to wait for any child process whose
process group ID is equal to that of the calling
process.
> 0 which means to wait for the child whose process ID
is equal to the value of pid.
The value of options is an exclusive OR of zero or more of
the following constants:
WNOHANG which means to return immediately if no child has
exited.
WUNTRACED
which means to also return for children which are
If status is not NULL, wait or waitpid store status infor-
mation in the location pointed to by statloc.
This status can be evaluated with the following macros
(these macros take the stat buffer as an argument -- not a
pointer to the buffer!):
WIFEXITED(status)
is non -zero if the child exited normally.
WEXITSTATUS(status)
evaluates to the least significant eight bits of
the return code of the child which terminated,
which may have been set as the argument to a call
to exit() or as the argument for a return state-
ment in the main program. This macro can only be
evaluated if WIFEXITED returned non-zero.
WIFSIGNALED(status)
returns true if the child process exited because
of a signal which was not caught.
WTERMSIG(status)
returns the number of the signal that caused the
child process to terminate. This macro can only be
evaluated if WIFSIGNALED returned non-zero.
WIFSTOPPED(status)
returns true if the child process which caused the
return is currently stopped; this is only possible
if the call was done using WUNTRACED.
WSTOPSIG(status)
returns the number of the signal which caused the
child to stop. This macro can only be evaluated
if WIFSTOPPED returned non-zero.
stopped, and whose status has not been reported.
signal management 1 in linux/+
#include <signal.h>
int sighold(int sig);
int sigignore(int sig);
int sigpause(int sig);
int sigrelse(int sig);
void (*sigset(int sig, void (*disp)(int)))(int);
Description :
The sighold(), sigignore(), sigpause(), sigrelse(), and sigset() functions provide simplified signal management.
The sigset() function shall modify signal dispositions. The sig argument specifies the signal, which may be any signal except SIGKILL and SIGSTOP. The disp argument specifies the signal's disposition, which may be SIG_DFL, SIG_IGN, or the address of a signal handler. If sigset() is used, and disp is the address of a signal handler, the system shall add sig to the calling process' signal mask before executing the signal handler; when the signal handler returns, the system shall restore the calling process' signal mask to its state prior to the delivery of the signal. In addition, if sigset() is used, and disp is equal to SIG_HOLD, sig shall be added to the calling process' signal mask and sig's disposition shall remain unchanged. If sigset() is used, and disp is not equal to SIG_HOLD, sig shall be removed from the calling process' signal mask.
The sighold() function shall add sig to the calling process' signal mask.
The sigrelse() function shall remove sig from the calling process' signal mask.
The sigignore() function shall set the disposition of sig to SIG_IGN.
The sigpause() function shall remove sig from the calling process' signal mask and suspend the calling process until a signal is received. The sigpause() function shall restore the process' signal mask to its original state before returning.
If the action for the SIGCHLD signal is set to SIG_IGN, child processes of the calling processes shall not be transformed into zombie processes when they terminate. If the calling process subsequently waits for its children, and the process has no unwaited-for children that were transformed into zombie processes, it shall block until all of its children terminate, and wait(), waitid(), and waitpid() shall fail and set errno to [ECHILD].
RETURN VALUE
pon successful completion, sigset() shall return SIG_HOLD if the signal had been blocked and the signal's previous disposition if it had not been blocked. Otherwise, SIG_ERR shall be returned and errno set to indicate the error.The sigpause() function shall suspend execution of the thread until a signal is received, whereupon it shall return -1 and set errno to [EINTR].
For all other functions, upon successful completion, 0 shall be returned. Otherwise, -1 shall be returned and errno set to indicate the error.
FAILING CONDITIONS :
These functions shall fail if:
- The sig argument is an illegal signal number.
- An attempt is made to catch a signal that cannot be caught, or to ignore a signal that cannot be ignored.
Xtem Syntax
Terminal emulator for X-windows Terminal
xterm [-toolkitoption ...] [-option]
| -help | This causes xterm to print out a verbose message describing its options. |
| -132 | Normally, the VT102 DECCOLM escape sequence that switches between 80 and 132 column mode is ignored. This option causes the DECCOLM escape sequence to be recognized, and the xterm window will resize appropriately. |
| -ah | This option indicates that xterm should always highlight the text cursor. By default, xterm will display a hollow text cursor whenever the focus is lost or the pointer leaves the window. |
| +ah | This option indicates that xterm should do text cursor highlighting based on focus. |
| -b number | This option specifies the size of the inner border (the distance between the outer edge of the characters and the window border) in pixels. The default is 2. |
| -cb | Set the vt100 resource cutToBeginningOfLine to FALSE. |
| +cb | Set the vt100 resource cutToBeginningOfLine to TRUE. |
| -cc | This sets classes indicated by the given ranges for using in selecting by words. See the section specifying character classes. |
| -cn | This option indicates that newlines should not be cut in line-mode selections. |
| +cn | This option indicates that newlines should be cut in line-mode selections. |
| -cr color | This option specifies the color to use for text cursor. The default is to use the same foreground color that is used for text. |
| -cu | This option indicates that xterm should work around a bug in the more program that causes it to incorrectly display lines that are exactly the width of the window and are followed by a line beginning with a tab (the leading tabs are not displayed). This option is so named because it was originally thought to be a bug in the curses(3x) cursor motion package. |
| +cu | This option indicates that xterm should not work around the more(3x) bug mentioned above. |
| -e program [arguments] | This option specifies the program (and its command line arguments) to be run in the xterm window. It also sets the window title and icon name to be the basename of the program being executed if neither -T nor -n are given on the command line. This must be the last option on the command line. |
| -fb font | This option specifies a font to be used when displaying bold text. This font must be the same height and width as the normal font. If only one of the normal or bold fonts is specified, it will be used as the normal font and the bold font will be produced by overstriking this font. The default is to do overstriking of the normal font. |
| -im | Turn on the useInsertMode resource. |
| +im | Turn off the useInsertMode resource. |
| -j | This option indicates that xterm should do jump scrolling. Normally, text is scrolled one line at a time; this option allows xterm to move multiple lines at a time so that it doesn't fall as far behind. Its use is strongly recommended since it make xterm much faster when scanning through large amounts of text. The VT100 escape sequences for enabling and disabling smooth scroll as well as the ``VT Options'' menu can be used to turn this feature on or off. |
| +j | This option indicates that xterm should not do jump scrolling. |
| -ls | This option indicates that the shell that is started in the xterm window will be a login shell (i.e., the first character of argv[0] will be a dash, indicating to the shell that it should read the user's .login or .profile). |
| +ls | This option indicates that the shell that is started should not be a login shell (i.e. it will be a normal ``subshell''). |
| -mb | This option indicates that xterm should ring a margin bell when the user types near the right end of a line. This option can be turned on and off from the ``VT Options'' menu. |
| +mb | This option indicates that margin bell should not be rung. |
| -mc milliseconds | This option specifies the maximum time between multi-click selections. |
| -ms color | This option specifies the color to be used for the pointer cursor. The default is to use the foreground color. |
| -nb number | This option specifies the number of characters from the right end of a line at which the margin bell, if enabled, will ring. The default is 10. |
| -rw | This option indicates that reverse-wraparound should be allowed. This allows the cursor to backup from the leftmost column of one line to the rightmost column of the previous line. This is very useful for editing long shell command lines and is encouraged. This option can be turned on and off from the ``VT Options'' menu. |
| +rw | This option indicates that reverse-wraparound should not be allowed. |
| -aw | This option indicates that auto-wraparound should be allowed. This allows the cursor to automatically wrap to the beginning of the next line when when it is at the rightmost position of a line and text is output. |
| +aw | This option indicates that auto-wraparound should not be allowed. |
| -s | This option indicates that xterm may scroll asynchronously, meaning that the screen does not have to be kept completely up to date while scrolling. This allows xterm to run faster when network latencies are very high and is typically useful when running across a very large Internet or many gateways. |
| +s | This option indicates that xterm should scroll synchronously. |
| -sb | This option indicates that some number of lines that are scrolled off the top of the window should be saved and that a scrollbar should be displayed so that those lines can be viewed. This option may be turned on and off from the ``VT Options'' menu. |
| +sb | This option indicates that a scrollbar should not be displayed. |
| -sf | This option indicates that Sun Function Key escape codes should be generated for function keys. |
| +sf | This option indicates that the standard escape codes should be generated for function keys. |
| -si | This option indicates that output to a window should not automatically reposition the screen to the bottom of the scrolling region. This option can be turned on and off from the ``VT Options'' menu. |
| +si | This option indicates that output to a window should cause it to scroll to the bottom. |
| -sk | This option indicates that pressing a key while using the scrollbar to review previous lines of text should cause the window to be repositioned automatically in the normal position at the bottom of the scroll region. |
| +sk | This option indicates that pressing a key while using the scrollbar should not cause the window to be repositioned. |
| -sl number | This option specifies the number of lines to save that have been scrolled off the top of the screen. The default is 64. |
| -t | This option indicates that xterm should start in Tektronix mode, rather than in VT102 mode. Switching between the two windows is done using the ``Options'' menus. |
| +t | This option indicates that xterm should start in VT102 mode. |
| -tm string | This option specifies a series of terminal setting keywords followed by the characters that should be bound to those functions, similar to the stty program. Allowable keywords include: intr, quit, erase, kill, eof, eol, swtch, start, stop, brk, susp, dsusp, rprnt, flush, weras, and lnext. Cotrol characters may be specified as ^char (e.g. ^c or ^u) and ^? may be used to indicate delete. |
| -tn name | This option specifies the name of the terminal type to be set in the TERM environment variable. This terminal type must exist in the termcap database and should have li# and co# entries. |
| -ut | This option indicates that xterm shouldn't write a record into the the system log file /etc/utmp. |
| +ut | This option indicates that xterm should write a record into the system log file /etc/utmp. |
| -vb | This option indicates that a visual bell is preferred over an audible one. Instead of ringing the terminal bell whenever a Control-G is received, the window will be flashed. |
| +vb | This option indicates that a visual bell should not be used. |
| -wf | This option indicates that xterm should wait for the window to be mapped the first time before starting the subprocess so that the initial terminal size settings and environment variables are correct. It is the application's responsibility to catch subsequent terminal size changes. |
| +wf | This option indicates that xterm show not wait before starting the subprocess. |
| -C | This option indicates that this window should receive console output. This is not supported on all systems. To obtain console output, you must be the owner of the console device, and you must have read and write permission for it. If you are running X under xdm on the console screen you may need to have the session startup and reset programs explicitly change the ownership of the console device in order to get this option to work. |
| Sccn | This option specifies the last two letters of the name of a pseudoterminal to use in slave mode, plus the number of the inherited file descriptor. The option is parsed ``%c%c%d''. This allows xterm to be used as an input and output channel for an existing program and is sometimes used in specialized applications. |
| %geom | This option specifies the preferred size and position of the Tektronix window. It is shorthand for specifying the ``*tekGeometry'' resource. |
| #geom | This option specifies the preferred position of the icon window. It is shorthand for specifying the ``*iconGeometry'' resource. |
| -T string | This option specifies the title for xterm's windows. It is equivalent to -title. |
| -n string | This option specifies the icon name for xterm's windows. It is shorthand for specifying the ``*icon- Name'' resource. Note that this is not the same as the toolkit option -name (see below). The default icon name is the application name. |
| -r | This option indicates that reverse video should be simulated by swapping the foreground and background colors. It is equivalent to -rv. |
| -w number | This option specifies the width in pixels of the border surrounding the window. It is equivalent to -borderwidth or -bw. |
| -bg color | This option specifies the color to use for the background of the window. The default is ``white.'' |
| -bd color | This option specifies the color to use for the border of the window. The default is ``black.'' |
| -bw color | This option specifies the width in pixels of the border surrounding the window. |
| -fg color | This option specifies the color to use for displaying text. The default is ``black.'' |
| -fn color | This option specifies the font to be used for displaying normal text. The default is fixed. |
| -fn font | This option specifies the font to be used for displaying normal text. The default is fixed. |
| -name name | This option specifies the application name under which resources are to be obtained, rather than the default executable file name. Name should not contain ``.'' or ``*'' characters. |
| -title string | This option specifies the window title string, which may be displayed by window managers if the user so chooses. The default title is the command line specified after the -e option, if any, otherwise the application name. |
| -rv | This option indicates that reverse video should be simulated by swapping the foreground and background colors. |
| -geometry geometry | This option specifies the preferred size and position of the VT102 window; see X(1). |
| -display display | This option specifies the X server to contact; see X. |
| -xrm resourcestring | This option specifies a resource string to be used. This is especially useful for setting resources that do not have separate command line options. |
| -iconic | This option indicates that xterm should ask the window manager to start it as an icon rather than as the normal window. |
| -dc | This option disables the escape sequence to change the vt100 foreground and background colors, the text cursor color, the mouse cursor foreground and background colors and the Tektronix emulator foreground and background colors. |
| +dc | This option enables the escape sequence to change the vt100 foreground and background colors, the text cursor color, the mouse cursor foreground and background colors and the Tektronix emulator foreground and background |
xterm - runs the X terminal (if supported).
Monday, March 17, 2008
Find the Free Physical Memory in Linux/+
free -m
in Solaries :
prtconf | awk'/^Memory/{print}'
(or)
prtconf | grep Memory
Wednesday, March 12, 2008
Parsing arguments for your shell script
Suppose you want to have some options on your bash shell script, some flags that you can use to alter its behavior. You could do the parsing directly, using ${#} to tell you how many arguments have been supplied, and testing ${1:0:1} to test the first character of the first argument to see if it is a minus sign. You would need some if/then or case logic to identify which option it is and whether it takes an argument. What if the user doesn't supply a required argument? What if the user calls your script with two options combined (e.g., -ab)? Will you also parse for that? The need to parse options for a shell script is a common situation. Lots of scripts have options. Isn't there a more standard way to do this?
This article is excerpted from the newly published book bash Cookbook.
The solution -- use bash's built-in getopts command to help parse options. Here is an example, based largely on the example in the manpage for getopts
#!/usr/bin/env bash
# cookbook filename: getopts_example
#
# using getopts
#
aflag=
bflag=
while getopts 'ab:' OPTION
do
case $OPTION in
a) aflag=1
;;
b) bflag=1
bval="$OPTARG"
;;
?) printf "Usage: %s: [-a] [-b value] args\n" $(basename $0) >&2
exit 2
;;
esac
done
shift $(($OPTIND - 1))
if [ "$aflag" ]
then
printf "Option -a specified\n"
fi
if [ "$bflag" ]
then
printf 'Option -b "%s" specified\n' "$bval"
fi
printf "Remaining arguments are: %s\n" "$*"
There are two kinds of options supported here. The first and simpler kind is an option that stands alone. It typically represents a flag to modify a command's behavior. An example of this sort of option is the -l option on the ls command. The second kind of option requires an argument. An example of this is the mysql command's -u option, which requires that a username be supplied, as in mysql -u sysadmin. Let's look at how getopts supports the parsing of both kinds.
The use of getopts has two arguments.
getopts 'ab:' OPTION
The first is a list of option letters. The second is the name of a shell variable. In our example, we are defining -a and -b as the only two valid options, so the first argument in getopts has just those two letters -- and a colon. What does the colon signify? It indicates that -b needs an argument, just like -u username or -f filename might be used. The colon needs to be adjacent to any option letter taking an argument. For example, if only -a took an argument we would need to write 'a:b' instead.
The getopts built-in will set the variable named in the second argument to the value that it finds when it parses the shell script's argument list ($1, $2, etc.). If it finds an argument with a leading minus sign, it will treat that as an option argument and put the letter into the given variable ($OPTION in our example). Then it returns true (i.e., 0) so that the while loop will process the option then continue to parse options by repeated calls to getopts until it runs out of arguments (or encounters a double minus -- to allow users to put an explicit end to the options). Then getopts returns false (i.e., non-zero) and the while loop ends.
Inside the loop, when the parsing has found an option letter for processing, we use a case statement on the variable $OPTION to set flags or otherwise take action when the option is encountered. For options that take arguments, that argument is placed in the shell variable $OPTARG (a fixed name not related to our use of $OPTION as our variable). We need to save that value by assigning it to another variable because as the parsing continues to loop, the variable $OPTARG will be reset on each call to getopts.
The third case of our case statement is a question mark, a shell pattern that matches any single character. When getopts finds an option that is not in the set of expected options ('ab:' in our example) then it will return a literal question mark in the variable ($OPTION in our example). So we could have made our case statement read \?) or '?') for an exact match, but the ? as a pattern match of any single character provides a convenient default for our case statement. It will match a literal question mark as well as matching any other single character.
In the usage message that we print, we have made two changes from the example script in the manpage. First, we use $(basename $0) to give the name of the script without all the extra pathnames that may have been part of how it was invoked. Secondly, we redirect this message to standard error (>&2) because that is really where such messages belong. All of the error messages from getopts that occur when an unknown option or missing argument is encountered are always written to standard error. We add our usage message to that chorus.
When the while loop terminates, we see the next line to be executed is:
shift $(($OPTIND - 1))
which is a shift statement used to move the positional parameters of the shell script from $1, $2, etc. down a given number of positions (tossing the lower ones). The variable $OPTIND is an index into the arguments that getopts uses to keep track of where it is when it parses. Once we are done parsing, we can toss all the options that we've processed by doing this shift statement. For example, if we had this command line:
myscript -a -b alt plow harvest reap
then after parsing for options, $OPTIND would be set to 4. By doing a shift of three ($OPTIND-1) we would get rid of the options and then a quick echo$* would give this:
plow harvest reap
So, the remaining (non-option) arguments are ready for use in your script (in a for loop perhaps). In our example script, the last line is a printf showing all the remaining arguments.
Tuesday, March 04, 2008
How to Select Columns From a File?
Consider a slight variation on the company.data file we've been playing with in this section:
406378:Sales:Itorre:Jan
031762:Marketing:Nasium:Jim
636496:Research:Ancholie:Mel
396082:Sales:Jucacion:Ed
If you want to print just columns 1 to 6 of each line (the employee serial numbers), use the -c1-6 flag, as in this command:
cut -c1-6 company.data
406378
031762
636496
396082
If you want to print just columns 4 and 8 of each line (the first letter of the department and the fourth digit of the serial number), use the -c4,8 flag, as in this command:
cut -c4,8 company.data
3S
7M
4R
0S
And since this file obviously has fields delimited by colons, we can pick out just the last names by specifying the -d: and -f3 flags, like this:
cut -d: -f4,3 company.data
Itorre
Nasium
Ancholie
Jucacion
Here is a summary of the most common flags for the cut command:
-c [n | n,m | n-m] Specify a single column, multiple columns (separated by a comma), or range of columns (separated by a dash).
-f [n | n,m | n-m] Specify a single field, multiple fields (separated by a comma), or range of fields (separated by a dash).
-dc Specify the field delimiter.
-s Suppress (don't print) lines not containing the delimiter.
find command
SYNOPSIS
find [path...] [expression]DESCRIPTION
This manual page documents the GNU version of find. find searches the directory tree rooted at each given file name by evaluating the given expression from left to right, according to the rules of precedence (see section OPERATORS), until the outcome is known (the left hand side is false for and operations, true for or), at which point find moves on to the next file name.The first argument that begins with `-', `(', `)', `,', or `!' is taken to be the beginning of the expression; any arguments before it are paths to search, and any arguments after it are the rest of the expression. If no paths are given, the current directory is used. If no expression is given, the expression `-print' is used.
find exits with status 0 if all files are processed successfully, greater than 0 if errors occur.
EXPRESSIONS
The expression is made up of options (which affect overall operation rather than the processing of a specific file, and always return true), tests (which return a true or false value), and actions (which have side effects and return a true or false value), all separated by operators. -and is assumed where the operator is omitted. If the expression contains no actions other than -prune, -print is performed on all files for which the expression is true.OPTIONS
All options always return true. They always take effect, rather than being processed only when their place in the expression is reached. Therefore, for clarity, it is best to place them at the beginning of the expression.- -daystart
- Measure times (for -amin, -atime, -cmin, -ctime, -mmin, and -mtime) from the beginning of today rather than from 24 hours ago.
- -depth
- Process each directory's contents before the directory itself.
- -follow
- Dereference symbolic links. Implies -noleaf.
- -help, --help
- Print a summary of the command-line usage of find and exit.
- -maxdepth levels
- Descend at most levels (a non-negative integer) levels of directories below the command line arguments. `-maxdepth 0' means only apply the tests and actions to the command line arguments.
- -mindepth levels
- Do not apply any tests or actions at levels less than levels (a non-negative integer). `-mindepth 1' means process all files except the command line arguments.
- -mount
- Don't descend directories on other filesystems. An alternate name for -xdev, for compatibility with some other versions of find.
- -noleaf
- Do not optimize by assuming that directories contain 2 fewer subdirectories than their hard link count. This option is needed when searching filesystems that do not follow the Unix directory-link convention, such as CD-ROM or MS-DOS filesystems or AFS volume mount points. Each directory on a normal Unix filesystem has at least 2 hard links: its name and its `.' entry. Additionally, its subdirectories (if any) each have a `..' entry linked to that directory. When find is examining a directory, after it has statted 2 fewer subdirectories than the directory's link count, it knows that the rest of the entries in the directory are non-directories (`leaf' files in the directory tree). If only the files' names need to be examined, there is no need to stat them; this gives a significant increase in search speed.
- -version, --version
- Print the find version number and exit.
- -xdev
- Don't descend directories on other filesystems.
TESTS
Numeric arguments can be specified as- +n
- for greater than n,
- -n
- for less than n,
- n
- for exactly n.
- -amin n
- File was last accessed n minutes ago.
- -anewer file
- File was last accessed more recently than file was modified. -anewer is affected by -follow only if -follow comes before -anewer on the command line.
- -atime n
- File was last accessed n*24 hours ago.
- -cmin n
- File's status was last changed n minutes ago.
- -cnewer file
- File's status was last changed more recently than file was modified. -cnewer is affected by -follow only if -follow comes before -cnewer on the command line.
- -ctime n
- File's status was last changed n*24 hours ago.
- -empty
- File is empty and is either a regular file or a directory.
- -false
- Always false.
- -fstype type
- File is on a filesystem of type type. The valid filesystem types vary among different versions of Unix; an incomplete list of filesystem types that are accepted on some version of Unix or another is: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. You can use -printf with the %F directive to see the types of your filesystems.
- -gid n
- File's numeric group ID is n.
- -group gname
- File belongs to group gname (numeric group ID allowed).
- -ilname pattern
- Like -lname, but the match is case insensitive.
- -iname pattern
- Like -name, but the match is case insensitive. For example, the patterns `fo*' and `F??' match the file names `Foo', `FOO', `foo', `fOo', etc.
- -inum n
- File has inode number n.
- -ipath pattern
- Like -path, but the match is case insensitive.
- -iregex pattern
- Like -regex, but the match is case insensitive.
- -links n
- File has n links.
- -lname pattern
- File is a symbolic link whose contents match shell pattern pattern. The metacharacters do not treat `/' or `.' specially.
- -mmin n
- File's data was last modified n minutes ago.
- -mtime n
- File's data was last modified n*24 hours ago.
- -name pattern
- Base of file name (the path with the leading directories removed) matches shell pattern pattern. The metacharacters (`*', `?', and `[]') do not match a `.' at the start of the base name. To ignore a directory and the files under it, use -prune; see an example in the description of -path.
- -newer file
- File was modified more recently than file. -newer is affected by -follow only if -follow comes before -newer on the command line.
- -nouser
- No user corresponds to file's numeric user ID.
- -nogroup
- No group corresponds to file's numeric group ID.
- -path pattern
- File name matches shell pattern pattern. The metacharacters do not treat `/' or `.' specially; so, for example,
find . -path './sr*sc'
will print an entry for a directory called './src/misc' (if one exists). To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs' and all files and directories under it, and print the names of the other files found, do something like this:
find . -path './src/emacs' -prune -o -print
- -perm mode
- File's permission bits are exactly mode (octal or symbolic). Symbolic modes use mode 0 as a point of departure.
- -perm -mode
- All of the permission bits mode are set for the file.
- -perm +mode
- Any of the permission bits mode are set for the file.
- -regex pattern
- File name matches regular expression pattern. This is a match on the whole path, not a search. For example, to match a file named `./fubar3', you can use the regular expression `.*bar.' or `.*b.*3', but not `b.*r3'.
- -size n[bckw]
- File uses n units of space. The units are 512-byte blocks by default or if `b' follows n, bytes if `c' follows n, kilobytes if `k' follows n, or 2-byte words if `w' follows n. The size does not count indirect blocks, but it does count blocks in sparse files that are not actually allocated.
- -true
- Always true.
- -type c
- File is of type c:
-
- b
- block (buffered) special
- c
- character (unbuffered) special
- d
- directory
- p
- named pipe (FIFO)
- f
- regular file
- l
- symbolic link
- s
- socket
- D
- door (Solaris)
- -uid n
- File's numeric user ID is n.
- -used n
- File was last accessed n days after its status was last changed.
- -user uname
- File is owned by user uname (numeric user ID allowed).
- -xtype c
- The same as -type unless the file is a symbolic link. For symbolic links: if -follow has not been given, true if the file is a link to a file of type c; if -follow has been given, true if c is `l'. In other words, for symbolic links, -xtype checks the type of the file that -type does not check.
ACTIONS
- -exec command ;
- Execute command; true if 0 status is returned. All following arguments to find are taken to be arguments to the command until an argument consisting of `;' is encountered. The string `{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a `\') or quoted to protect them from expansion by the shell. The command is executed in the starting directory.
- -fls file
- True; like -ls but write to file like -fprint.
- -fprint file
- True; print the full file name into file file. If file does not exist when find is run, it is created; if it does exist, it is truncated. The file names ``/dev/stdout'' and ``/dev/stderr'' are handled specially; they refer to the standard output and standard error output, respectively.
- -fprint0 file
- True; like -print0 but write to file like -fprint.
- -fprintf file format
- True; like -printf but write to file like -fprint.
- -ok command ;
- Like -exec but ask the user first (on the standard input); if the response does not start with `y' or `Y', do not run the command, and return false.
- True; print the full file name on the standard output, followed by a newline.
- -print0
- True; print the full file name on the standard output, followed by a null character. This allows file names that contain newlines to be correctly interpreted by programs that process the find output.
- -printf format
- True; print format on the standard output, interpreting `\' escapes and `%' directives. Field widths and precisions can be specified as with the `printf' C function. Unlike -print, -printf does not add a newline at the end of the string. The escapes and directives are:
-
- \a
- Alarm bell.
- \b
- Backspace.
- \c
- Stop printing from this format immediately and flush the output.
- \f
- Form feed.
- \n
- Newline.
- \r
- Carriage return.
- \t
- Horizontal tab.
- \v
- Vertical tab.
- \\
- A literal backslash (`\').
- \NNN
- The character whose ASCII code is NNN (octal).
A `\' character followed by any other character is treated as an ordinary character, so they both are printed.
- %%
- A literal percent sign.
- %a
- File's last access time in the format returned by the C `ctime' function.
- %Ak
- File's last access time in the format specified by k, which is either `@' or a directive for the C `strftime' function. The possible values for k are listed below; some of them might not be available on all systems, due to differences in `strftime' between systems.
-
- @
- seconds since Jan. 1, 1970, 00:00 GMT.
Time fields:
- H
- hour (00..23)
- I
- hour (01..12)
- k
- hour ( 0..23)
- l
- hour ( 1..12)
- M
- minute (00..59)
- p
- locale's AM or PM
- r
- time, 12-hour (hh:mm:ss [AP]M)
- S
- second (00..61)
- T
- time, 24-hour (hh:mm:ss)
- X
- locale's time representation (H:M:S)
- Z
- time zone (e.g., EDT), or nothing if no time zone is determinable
Date fields:
- a
- locale's abbreviated weekday name (Sun..Sat)
- A
- locale's full weekday name, variable length (Sunday..Saturday)
- b
- locale's abbreviated month name (Jan..Dec)
- B
- locale's full month name, variable length (January..December)
- c
- locale's date and time (Sat Nov 04 12:02:33 EST 1989)
- d
- day of month (01..31)
- D
- date (mm/dd/yy)
- h
- same as b
- j
- day of year (001..366)
- m
- month (01..12)
- U
- week number of year with Sunday as first day of week (00..53)
- w
- day of week (0..6)
- W
- week number of year with Monday as first day of week (00..53)
- x
- locale's date representation (mm/dd/yy)
- y
- last two digits of year (00..99)
- Y
- year (1970...)
- %b
- File's size in 512-byte blocks (rounded up).
- %c
- File's last status change time in the format returned by the C `ctime' function.
- %Ck
- File's last status change time in the format specified by k, which is the same as for %A.
- %d
- File's depth in the directory tree; 0 means the file is a command line argument.
- %f
- File's name with any leading directories removed (only the last element).
- %F
- Type of the filesystem the file is on; this value can be used for -fstype.
- %g
- File's group name, or numeric group ID if the group has no name.
- %G
- File's numeric group ID.
- %h
- Leading directories of file's name (all but the last element).
- %H
- Command line argument under which file was found.
- %i
- File's inode number (in decimal).
- %k
- File's size in 1K blocks (rounded up).
- %l
- Object of symbolic link (empty string if file is not a symbolic link).
- %m
- File's permission bits (in octal).
- %n
- Number of hard links to file.
- %p
- File's name.
- %P
- File's name with the name of the command line argument under which it was found removed.
- %s
- File's size in bytes.
- %t
- File's last modification time in the format returned by the C `ctime' function.
- %Tk
- File's last modification time in the format specified by k, which is the same as for %A.
- %u
- File's user name, or numeric user ID if the user has no name.
- %U
- File's numeric user ID.
A `%' character followed by any other character is discarded (but the other character is printed).
- -prune
- If -depth is not given, true; do not descend the current directory.
If -depth is given, false; no effect. - -ls
- True; list current file in `ls -dils' format on standard output. The block counts are of 1K blocks, unless the environment variable POSIXLY_CORRECT is set, in which case 512-byte blocks are used.
OPERATORS
Listed in order of decreasing precedence:- ( expr )
- Force precedence.
- ! expr
- True if expr is false.
- -not expr
- Same as ! expr.
- expr1 expr2
- And (implied); expr2 is not evaluated if expr1 is false.
- expr1 -a expr2
- Same as expr1 expr2.
- expr1 -and expr2
- Same as expr1 expr2.
- expr1 -o expr2
- Or; expr2 is not evaluated if expr1 is true.
- expr1 -or expr2
- Same as expr1 -o expr2.
- expr1 , expr2
- List; both expr1 and expr2 are always evaluated. The value of expr1 is discarded; the value of the list is the value of expr2.
EXAMPLES
find /home -user joeFind every file under the directory /home owned by the user joe.
find /usr -name *statFind every file under the directory /usr ending in ".stat".
find /var/spool -mtime +60Find every file under the directory /var/spool that was modified more than 60 days ago.
find /tmp -name core -type f -print | xargs /bin/rm -fFind files named core in or below the directory /tmp and delete them. Note that this will work incorrectly if there are any filenames containing newlines, single or double quotes, or spaces.
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing single or double quotes, spaces or newlines are correctly handled. The -name test comes before the -type test in order to avoid having to call stat(2) on every file.
find . -type f -exec file '{}' \; Runs `file' on every file in or below the current directory. Notice that the braces are enclosed in single quote marks to protect them from interpretation as shell script punctuation. The semicolon is similarly protected by the use of a backslash, though ';' could have been used in that case also.
find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \Traverse the filesystem just once, listing setuid files and directories into /root/suid.txt and large files into /root/big.txt.
\( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
find $HOME -mtime 0Search for files in your home directory which have been modified in the last twenty-four hours. This command works this way because the time since each file was last modified is divided by 24 hours and any remainder is discarded. That means that to match -mtime
0, a file will have to have a modification in the past which is less than 24 hours ago.
find . -perm 664Search for files which have read and write permission for their owner, and group, but which other users can read but not write to. Files which meet these criteria but have other permissions bits set (for example if someone can execute the file) will not be matched.
find . -perm -664Search for files which have read and write permission for their owner and group, and which other users can read, without regard to the presence of any extra permission bits (for example the executable bit). This will match a file which has mode 0777, for example.
find . -perm /222Search for files which are writable by somebody (their owner, or their group, or anybody else).
find . -perm /220All three of these commands do the same thing, but the first one uses the octal representation of the file mode, and the other two use the symbolic form. These commands all search for files which are writable by either their owner or their group. The files don't have to be writable by both the owner and group to be matched; either will do.
find . -perm /u+w,g+w
find . -perm /u=w,g=w
find . -perm -220Both these commands do the same thing; search for files which are writable by both their owner and their group.
find . -perm -g+w,u+w
find . -perm -444 -perm /222 ! -perm /111These two commands both search for files that are readable for everybody (-perm -444 or -perm -a+r), have at least on write bit set (-perm /222 or -perm /a+w) but are not executable for anybody (! -perm /111 and ! -perm /a+x respectively)
find . -perm -a+r -perm /a+w ! -perm /a+x
Monday, March 03, 2008
Difference Between Static & Global Variable
Had it been gloal variable, it would have been available outside the scope of the function, but static variable is not available outside the scope of a function (helpful in localizing errors - as it can't be changed outside the function scope).
Static and global variable differ a lot in their behaviour to life and scope. First, let me distinguish between life and scope. Life of an object determines whether the object is still in the memory (of the process) whereas scope of the object is whether can I know the variable by its name at this position. It is possible that object is live, but not visible (not in scope) but not that object is not alive but in scope (except for dynamically allocated objects where you refer object through pointers).
Static variables are local in scope to their module in which they are defined, but life is throughout the program. Say for a static variable inside a function cannot be called from outside the function (because it's not in scope) but is alive and exists in memory. The next time this function is entered (within the same program) the same chunk of memory would be accessed now retaining the variables old value and no new memory is allocated this time for this variable like other variables in the function (automatic variables). So basically the variable persists throughout the program. Similarly if a static variable is defined in a global space (say at beginning of file) then this variable will be accessible only in this file (file scope).
On the other hand global variables have to be defined globally, persists (life is) throughout the program, scope is also throughout the program. This means such variables can be accessed from any function, any file of the program.
So if you have a global variable and u r distributing ur files as a library and you want others to not access your global variable, you may make it static by just prefixing keyword static (of course if same variable is not required in other files of yours).