======Linux Quick Reference====== This Linux quick reference has been compiled by current and former members of the EECS IT Support staff as a guide for the most basic Linux commands. =====Unix Fundamentals===== ====Pathnames==== In a Linux shell, there are two types of paths. There are absolute paths (beginning in ''/'') that define a full path from the root directory and relative paths (paths that don't begin with ''/'') that are relative to your current directory. Example: ^ Example ^ Path Description ^ | ''foo.c'' | The **relative path** to the file ''foo.c'' in the current working directory | | ''pgms/foo.c'' | The **relative path** to the file ''foo.c'' in the ''pgms'' directory within the current working directory | | ''/home/jruser/pgms/foo.c'' | The **absolute path** to the file ''foo.c'' based on the root of the file system | ====Directory Abbreviations==== ^ Abbreviation ^ Meaning ^ | ''~'' | Your home (login) directory | | ''~username'' | The home directory for the ''username'' | | ''.'' | The current working directory | | ''..'' | The parent directory of the current one | | ''../..'' | The parent directory of the parent directory | ====Wildcards==== ^ Character ^ Meaning ^ | ''?'' | Match a single character | | ''*'' | Match zero or more characters | ===Examples=== ^ Expression ^ Description ^ Examples ^ | ''fo?.c'' | Matches ''fo'' followed by any single character, followed by ''.c'' | ''foa.c'', ''fob.c'', ''foc.c'', ''fo1.c'' | | ''foo.*'' | Matches ''foo.'' followed by zero or more characters | ''foo.txt'', ''foo.exe'', ''foo.'', ''foo.png'' | ====Redirection==== ^ Command ^ Effect ^ | ''command > myfile'' | Redirects the output of ''command'' to the file ''myfile'' instead of ''stdout'' (the terminal output). If ''myfile'' exists, its contents will be replaced. | | ''command >> myfile'' | Similar to ''>'' except that it appends to the end of the file rather than overwriting. | | ''command < myfile'' | Redirects the contents of ''myfile'' to the input of ''command'' rather than ''stdin'' (keyboard terminal input). | | ''cmd1 | cmd2'' | Redirects ("pipes") the output of ''cmd1'' to the input of ''cmd2''. | | ''command | tee myfile'' | Duplicates the output of ''command'' to both ''stdout'' and ''myfile''. | | ''script myfile'' | Logs everything displayed on the terminal to the file ''myfile''. The logging is terminated with ''exit''. | =====Filesystem===== ====Listing/Creating Directories, Removing Files/Directories, Etc.==== See [[knowledge-base:linux-topics:basic-commands|]]. ====Creating a File==== ^ Command ^ Effect ^ | ''cat > myfile'' | Allows you to enter text with the keyboard to be stored in the file named ''myfile''. After entering the desired text, press ''Crtl+D''. | | ''vim myfile'' | Launches vim text editor on the file ''myfile'' | ====Displaying File Contents==== ^ Command ^ Effects ^ | ''cat myfile'' | Displays entire contents of the file ''myfile'' at once. Note that to scroll this content, your terminal pragram must be able to handle scrolling. | | ''less myfile'' | Displays contents of the file ''myfile'' in a full screen, scrollable view. | ====Comparing Files==== ^ Command ^ Effect ^ | ''diff file1 file2'' | Performs a line-by-line comparison of the files ''file1'' and ''file2''. The differences are displayed in the shell output. | | ''cmp file1 file2'' | Performs a byte-by-byte comparison of the files ''file1'' and ''file2''. The differences are displayed in the shell window. | ====Compressing Files==== Compressing files can reduce the size of files and help conserve space. ^ Command ^ Effect ^ | ''gzip myfile'' | Compresses the file ''myfile'', replacing it with the file name ''myfile.gz'' | | ''gunzip myfile.gz'' | Uncompresses the file ''myfile.gz'', replacing it with the file named ''myfile'' | ====Searching Within Files==== ^ Command ^ Effect ^ | ''grep hello myfile'' | Displays the lines from ''myfile'' that contain the string ''hello'' | | ''grep hello file1 file2'' | Displays the lines within files ''file1'' and ''file2'' that contain the string ''hello'' | | ''grep "some string with spaces" myfile'' | Displays the lines within the file ''myfile'' that contain the entire string ''some string with spaces'' | | ''grep hello *'' | Displays the lines within any file in the current directory that contain the string ''hello'' (Fun fact: the ''*'' is not parsed by grep but instead by the shell. ''*'' is a wildcard in the shell that expands to a space delimited list of all files in the current directory) | | ''grep -v hello *'' | Displays the lines within any file in the current directory that do not contain the string ''hello'' (''-v'' stands for invert-match) | | ''grep -i hello *'' | Displays the lines within any file in the current directory that contain the string ''hello'' in any letter-case. For example, lines containing ''hello'', ''HELLO'', and ''HeLlO'' would all be displayed | ====Changing Access Modes (Permissions)==== See [[knowledge-base:linux-topics:file-storage|]] =====Process and Job Control==== ====Important Terms==== * **Process**: any running program on a Linux system * **PID**: process identifier (a number that identifies the process) * **Job**: a process or group of processes that a shell is running * **Job-ID**: job identifier * **Background job**: a job that is running in the background (e.g., the process is not using terminal input and the terminal is still accepting commands or running another program in the foreground) * **Foreground job**: a job that is running in the foreground and consuming terminal input/output ====Listing Processes and Jobs==== ^ Command ^ Effect ^ | ''ps'' | Displays a list of processes and corresponding PIDs | | ''ps gx'' | Displays a list of processes and corresponding PIDs, including "hidden" processes | | ''jobs'' | Displays a list of current jobs and corresponding job-IDs. | ====Stopping (Suspending) a Job/Process==== To stop (suspend) a job/process, type ''CTRL+Z''. The suspended process will still be listed in the list of active processes, even though it has been suspended from active execution. ====Running a Job in the Background=== To run a job in the background, the easiest way is to start the process in the background. You can do this by adding a ''&'' anywhere after the command. ^ Command ^ Effect ^ | ''firefox &'' | Launches Firefox as a background process. The browser window will still appear; however, your shell will continue to accept commands. | | ''bg'' | Continues running the most recently suspended job in the background | You can also suspend a process running in the foreground by pressing ''CTRL+Z'' and move it to the background: ~> firefox # firefox is now running in the foreground and the terminal is not available # press CTRL+Z to suspend it and get the shell back ~> bg ~> ====Bringing a Job to the Foreground==== ^ Command ^ Effect ^ | ''fg'' | Brings the last suspended job to the foreground | | ''fg id#'' | Brings the job corresponding to the job-ID ''id#'' to the foreground (You can find job IDs by running ''jobs'' as mentioned above) | ====Terminating a Job/Process==== ^ Command ^ Effect ^ | ''CTRL+C'' | Terminates the current program in the foreground, telling it to quickly finish | | ''kill id#'' | Terminates the job/process with the job-ID/PID ''id#'', telling it to quickly finish | | ''kill -KILL id#'' | Kills the job/process with the job-ID/PID ''id#'' (This is a stronger kill than the other two, which should essentially forces it to terminate without giving it time to finish) | =====Miscellaneous Commands===== ====Displaying the Current Date and Time==== ^ Command ^ Effect ^ | ''date'' | Displays the current date and time | ====Printing==== ^ Command ^ Effect ^ | ''lpstat -p'' | Lists all available printers and their statuses | | ''lp myfile'' | Prints the file ''myfile'' on the default printer | | ''lp -d myprinter myfile'' | Prints the file ''myfile'' on the printer named ''myprinter'' | | ''lp -n # myfile'' | Prints ''#'' copies of the file ''myfile'' |\ | ''lp -o sides=two-sided myfile'' | Prints the file ''myfile'' double-sided (if the printer supports it) | | ''lpstat -o myprinter'' | Displays the contents of the print queue. | | ''cancel id#'' | Cancels the print request identified by id number ''id#'' | See [[knowledge-base:linux-topics:command-line-printing|]] for more info. ====Getting Information on Users==== ^ Command ^ Effect ^ | ''who'' | Displays a list of the users logged into the current machine | ====Using the Command History==== ^ Command ^ Effect ^ | ''history'' | Displays the last 15 commands from the current session | | ''!num'' | Repeats the command with history number ''num'' | | ''!str'' | Repeats the most recent command that begins with the string ''str'' | | ''!!'' | Repeats the last command | | ''!$'' | Expands to the last argument of the last command | | ''grep command $HISTFILE'' | Searches your history file for the command. ''history'' only applies to the current shell session, but the log of all shells is saved to your histfile when you exit |