Join Kevin Skoglund for an in-depth discussion in this video Command structure, part of Unix for Mac OS X Users.
Let's talk a little bit more about the structure of the command so that we make sure we always use them in the right way. There is a very definite structure in Unix. Commands are always going to be the command followed by the options followed by the arguments, always in that order. Command then options then arguments. You can't put the options after the arguments. They have to come in the middle. The command is always a single word, always. It's the thing we want to do. So in our case it was echo. That was the command that we were showing. echo (space) and then we didn't have any options. Options are optional.
So options, if we have them, will modify the behavior of the command in some way. We'll see how to see what the available options are for each command. But for now just understand that it's command space, then the options, and then a space followed by whatever the arguments are. In our case the argument was a string, Hello World. It's the thing that we want the command to use when doing whatever that command does. So echo 'Hello World' echoes 'Hello World'. 'Hello World' is the argument. Let's take a look at some examples and we'll be able then to see the different forms that options can also take.
So as we saw we had just simple echo 'Hello World'. If we wanted to pass in an option, we could pass in the -n option that suppresses a new line Return after it outputs Hello World. So we don't get a new line at the end. It would just give us the command prompt immediately. So you can see there we divided them again with spaces, the command, then the options, then the argument. Notice also that the option has this hyphen in front of it. That's the other clue that we give to Unix that we're talking about an option here and not an argument. We don't always have to have an argument either, for example, we could have ruby -v.
That will return the version of ruby that we have installed on our computer. -v is a very common option in Unix for returning the version of something, the software version, the command version. We also can do ruby --version. It does the exact same thing. It's just a different way of specifying the option. So you'll usually either have a single dash followed by a letter, or dash dsah followed by a keyword. It tends to not be a letter in that case. It tends to be a key word, but both of them work the same, -v or --version.
We can also have a list of options ls -l -a -h and then the argument, the Desktop. That's actually a folder that we're talking about in that case, a directory. So we can have multiple options. Typically what you have in that case though is we smash them altogether. It has the exact same effect. We could mix and match these in any way we want. l, a and h together are the same as if we had broken them up. Notice that the spaces make it pretty easy to tell where the command and option arguments are.
There is an exception to this, which is that sometimes an option wants an argument of its own. So for example the banner command -w specifies the width of the banner. It wants to know how wide you want it. So if we say 50, we need to pass that in as an argument to the w. So 50 is not an argument to banner; 50 is an argument to the w option. Hello World is actually the one and only argument for banner. To make that less confusing, a lot of times what you will see is people just eliminate that space. banner -w50 and that makes it clear that this 50 belongs to the w option followed by the string.
We can also have multiple arguments. Just to show you that, we can have cat with the -n option or without it. -n option will number the lines and then cat will output the content of file1 followed by the content of file2 and it will just use -n option to number those. So hopefully that gives you a feel for how these work. Let's try out a couple just so you can see how they work. So here I have a command prompt. So as we saw before, we could do echo 'Hello World'. Incidentally you can use double quotes instead of the single quotes. It works exactly the same.
I just had opted for the single quotes. And then we can do the same thing, but we can back up here and put in the -n option and now we get the same thing without the new line return. Let's go ahead and get a new one here and let's type the ls command. It shows me a listing of the directories. ls -lah will give me a different listing of those directories. In the next chapter, we'll talk more about directories and these different listing options, but as you can see now, we get two different things based on the options that we put out.
We can also do banner -w50 and let's do 'Hello World'. We'll just see what banner does for us. There it is. You can use the scroll, you can scroll back up here, and you can see that it outputs this big banner, 'Hello World.' It's horizontal, but that's suitable then for printing on your printer, if you wanted to have a big easy banner done that way. It is just sort of a fun little program. Another thing worth noting is that you can put semicolons between commands if you want to do several things at once. So echo 'Hello '; echo 'World'.
Now it's going to do one command. Semicolon tells that now we're going to do a new command, and then we've got the next command right after it, so semicolon to break up commands. We can also of course put in that -n option in front of hello and we get it all on one line, Hello and World. That's actually two separate commands that's doing. So that's the fundamentals of command. Just remember that it is always the command followed by the options then followed by the arguments.
- Moving around the file system
- Creating and reading files
- Copying, moving, renaming, and deleting files and directories
- Creating hard links and symbolic links
- Understanding user identity, file ownership, and sudo
- Setting file permissions with alpha and octal notation
- Changing the PATH variable
- Using the command history
- Directing input and output
- Configuring the Unix working environment
- Searching and replacing using grep and regular expressions
- Manipulating text with tr, sed, and cut
- Integrating with the Finder, Spotlight, and AppleScript