The Command Line. Matthew Bender. Friday 18 th September, CMSC Command Line Workshop

Similar documents
Review of Fundamentals

Bashed One Too Many Times. Features of the Bash Shell St. Louis Unix Users Group Jeff Muse, Jan 14, 2009

5/20/2007. Touring Essential Programs

CST Algonquin College 2

Table of contents. Our goal. Notes. Notes. Notes. Summer June 29, Our goal is to see how we can use Unix as a tool for developing programs

Review of Fundamentals. Todd Kelley CST8207 Todd Kelley 1

EECS 470 Lab 5. Linux Shell Scripting. Friday, 1 st February, 2018

The Online Unix Manual

Review of Fundamentals. Todd Kelley CST8207 Todd Kelley 1

Introduction: What is Unix?

Lab 2: Linux/Unix shell

Command Interpreters. command-line (e.g. Unix shell) On Unix/Linux, bash has become defacto standard shell.

Shells. A shell is a command line interpreter that is the interface between the user and the OS. The shell:

Shells and Shell Programming

System Programming. Unix Shells

Introduction to UNIX Part II

Answers to AWK problems. Shell-Programming. Future: Using loops to automate tasks. Download and Install: Python (Windows only.) R

sottotitolo A.A. 2016/17 Federico Reghenzani, Alessandro Barenghi

ACS Unix (Winter Term, ) Page 21

The UNIX Shells. Computer Center, CS, NCTU. How shell works. Unix shells. Fetch command Analyze Execute

Chapter 9. Shell and Kernel

UNIX COMMANDS AND SHELLS. UNIX Programming 2015 Fall by Euiseong Seo

Topic 2: More Shell Skills

Unix/Linux Basics. Cpt S 223, Fall 2007 Copyright: Washington State University

EECS2301. Lab 1 Winter 2016

Assignment clarifications

Part III. Shell Config. Tobias Neckel: Scripting with Bash and Python Compact Max-Planck, February 16-26,

Shell Start-up and Configuration Files

Introduction to UNIX. Logging in. Basic System Architecture 10/7/10. most systems have graphical login on Linux machines

UNIX System Programming Lecture 3: BASH Programming

Topic 2: More Shell Skills. Sub-Topic 1: Quoting. Sub-Topic 2: Shell Variables. Difference Between Single & Double Quotes

Shells and Shell Programming

Basics. I think that the later is better.

CMPS 12A Introduction to Programming Lab Assignment 7

Introduction Variables Helper commands Control Flow Constructs Basic Plumbing. Bash Scripting. Alessandro Barenghi

5/8/2012. Specifying Instructions to the Shell Chapter 8

Introduction to Bash Programming. Dr. Xiaolan Zhang Spring 2013 Dept. of Computer & Information Sciences Fordham University

CS Unix Tools. Lecture 3 Making Bash Work For You Fall Hussam Abu-Libdeh based on slides by David Slater. September 13, 2010

Sub-Topic 1: Quoting. Topic 2: More Shell Skills. Sub-Topic 2: Shell Variables. Referring to Shell Variables: More

Processes. Shell Commands. a Command Line Interface accepts typed (textual) inputs and provides textual outputs. Synonyms:

Bash command shell language interpreter

Linux shell programming for Raspberry Pi Users - 2

Crash Course in Unix. For more info check out the Unix man pages -orhttp:// -or- Unix in a Nutshell (an O Reilly book).

Linux shell scripting Getting started *

9.2 Linux Essentials Exam Objectives

bash, part 3 Chris GauthierDickey

Useful Unix Commands Cheat Sheet

22-Sep CSCI 2132 Software Development Lecture 8: Shells, Processes, and Job Control. Faculty of Computer Science, Dalhousie University

27-Sep CSCI 2132 Software Development Lab 4: Exploring bash and C Compilation. Faculty of Computer Science, Dalhousie University

A shell can be used in one of two ways:

Unix. Examples: OS X and Ubuntu

Chapter 1 - Introduction. September 8, 2016

INTRODUCTION TO SHELL SCRIPTING ITPART 2

Linux Command Line Interface. December 27, 2017

EECS 2031E. Software Tools Prof. Mokhtar Aboelaze

Exercise 1: Basic Tools

Unix/Linux: History and Philosophy

Examples: Directory pathname: File pathname: /home/username/ics124/assignments/ /home/username/ops224/assignments/assn1.txt

CS 307: UNIX PROGRAMMING ENVIRONMENT FIND COMMAND

CSCI2467: Systems Programming Concepts

Processes and Shells

Shell Scripting. With Applications to HPC. Edmund Sumbar Copyright 2007 University of Alberta. All rights reserved

CS246 Spring14 Programming Paradigm Notes on Linux

Pipelines, Forks, and Shell

Creating a Shell or Command Interperter Program CSCI411 Lab

Standard. Shells. tcsh. A shell script is a file that contains shell commands that perform a useful function. It is also known as shell program.

Bourne Shell Reference

CSE II-Sem)

When talking about how to launch commands and other things that is to be typed into the terminal, the following syntax is used:

Unix Tutorial Haverford Astronomy 2014/2015

Using LINUX a BCMB/CHEM 8190 Tutorial Updated (1/17/12)

UNIX Shell Programming

85321, Systems Administration Chapter 6: The shell

Unix tutorial. Thanks to Michael Wood-Vasey (UPitt) and Beth Willman (Haverford) for providing Unix tutorials on which this is based.

CS 307: UNIX PROGRAMMING ENVIRONMENT KATAS FOR EXAM 2

COMS 6100 Class Notes 3

Last Time. on the website

CHE3935. Lecture 1. Introduction to Linux

Basic Linux (Bash) Commands

Chapter 4. Unix Tutorial. Unix Shell

Introduction to the Shell

Understanding bash. Prof. Chris GauthierDickey COMP 2400, Fall 2008

Implementation of a simple shell, xssh

COMP2100/2500 Lecture 16: Shell Programming I

Lecture 4. Log into Linux Reminder: Homework 1 due today, 4:30pm Homework 2 out, due next Tuesday Project 1 out, due next Thursday Questions?

CSE 374 Midterm Exam Sample Solution 2/6/12

Learn Bash The Hard Way

S E C T I O N O V E R V I E W

Open up a terminal, make sure you are in your home directory, and run the command.

Lecture 8: Structs & File I/O

COMP 2718: Shell Scripts: Part 1. By: Dr. Andrew Vardy

ITST Searching, Extracting & Archiving Data

Unix Shell Environments. February 23rd, 2004 Class Meeting 6

The Unix Shell & Shell Scripts

Linux for Beginners. Windows users should download putty or bitvise:

CS246 Spring14 Programming Paradigm Files, Pipes and Redirection

Introduction to Shell Scripting

Perl and R Scripting for Biologists

Unix Shells and Other Basic Concepts

Introduction to Linux Basics Part II. Georgia Advanced Computing Resource Center University of Georgia Suchitra Pakala

Transcription:

The Command Line Matthew Bender CMSC Command Line Workshop Friday 18 th September, 2015 Matthew Bender (2015) The Command Line Friday 18 th September, 2015 1 / 51

Shells Section 1 Shells Matthew Bender (2015) The Command Line Friday 18 th September, 2015 2 / 51

Shells What is a shell? What is a shell? A shell is just another program. It reads in a line of text from the user. Then it processes any special characters. The shell determines if you told it do something it already knows how to do. If so, take that action. Else, look for a program installed on the computer of the same name, and run that. The shell will stop running when you tell it to (either by typing exit or hitting ˆD) Matthew Bender (2015) The Command Line Friday 18 th September, 2015 3 / 51

Shells Example shells sh - Thompson shell - by Ken Thompson (co-creator of Unix) - first Unix shell. Very basic, 1971 Matthew Bender (2015) The Command Line Friday 18 th September, 2015 4 / 51

Shells Example shells sh - Thompson shell - by Ken Thompson (co-creator of Unix) - first Unix shell. Very basic, 1971 sh - Bourne shell - by Stephen Bourne at Bell Labs in 1977, included scripting Matthew Bender (2015) The Command Line Friday 18 th September, 2015 4 / 51

Shells Example shells sh - Thompson shell - by Ken Thompson (co-creator of Unix) - first Unix shell. Very basic, 1971 sh - Bourne shell - by Stephen Bourne at Bell Labs in 1977, included scripting csh - C shell - by Bill Joy (author of the Vi editor) in 1978 - closer to C syntax than Bourne shell Matthew Bender (2015) The Command Line Friday 18 th September, 2015 4 / 51

Shells Example shells sh - Thompson shell - by Ken Thompson (co-creator of Unix) - first Unix shell. Very basic, 1971 sh - Bourne shell - by Stephen Bourne at Bell Labs in 1977, included scripting csh - C shell - by Bill Joy (author of the Vi editor) in 1978 - closer to C syntax than Bourne shell tcsh - improved C shell - in 1983 - offered various features like command completion Matthew Bender (2015) The Command Line Friday 18 th September, 2015 4 / 51

Shells Example shells sh - Thompson shell - by Ken Thompson (co-creator of Unix) - first Unix shell. Very basic, 1971 sh - Bourne shell - by Stephen Bourne at Bell Labs in 1977, included scripting csh - C shell - by Bill Joy (author of the Vi editor) in 1978 - closer to C syntax than Bourne shell tcsh - improved C shell - in 1983 - offered various features like command completion bash - Bourne-again shell - by Brian Fox in 1989. Gathered features from many shells, widely used today Matthew Bender (2015) The Command Line Friday 18 th September, 2015 4 / 51

Shells Example shells sh - Thompson shell - by Ken Thompson (co-creator of Unix) - first Unix shell. Very basic, 1971 sh - Bourne shell - by Stephen Bourne at Bell Labs in 1977, included scripting csh - C shell - by Bill Joy (author of the Vi editor) in 1978 - closer to C syntax than Bourne shell tcsh - improved C shell - in 1983 - offered various features like command completion bash - Bourne-again shell - by Brian Fox in 1989. Gathered features from many shells, widely used today zsh - Z shell - Paul Falstad in 1990 - Very powerful, huge set of feautures, fully customizable Matthew Bender (2015) The Command Line Friday 18 th September, 2015 4 / 51

Shells Example shells sh - Thompson shell - by Ken Thompson (co-creator of Unix) - first Unix shell. Very basic, 1971 sh - Bourne shell - by Stephen Bourne at Bell Labs in 1977, included scripting csh - C shell - by Bill Joy (author of the Vi editor) in 1978 - closer to C syntax than Bourne shell tcsh - improved C shell - in 1983 - offered various features like command completion bash - Bourne-again shell - by Brian Fox in 1989. Gathered features from many shells, widely used today zsh - Z shell - Paul Falstad in 1990 - Very powerful, huge set of feautures, fully customizable http://en.wikipedia.org/wiki/comparison of command shells Matthew Bender (2015) The Command Line Friday 18 th September, 2015 4 / 51

Shells bash bash is one of the most-used shells, and we will be talking about it. Many of the features are also available in other shells, but the syntax may differ. Bash should come installed on most systems, though it may not be the default shell. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 5 / 51

Shells Help in bash bash interprets many commands on its own, which generally do not have their own man page. To get help on them, you could run man bash and search for your desired command. Or, use bash s help command, which prints help about bash s internal commands. > help comm Matthew Bender (2015) The Command Line Friday 18 th September, 2015 6 / 51

Shells echo echo is a command that prints its arguments back to you. It is often both an installed program, and a shell built-in, so the shell s version will run. It is useful for seeing the values of variables and passing text to other programs. By default, it does not interpret escape sequences. Adding the -e flag enables this (this must be the first argument to echo) > echo "line 1\nline 2" line 1\nline 2 > echo -e "line 1\nline 2" line 1 line 2 Matthew Bender (2015) The Command Line Friday 18 th September, 2015 7 / 51

Shells Getting bash Check if your default shell is bash - you can do this by running > echo $SHELL This tells your shell to print the default shell. On Grace, the default shell is tcsh. Because shells are just programs, you can run a shell from within another shell. Run the command > echo $0 to see what shell you re currently running (if it starts with a -, that means it is a login shell). Changing shells does not change the value of the SHELL variable - the default login shell. The file /etc/shells contains a list of available shells. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 8 / 51

Shells Changing shells example > echo $SHELL /bin/tcsh > echo $0 -tcsh > bash > echo $SHELL /bin/tcsh > echo $0 bash > exit > echo $SHELL /bin/tcsh > echo $0 -tcsh Matthew Bender (2015) The Command Line Friday 18 th September, 2015 9 / 51

Shells The chsh command If you want to change your default shell, you can use chsh (change shell). Run > chsh -s shellname to change your login shell (shellname must be the full path to the shell, like /bin/bash). You can a list of available shells with cat /etc/shells. If you re on Grace, chsh is disabled (in a way) for reasons I am still unsure about. I suggest just running bash when you login. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 10 / 51

Section 2 Shell features Matthew Bender (2015) The Command Line Friday 18 th September, 2015 11 / 51

Variables bash treats everything as a string. Assigning to a variable: > name=matthew Use $ to get back the variable: > echo My name is $name My name is Matthew If the variable is not set, the result is the empty string. Many environment variables are all caps, so it is recommended you use lowercase. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 12 / 51

Variables Strings can be combined by putting them next to each other. > a=fruit > b=fly > echo $a$b fruitfly > echo butter$b butterfly > echo $as This will print nothing, as the variable as is not set. How do we print fruits then? Matthew Bender (2015) The Command Line Friday 18 th September, 2015 13 / 51

Variables We can be more explicit with our variables: > echo ${a}s fruits We could also quote the variable: > echo "$a"s fruits Matthew Bender (2015) The Command Line Friday 18 th September, 2015 14 / 51

The read command Use read to read in a variable. Lets the user enter a string into the variable $var: > read var Add a prompt string: > read -p "Enter username: " username Don t have the text show up when the user types: > read -s -p "Enter password: " password Matthew Bender (2015) The Command Line Friday 18 th September, 2015 15 / 51

Environment Variables Use the env command to see all the environment variables. $HOME = your home directory ( also evaluates to this) Matthew Bender (2015) The Command Line Friday 18 th September, 2015 16 / 51

Environment Variables Use the env command to see all the environment variables. $HOME = your home directory ( also evaluates to this) $PATH = a colon-separated list of directories that the shell looks for programs to run Matthew Bender (2015) The Command Line Friday 18 th September, 2015 16 / 51

Environment Variables Use the env command to see all the environment variables. $HOME = your home directory ( also evaluates to this) $PATH = a colon-separated list of directories that the shell looks for programs to run $PAGER = default pager (e.g. less, more used to view text when there is too much to fit on the screen) Matthew Bender (2015) The Command Line Friday 18 th September, 2015 16 / 51

The $PATH variable The $PATH variable is a colon-separated list of directories. When your shell doesn t know how to do something (e.g. mkdir), it searches the directories listed in $PATH, one by one. The directories of the $PATH variable will be searched, one-by-one, until one containing the specified program is found. Then that one is run. If running > echo $PATH isn t readable enough for you, try > echo $PATH tr : \n. We will cover exactly how this works later, but as a short explanation, it send the output of echo $PATH to the input of tr : \n, which will translate colons to newlines. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 17 / 51

Wildcards Special characters that expand based on files in the given directory. Also called globs. * - expands to any sequence of characters? - expands to any 1 character See man 7 glob for more information. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 18 / 51

Wildcard examples > ls a b band.txt bend.c bend.txt > echo * a b band.txt bend.c bend.txt > echo? a b > echo bend.* bend.c bend.txt > echo b?nd.txt band.txt bend.txt > echo b?nd.* band.txt bend.c bend.txt > echo b* b band.txt bend.c bend.txt Matthew Bender (2015) The Command Line Friday 18 th September, 2015 19 / 51

Hidden Files Files and directories that start with a. are hidden. These are often used for configuration files and directories. These will not show up in a ls, but you can use ls -a to show them. The wildcard * will not match them - use.* instead. Use both to match all files in a directory: > echo *.* will show all files (like ls -a) Matthew Bender (2015) The Command Line Friday 18 th September, 2015 20 / 51

Aliases Simple abbreviations for more complex commands. alias abbreviation=longer command If longer command contains spaces, you have to quote it. > alias lsa="ls -a" > lsa....dotfile file1 file2 You can also alias commands that already exist. A very common alias: > alias ls="ls --color" Typing alias without any arguments will print all the current aliases. Typing alias comm will print whatever comm is currently aliased to. If you alias over a command, put a backslash first to run the unaliased command: > \ls runs the original version of ls Use unalias to unalias a command. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 21 / 51

Common Aliases When removing files, ask before deleting each. > alias rm="rm -i" When moving files, ask for confirmation if doing so would overwrite another file. > alias mv="mv -i" When copying files, ask for confirmation if doing so would overwrite another file. > alias cp="cp -i" Move to parent directory, and move to parent directory s parent directory > alias..="cd.." > alias...="cd../.." Matthew Bender (2015) The Command Line Friday 18 th September, 2015 22 / 51

Exit codes Commands have an exit code. 0 means success, anything non-zero means failure. In some code you write, you can specify this when you exit (exit(exit code); in C, or the value you return from main). In bash, the $? variable contains the exit code of the last command. true is a command that does nothing and exits with code 0, false does nothing and exits with code 1. Most command will set a non-zero exit code if you tell it to do something it can t (like remove a non-existant file). Matthew Bender (2015) The Command Line Friday 18 th September, 2015 23 / 51

;, && and > comm1; comm2 will run comm1, followed by comm2 > comm1 && comm2 will run comm1, and then if successful (exit code of 0), also runs comm2 > comm1 comm2 will run comm1, and then if unsuccessful (exit code not 0), also runs comm2 We can use this to print if a command succeeds or fails: > comm && echo Success echo Failure Matthew Bender (2015) The Command Line Friday 18 th September, 2015 24 / 51

IO Redirection Programs have 3 basic IO (input/output) streams: stdin (standard input), stdout (standard output), and stderr (standard error) If a program requests input on stdin, it will wait until you enter text at the keyboard (generally the terminal buffers this until you enter a newline). If a program writes something to stdout or stderr, this will be printed out to you. In C, use printf("output") or fprintf(stdout, "Output") to print to stdout. Use fprintf(stderr, "Error") to print to stderr. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 25 / 51

Output Redirection $ comm > file will run comm, and redirect stdout to the file file instead of printing it to the screen. Any previous contents of file are erased. (Depending on bash s settings, it may stop you from overwriting files like this. Run set +o noclobber to disable this.) $ comm >> file will run comm, and redirect stdout to append to the end of file instead of printing it to the screen. The previous contents of file are preserved. The above command only redirects stdout, not stderr. To redirect stderr, put a 2 in front, like $ comm 2> file or $ comm 2>> file. If a program prints to both stdout and stderr, you can separate these by redirecting one of them and leaving the other to print to the screen, or write both to separate files: $ comm > outfile 2> errfile Matthew Bender (2015) The Command Line Friday 18 th September, 2015 26 / 51

Output Redirection You can also redirect stdout to wherever stderr is, or vice-versa like so: $ comm 2>&1 # redirects stderr to stdout $ comm >&2 # redirects stdout to stderr Note that stdout is file descriptor 1, and stderr is file descriptor 2, hence the syntax. You can omit the 1 when redirecting stdout. To ignore the output from a command, redirect it to the special file /dev/null. For example, the following command removes all output by first redirecting stdout to /dev/null, and then redirecting stderr to wherever stdout is going: $ comm > /dev/null 2>&1 Matthew Bender (2015) The Command Line Friday 18 th September, 2015 27 / 51

Input Redirection If a program reads from stdin, you can use the contents of a file instead like so: $ comm < file # reads input from file as if it was stdin $ comm << TOKEN # reads stdin until TOKEN is read input line1 input line2 input line3 TOKEN # TOKEN read, input stops TOKEN can be any word you want. This is useful because you don t have to create a file to read from, and it allows you to repeat the command and edit it without re-entering the text. If a program is reading from stdin and you are entering text, hit ˆD to signal end of stdin. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 28 / 51

Piping A pipe redirects the stdout from one command to the stdin of another. One of the most useful tools you have - it allows you to combine several small, simple programs into a tool suited for your needs. $ cat animals.txt fgrep -i monkey wc -l This sends the contents of animals.txt to the fgrep program, which outputs any lines that match monkey, ignoring case (the -i flag). Finally, that output is send to the wc program (word count), which prints the number of lines (the -l flag). We just combined small commands to count the number of monkeys in our file. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 29 / 51

Piping to a pager When the output of a command is too long, it helps to pipe the output to a pager, such as less or more. Pagers allow you to scroll through text. In less, use arrow keys or PgUp/PgDn to scroll. Hit q to exit. Hit h for help, and q to exit the help. Use /abc to search for text containing abc, and n and N to move forward and back among the matches. g will take you to the top, and G to the bottom. Pipe the output of a command to less to scroll through all of it: > comm less Matthew Bender (2015) The Command Line Friday 18 th September, 2015 30 / 51

The tee command Sometimes it is helpful to both see the output of a command and save it to a file. tee copies its stdin to a file, and also prints it to stdout $ comm tee file will save the output of comm in file, and also print it to stdout. Use tee -a to append to the file instead of overwriting it. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 31 / 51

Grouping You may want to group several command together, like parentheses in other programming languages. The syntax for this is to surround them with {} s, and leave a semicolon after the last command. There must be a space after the first {. Compare: $ echo one; echo two > nums.txt # prints "one" and writes "two" to nums.txt $ { echo one; echo two; } > nums.txt # prints nothing, writes "one" and "two" to nums.txt Matthew Bender (2015) The Command Line Friday 18 th September, 2015 32 / 51

Arguments and Quoting 1) bash reads a line of text from the user 2) bash processes the line for special characters like $, *, etc. and translates these accordingly. rm $prog1/*.o might translate to rm /homes/bender/216/projects/1/list.o /homes/bender/216/projects/1/test.o 3) bash then splits this on whitespace into a list of tokens: [rm, /homes/bender/216/projects/1/list.o, /homes/bender/216/projects/1/test.o] 4) bash then calls the program given by the first token, with the arguments given by the remaining arguments Note that programs do not see the special characters themselves, bash translates them first. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 33 / 51

Arguments in programs Programming languages have a feature to accept arguments. Java: public static void main(string[] args) args is an array of Strings containing the arguments. C: int main(int argc char * argv[]) argv is an array of character pointers containing the arguments, argc is the number of arguments. Python: import sys sys.argv is a list of the arguments In bash, aliases take no arguments, they just expand, and you can pass arguments to what they expand to only on the end. bash functions and shell scripts both take arguments. Note that some languages will not include the executable as an argument. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 34 / 51

Printing Program Arguments Example #include <stdio.h> int main(int argc, char * argv[]) { int i; for (i = 0; i < argc; i++) { printf("%d: %s\n", i, argv[i]); } return 0; } Save this as argprint.c, run the following: > gcc argprint.c -o argprint This produces an executable called argprint. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 35 / 51

argprint > argprint 0: argprint > argprint ONE TWO 0: argprint 1: ONE 2: TWO > argprint *.txt 0: argprint 1: emails.txt 2: stuff.txt 3: test.txt > argprint. 0: argprint 1: /homes/bender 2:. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 36 / 51

Configuration Files Using commands like alias la="ls -a" or set +o noclobber only last for the duration of the shell. Many programs have configuration files that they read on startup to determine settings. Most of the time, these are start with a. and end with rc (the rc stands for run commands). Example: when bash starts up, it reads from the.bashrc file. If you want to print a greeting everytime you start bash, add echo Hello! to the end of your.bashrc file. On Grace, the.bashrc file is read-only, but you can edit the.bashrc.mine file. So add your options like set +o noclobber to your.bashrc or.bashrc.mine file. Note: all these config files are in your home directory. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 37 / 51

Sourcing Files In bash, you can run source file to run the commands in the current shell. So you can source a file containing options or aliases to have them loaded in the current shell. For example, bash sources your.bashrc file on startup. This in turn sources your.bash aliases file, so put your aliases there (they would work just as well in.bashrc though). A synonym for source is., so source.bashrc and..bashrc do the same thing. If you edit your.bashrc or.bash aliases, you will have to source them or logout and log back in to get the changes. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 38 / 51

Want to be evil? If you really want to be evil, and you have access to your friend s.bashrc, add the following line: echo "sleep 0.5" >> /.bashrc This cause the line sleep 0.5 to be added to your friend s.bashrc everytime he logs in. This means his login time will appear to slowly increase everytime he logs in, because there will be more and more lines of sleep 0.5 in his.bashrc Matthew Bender (2015) The Command Line Friday 18 th September, 2015 39 / 51

Useful sourcing aliases In my.bash aliases, I like to have the following 2 lines: alias bashrc="vim /.bashrc && source /.bashrc" alias als="vim /.bash aliases && source /.bash aliases" These will open up my.bashrc or.bash aliases file, respectively, and source them when I am done editing them so I don t have to. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 40 / 51

Command History The history command prints your history of commands entered.!! is the last command you entered.!n is the nth command in your history.!-n is the nth from last command in your history.!abc is the last command starting with abc.!?abc is the last command containing abc.!* is all of the arguments to the last command.!ˆ is the first argument of the last command.!$ is the last argument of the last command.!!:4 is the 4th argument of the last command (also works with!-2:4,!v:4, etc.).!!:2-5 is the 2nd through 5th arguments of the last command (also works with other command like above). Matthew Bender (2015) The Command Line Friday 18 th September, 2015 41 / 51

Shell Builtins As mentioned before, there are some things bash knows how to do. For everything else, there s Mastercard it looks for an installed program of the given name. Some examples of bash builtins: alias - create an alias for a command function - create a function (more powerful than an alias) echo - bash provides its own implementation of echo shopt - set or unset various shell options type - see what type of command something is Matthew Bender (2015) The Command Line Friday 18 th September, 2015 42 / 51

Shell Builtins To what bash thinks your command is, use the type command: > type comm This will print one of several things: comm is a shell builtin if comm is one of bash s internal commands. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 43 / 51

Shell Builtins To what bash thinks your command is, use the type command: > type comm This will print one of several things: comm is a shell builtin if comm is one of bash s internal commands. comm is aliased to blah blah blah if comm is a user-defined alias. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 43 / 51

Shell Builtins To what bash thinks your command is, use the type command: > type comm This will print one of several things: comm is a shell builtin if comm is one of bash s internal commands. comm is aliased to blah blah blah if comm is a user-defined alias. comm is a function, followed by its implementation, if comm is a user-defined function. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 43 / 51

Shell Builtins To what bash thinks your command is, use the type command: > type comm This will print one of several things: comm is a shell builtin if comm is one of bash s internal commands. comm is aliased to blah blah blah if comm is a user-defined alias. comm is a function, followed by its implementation, if comm is a user-defined function. comm is /bin/comm, or some other path, if comm is a installed program. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 43 / 51

Shell Builtins To what bash thinks your command is, use the type command: > type comm This will print one of several things: comm is a shell builtin if comm is one of bash s internal commands. comm is aliased to blah blah blah if comm is a user-defined alias. comm is a function, followed by its implementation, if comm is a user-defined function. comm is /bin/comm, or some other path, if comm is a installed program. comm is hashed (/bin/comm), if comm is a installed program and has been recently used. bash remembers where is is located to avoid having to re-search for it in $PATH. Unhash it with unhash comm. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 43 / 51

Shell Builtins To what bash thinks your command is, use the type command: > type comm This will print one of several things: comm is a shell builtin if comm is one of bash s internal commands. comm is aliased to blah blah blah if comm is a user-defined alias. comm is a function, followed by its implementation, if comm is a user-defined function. comm is /bin/comm, or some other path, if comm is a installed program. comm is hashed (/bin/comm), if comm is a installed program and has been recently used. bash remembers where is is located to avoid having to re-search for it in $PATH. Unhash it with unhash comm. comm is a shell keyword if comm is a keyword like if or! Matthew Bender (2015) The Command Line Friday 18 th September, 2015 43 / 51

The which command which command will find the first instance of command in your path; that is, which executable program would be run if you had run command Add the -a flag to print all the executables matching command in your path. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 44 / 51

Quoting In bash, everything is separated by whitespace You cannot run name=matthew Bender, because Matthew Bender is not seen as one string. Similarly, running > mkdir Project 1 will create two directories, Project and 1 To fix this, you can escape whitespace with a backslash: > mkdir Project\ 1 Or add quotes: > mkdir "Project 1" > mkdir Project 1 The difference is evident if we pass these to our argprint program from earlier. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 45 / 51

Quoting Be careful using variables with whitespace: they will expand into multiple arguments. Quote them to resolve this: > proj="project 1" > cd $proj # will not work, cd receives 2 arguments: Project, and 1 > cd "$proj" # will work, as bash treats quoting strings as 1 argument > cd $proj # will not work, variables are not expanded in single quotes This is why it is generally best practice to quote your variables. Matthew Bender (2015) The Command Line Friday 18 th September, 2015 46 / 51

Brace Expansions A comma-separated list inside braces will be expanded to each of its arguments, with any text around them being added around each argument. mkdir 216/{projects,homeworks,notes} Expands to: mkdir 216/projects 216/homeworks 216/notes echo "a "{man,plan,canal}, Panama Prints: a man, a plan, a canal, Panama cp path/to/file{,.bak} # copies path/to/file to path/to/file.bak Matthew Bender (2015) The Command Line Friday 18 th September, 2015 47 / 51

Brace Expansions Two numbers or charactes separated by 2 dots in braces expand to the given range. mkdir 216/projects/p{1..5} Expands to: mkdir 216/projects/p1 216/projects/p2 216/projects/p3 216/projects/p4 216/projects/p5 echo {A..E} {f..j} Prints: A B C D E f g h i j Ranges can take a step as well: echo {A..Z..3} Prints ever 3rd letter: A D G J M P S V Y Matthew Bender (2015) The Command Line Friday 18 th September, 2015 48 / 51

Brace Expansions You can combine multiple brace expansions in the same expression. alias chess squares="echo {a..h}-{1..8}" chess squares prints: a-1 a-2 a-3 a-4 a-5 a-6 a-7 a-8 b-1 b-2 b-3 b-4 b-5 b-6 b-7 b-8 c-1 c-2 c-3 c-4 c-5 c-6 c-7 c-8 d-1 d-2 d-3 d-4 d-5 d-6 d-7 d-8 e-1 e-2 e-3 e-4 e-5 e-6 e-7 e-8 f-1 f-2 f-3 f-4 f-5 f-6 f-7 f-8 g-1 g-2 g-3 g-4 g-5 g-6 g-7 g-8 h-1 h-2 h-3 h-4 h-5 h-6 h-7 h-8 Matthew Bender (2015) The Command Line Friday 18 th September, 2015 49 / 51

Brace Expansions for i in {5..1}; do echo "$i"... sleep 1 done echo Blastoff! Matthew Bender (2015) The Command Line Friday 18 th September, 2015 50 / 51

Command Substitution bash provides syntax to substitute the output of a command as other arguments. 2 different notations are used: surround the command in backticks, or surround it with $(). The latter notation is preferred, mainly because it allows easy nesting. > rm $(cat files to delete.txt) # removes the files listed in files to delete.txt > now=$(date) # sets the $now variable to be the current date and time > vim $(ls fgrep -i "list") # opens all files in the current directory with "list" in their name, ignoring case Matthew Bender (2015) The Command Line Friday 18 th September, 2015 51 / 51