Linux Commands: Difference between revisions
(→patch) |
(→find) |
||
Line 29: | Line 29: | ||
== find == |
== find == |
||
See [http://www.kalamazoolinux.org/tech/find.html here] for further examples on how to combine '''find''' and '''xargs'''. |
See [http://www.kalamazoolinux.org/tech/find.html here] for further examples on how to combine '''find''' and '''xargs'''. |
||
'''<font color="red">Frequent pitfall!</font>''' The semi-colon <tt>;</tt> must be escaped in Bash ! |
|||
<source lang="bash"> |
<source lang="bash"> |
||
find . -name "*.jpg" # find files/directories whose name matches specified pattern |
find . -name "*.jpg" # find files/directories whose name matches specified pattern |
Revision as of 12:40, 7 September 2009
dd
Convert and copy a file.
dd returns current copy status when sent an HUP signal. Type in another shell:
while :; sleep 5; do killall -s SIGHUP1 dd; done
This will force dd to update its status every 5sec.
diff
Use diff to compare 2 files together and/or to generate patch files
$ cp project_dir project_dir-patched
$ cd project_dir-patched
$ vi somefile # We start modifying the copy
$ vi someotherfile
$ cd ..
$ diff -u project_dir project_dir-patched >project.patch # We generate the patch file (universal format)
Patch can be applied with the command patch (see below). Be careful regarding file names / directory structures when generating patch files! Sometimes you'll need to edit the generate patch files to fix the directory structure.
dpkg
Package manager for Debian / Ubuntu. See Package Management#Ubuntu / Debian
echo
echo -e "Some text\n...on 2 lines..." # Enable interpretation of backslash escapes (must be quoted!)
find
See here for further examples on how to combine find and xargs.
Frequent pitfall! The semi-colon ; must be escaped in Bash !
find . -name "*.jpg" # find files/directories whose name matches specified pattern
find . -path "*/cur/*" # find files/directories whose path spec matches specified pattern
find . -type d -name "cur" # find only directories whose name matches specified pattern
find . -exec echo '{}' \; # semi-colon must be escaped!
find . -exec echo one '{}' \; -exec echo two '{}' \; # to execute several commands on one match
find . -name \*.jpg | xargs echo # much faster version using xargs
find . -name \*.jpg | xargs -n 2 echo # limit #args passed to echo to 2 max.
find . -name \*.jpg -print0 | xargs -0 ls # Use NULL separator if files contains space or special char !!!
grep
grep -Rsl PATTERN [FILE] # Recursive, no error output, only list filename
grep BASIC-REG-EXP-PATTERN [FILE] # Use classic regexp (like "dma\|DMA")
egrep EXT-REG-EXP-PATTERN [FILE] # Same as grep -E. Use extended regexp (like "dma|DMA")
fgrep FIXED-STRINGS-REG-EXP [FILE] # Same as grep -F. Pattern is a list of strings to match.
grep -n PATTERN [FILE] # Print matched line numbers.
grep -- "-s" [FILE] # Search for text "-s"
grep -e "-s" [FILE] # Search for text "-s" - alternative solution
grep -R -include=*.in PATTERN * # Search recursively through folders, limiting to files matching pattern "*.in"
grep -R PATTERN *.in # Idem, but matching pattern "*.in" also applies to folders.
grep -o PATTERN [FILE] # (--only-matching) Print only the matched (non-empty) parts of a matching line.
multitee
multitee sends multiple inputs to multiple outputs.
Check this page.
Original is here, or can also be found here on Debian.
Here a patch to build it on Cygwin. The patch ports calls to BSD signal.h API (struct sigvec, sigvec(), sigmask(), sigblock()...) to the POSIX API (struct sigaction, sigaction(), sigprocmask(), sigfillset()...):
$ patch -Np1 <../multitee-3.0-cygwin.patch
$ make
$ cp multitee.1 /usr/local/man/man1
$ cp multitee.exe /usr/local/bin
Example of use:
$ multitee 0-1,4,5 4> foo 5> bar # same as tee foo bar with better blocking behavior
$ multitee 0:1 3:1 4:1,2 6:7 # various merge and copy
$ tcpclient server smtp multitee 0:7 6:1e0 # e0 tell multitee to quit as soon connection close
$ multitee 0:3 3:1 # same as 'socat - FD:3'
netcat
TCP-IP swiss army knife (equivalent of the telnet program. Check wikipedia:netcat. Also known as command nc).
netstat
Print network connections, routing tables, interface statistics, masqurade connections, and multicast memberships
netstat -utpn #Active ports, tcp, socket program PID, numeric
netstat -lutpn #Listen ports, tcp, socket program PID, numeric
netstat -autpn #All (active and listen), tcp, socket program PID, numeric
netstat -rn #Kernel route table, numeric
When listing sockets (default output), you'll get an output like:
% netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:time *:* LISTEN tcp 0 0 localhost:mysql *:* LISTEN tcp 0 0 andLinux.local:43449 windows-host:x11 ESTABLISHED |
% netstat -atn Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:37 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN tcp 0 0 192.168.11.150:43449 192.168.11.1:6000 ESTABLISHED |
- Local Address
- * or 0.0.0.0 means that the process accepts connection from any interface.
- 127.0.0.1 means it only accepts connection on localhost loopback (and so only connection that originates from local PC as well).
- Any other IP address means that the process listen on the given port at the given IP address
patch
Use patch to apply a patch previously generated with the command diff. patch use is pretty much straightforward, one mainly has to pay attention to directory structure / blanks.
Starting from the end of our example in diff above:
$ cd project_dir # We cd into project directory to patch
$ patch -lNp1<../project.patch # We apply the patch in place
- The option l is to ignore white spaces (very handy when copying patch from internet page for instance).
- The option p1 tells patch to ignore the first (i.e. one level of) directory in the file name given in the patch header.
The value to use for option p depends actually on the patch header:
- First example - same root directory for both to and from file
--- outguess-0.2/jpg.c 2001-02-13 01:29:07.000000000 +0100
+++ outguess-0.2/jpg.c 2009-08-25 16:06:05.242378300 +0200
- second example - different root directory between to and from file
--- outguess-0.2/jpg.c 2001-02-13 01:29:07.000000000 +0100
+++ outguess-0.2-patched/jpg.c 2009-08-25 16:06:05.242378300 +0200
$ patch -lNp0 <project.patch # For first example header above
$ cd project_dir; patch -lNp1 <../project.patch # For second example header above
recode
recode /cl../cr <dos.txt >mac.txt
recode /cr.. <mac.txt >unix.txt
recode ../cl <unix.txt >dos.txt
recode charset1/surface1..charset2/surface2 <input.txt >output.txt
recode /QP.. <qp.txt >normal.txt # To convert quoted-printable text
charset | surface | ||
---|---|---|---|
us | ASCII (7 bits) | /cr | Carriage return as end of line (Mac text) |
l1 | ISO Latin-1 (ISO-8859-1, Western Europe, 8 bits) | /cl | Carriage return line feed as end of line (DOS text) |
EUCJP | EUC-JP for Japanese (Unix) | / | Line feed as end of line (Unix text) |
SJIS | Shift-JIS for Japanese (Microsoft) | /d1 | Human readable bytewise decimal dump |
ISO2022JP | Mail encoding for Japanese (7 bits) | /x1 | Human readable bytewise hexidecimal dump |
u2 | UCS-2 (Universal Character Set, 2 bytes) | /64 | Base64 encoded text |
u8 | UTF-8 (Universal Transformation Format, 8 bits) | /QP | Quoted-Printable encoded text |
rpm
sed
Moved to page dedicated to Sed.
socat
Command-line utility that establishes two bidirectional byte streams and transfers data between them ([1]). socat is the more powerful version of netcat. Check the homepage.
socat -ly 'TCP4-LISTEN:143,reuseaddr,fork' PROXY:ton.imap.server:143|TCP:134.27.168.36:8080
ProxyCommand socat - 'PROXY:%h:%p,proxyauth=user:pass|SSL,verify=0|PROXY:my.server:443,proxyauth=user:pass|TCP:big.brother.proxy:8080' # Using v2.0.0 beta
socat can be easily used as a replacement of telnet:
socat tcp:<host>:<port> - # <port> can be a port number or service name (telnet,imap...)
Some useful command-line options:
socat -ly # Writes messages to syslog instead of stderr; severity as defined with option -d
socat -v # Writes the transferred data to their target stream but also to stderr (text mode)
XSel / XSelection
XSel is a command-line program for getting and setting the contents of the X selection and context-menu clipboard. Normally the former is only accessible by manually highlighting information and pasting it with the middle mouse button, and the latter is only accessible by using context-menu cut/copy/paste command.
xselection is an equivalent package on OpenSUSE.
On Cygwin, one has to use getclip, putclip or device /dev/clipboard.
xsel -p # To get content of PRIMARY buffer (X selection)
xselection PRIMARY # (equivalent command for xselection)
xsel -b # To get content of CLIPBOARD (context-menu clipboard)
xselection CLIPBOARD # (equivalent command for xselection)
echo sometext | xsel -p # To set PRIMARY buffer
echo sometext | xselection PRIMARY - # (equivalent command for xselection)
xselection PRIMARY sometext # (equivalent command for xselection)
echo sometext | xsel -b # To set CLIPBOARD buffer
echo sometext | xselection CLIPBOARD - # (equivalent command for xselection)
xselection CLIPBOARD sometext # (equivalent command for xselection)
Miscellaneous
- htop
- an improved top command
- iconv
- locale encoding conversions
- konwert
- fancy encoding conversions
- mimencode
- binary file conversion for the mail.;mkfifo
- make FIFOs (named pipes)
- pv, pipeview, pipebench
- monitor the progress of data through a pipe
- reformime
- MIME E-mail reformatting tool
- stat
- display file or file system status
- strace
- trace system calls and signals
- tee
- read from standard input and write to standard output and files
- tree
- List the contents of directories in a tree-like format.
- uuencode, uudecode
- binary file conversion for Unix.
- watch
- Execute a program periodically, showing output full screen
- wc
- Counts lines, words and character in a file
- xclip
- xclip is a command line interface to the X11 clipboard. It can also be used for copying files, as an alternative to sftp/scp, thus avoiding password prompts when X11 forwarding has already been setup. Check this guide.
- xxd
- Make a hexdump or do the reverse
$ echo 202122 | xxd -r -ps - # To decode a hexdump string
$ echo ' !"' | xxd -u -ps - # to code as a hexdump string (uppercase)