Finding your way around
pwd | display current directory |
echo $HOME | display your home directory (likely the directory your terminal starts in) |
cd dir | change current directory to dir |
cd .. | change current directory to the parent directory |
cd c: | [cygwin only] move into C: |
cd /cygdrive/c | [cygwin only] move into C: |
cd | change current directory to your home (default) directory |
cd ~ | same as above ('~' refers to home directory) |
cd ~/dir | move into dir directory under your home directory |
ls | list the files and directories in the current directory |
ls . | same as above ('.' refers to current directory) |
ls dir | list the files and directories in dir |
ls file | list the name of file |
ls *.txt | list all files whose name matches '*.txt' |
ls -l | ... and some information on each file |
ls -a | list hidden files (name starts with a ".", as in .bashrc) as well |
ls -F | indicate file attributes (directory with /, executable with *) |
ls / | list the content of your root directory (cygwin: C:/cygwin, OS-X: system disc root) |
clear | clear the terminal screen |
man command | print manual page for the unix command named 'command'. SPACE to forward, q to quit |
Ctrl+c | cancel executing current operation and return to command prompt (press 'c' key while holding down 'Ctrl' key) |
TAB | |
PageUp/PageDown | |
File/directory, input/output handling
touch file | create a file named file in current directory |
mkdir dir | create a directory named dir in current directory |
rm file(s) | delete file(s) |
rm -i file(s) | prompt for confirmation before deleting file(s) |
rmdir dir | remove directory (only works with empty directories) |
rm -r dir | remove recursively ('-r'); remove the directory and all files and directories in it |
cp file1 file2 | copy file1 to file2, in current directory |
cp dir/file . | copy 'file' in 'dir' to current directory ('.'). File name stays the same as 'file'. |
cp file dir | copy 'file' in current directory to the directory 'dir'. File name stays the same as 'file'. |
cp file1 file2 file3 dir | copy the files in current directory into the directory 'dir' |
mv file dir | move 'file' in current directory to another directory named 'dir' |
mv file1 file2 | rename 'file1' as 'file2' (*Warning: if there's a file named 'file2' in the directory already, it will be overwritten!) |
mv dir1/file dir2 | move 'file' in directory 'dir1' to another directory named 'dir2' |
mv dir/file . | move 'file' in 'dir' to current directory ('.') | mv file1 file2 file3 dir | move the files in current directory into the directory 'dir' |
mv dir1 dir2 | move directory 'dir1' into another directory named 'dir2' |
wc file(s) | print # of lines, words, and characters in file(s), in that order |
wc -l | print # of lines only |
wc -w | print # of words only |
diff file1 file2 | print differences between two text files |
> file | direct STDOUT (Standard Output) into a new file named 'file' |
>> file | append STDOUT at the end of existing 'file' |
&> file | direct STDERR (Standard Error) into a new file named 'file' |
| command | pipe STDOUT from the preceding command into the next command as STDIN (Standard Input) |
< file | read text content of file as STDIN (Standard Input) and feed it into the preceding command |
command & | run command in the background and return immediately to your command prompt |
echo "text..." | print 'text...' to STDOUT (i.e., terminal window) |
Printing file content
cat file | concatenate (=print) file content to Standard Output (i.e., terminal window) |
cat file1 file2 ... | concatenate contents of the files to Standard Output (i.e., terminal window) |
more file | print file, one screenful at a time (SPACE to forward, q to get out) |
less file | print file, one screenful at a time (SPACE/PageUp to forward, b/PageDown to go back, q to get out) |
head file | print first 10 lines of file |
head -m file | print first m lines of file |
tail file | print last 10 lines of file |
tail -m file | print last m lines of file |
tail -n +m file | print file starting from line m
*NOTE: the old syntax tail +m is no longer supported in newer versions of tail.
Printing the 6th line and on, old syntax: tail +6; new syntax: tail -n +6.
|
Text searching
grep pattern file(s) | prints out all lines in file(s) that match pattern |
grep -i pattern file(s) | does the same, but ignores case (so 'the' and 'The' are both matched) |
grep -w | restricts the search to whole words only |
grep -n | precedes each line with the line number |
grep -h | stops preceding each line with the file name (searching multiple files) |
grep -l | displays a list of files that contain the string (actual lines are not shown) |
grep -v | prints the lines that do NOT match pattern |
grep --color | prints the matched portion in color (extremely handy!) |
grep -iw --color pattern file(s) | '-' options can be strung together; '--' options cannot |
grep "word1 word2" file(s) | pattern must be in quotes if it contains space |
grep -C n | prints out n lines before and after each matching line |
grep -iw -C n --color pattern file(s) | only simple '-' options can be strung together |
Text processing
tr 'char1' 'char2' < file | replace character 1 with character 2 in file text, and print to STDOUT |
tr 'abcdef' 'opqrst' | |
tr '[A-Z]' '[a-z]' | |
sed 's/string1/string2/' file | Prints out lines of file while substituting ('s') string1 with string2 once per line |
sed 's/string1/string2/g' file | Same as above, but string replacement is done globally ('g') throughout line |
sed -r 's/string1/string2/g' file | Same as above, but strings contain (extended) regular expression ('-r') |
sed 's/.../.../g; s/.../.../g' file | Separate multiple transformations with ';' |
uniq | |
uniq -c | |
sort | |
sort -n | |
sort -r | |
sort -k m,n | |
|