CS 279 - Week 2 Lecture 1 - 2022-08-29]

=====
TODAY WE WILL
=====
*   announcements...
*   continuing our discussion of the UNIX/Linux filesystem
    and file-related commands
*   prep for next class

=====
reminder: mkdir, make directory
=====
*   ...lets you make a new directory

*   can give as an argument the pathname of a desired
    new directory

=====
BUT let's now talk more about the UNIX/Linux filesystem
=====
*   hierarchical!
*   consists of a set of files
*   every file has one or more file names

*   starts at a special directory named /
    which is called the root

*   3 kinds of files:
    *   regular files
    
    *   directories - each contains information
        about a set of files, and are used to locate
	a file by its name

    *   special files of several kinds:
        *   device files - provide access to printers,
	    terminals, etc.
	*   FIFO files - named pipes
	*   some UNIX/Linux implementation-specific kinds
	    of special files

*   files have names;
    *   most Linux/UNIX systems allow up to 255 characters
    
    *   a filename can include any character other
        than '/' or the null character

    *   are case sensitive!

    *   letters (uppercase or lowercase), digits, underscores
        are usually safe

    *   hyphens are safe EXCEPT for as the first character
        (would make your file look like a set of command
	options...!)

    *   CONVENTION: a DOT the beginning of a file name
        identifies an initialization or supporting file
	for some program
	*   these are sometimes called "invisible" files,
	    because by default ls (with no arguments) does
	    not display their names (probably to keep users
	    from messing with them)

        *   these so-called "dot files" are also treated
	    specially during so-called wildcard expansion
	    (more on that in the nearish future)

=====
pathnames
=====
*   a pathname is a name that designates a file
    ...consists of a sequence of filenames separated
    by slashes /
    *   that is, filenames are components of a pathname

    *   the LAST filename in a pathname is sometimes called
        the basename

    *   the portion of the pathname PRECEDING the last
        filename is sometimes called the path prefix

    *   there are ABSOLUTE and RELATIVE pathnames
        *   absolute is the most complete pathname for
	    a file -- and will be the same regardless
	    of what your current directory is

            It always starts with the root, /

        *   relative is relative to some directory;
	    (usually the current directory);
	    it MUST NOT start with a slash 
            
=====
reminder: cd - change directory
=====
*   with no arguments: always takes you home!
    (changes the current directory to your special
    home directory)

*   with an argument, it tries to change the current
    working directory TO the given directory
    *   (if a relative pathname is the argument,
        it is considered relative to the present working
	directory)

======
OOPS, did we mention? Re: ls
======
*   ls by itself (no arguments) lists the files in
    the current directory

    ...if given the name of a directory,
    it lists the contents of that directory

=====
CONVENIENT provided nicknames:
=====
*   .. is always a nickname for a directory's parent
    directory

*   . is always a nickname for a directory itself

*   ~ in most modern shells ia nickname for your home
    directory

    ~ followed by a username is a nickname for that
    user's home directory

=====
filename completion
=====
*   typically UNIX/Linux shells support! (but not
    sftp, more's the pity!!!)

    ...if you start typing a filename in a command,
    and you type the Tab key,
    the shell will TRY to complete that filename (well,
    the next level...) if the start you've typed
    uniquely identifies it

    (if not unique, typing tab twice LISTS all the
    files it matches)

=====
cat - short for canCATenate
=====
*   a way to quickly see a file's contents,
    if called with ONE argument

*   a way to see a concatenated version of multiple
    file's contents, if called with multiple arguments

=====
output file redirection
=====
*   desired_command > desired_outfile

    ...and desired_outfile now contains the standard
    output for that command
    BUT if redone, OVERWRITES desired_outfile's current
    contents!!!!!

*   desired_command >> desired_outfile

    ...APPENDS the results of desired_command's standard
    output to desired_outfile

=====
more (and most and less, if installed on your system)
=====
...let you see a file's contents one screen at a time
   (and other fun options)