CS 279 - Week 13 Lecture 1 - 2022-11-14
TODAY WE WILL
* announcements/reminders
* a little more history [command]
* how files are stored in UNIX/Linux
* a few words on hard and soft [symbolic] links
* [if time] start intro to Bash functions
* prep for next class
* Can start working on Homework 8!
1st attempts due by 11:59 pm this Friday, November 18
=====
a little more on the history command,
and how you can use its list
=====
* history
* can see list of previously-done commands
* arrow up and down to "scroll" through those commands
to easily repeat previous commands
* some other ways to make use of this list of previous commands
* !! - redoes the previous command
* !str - redo the most-previous command that starts with str
* !?str - redo the most-previous command that includes that str
* !num - redo the command that has the number (based on the
history command numbering)
reminder:
history | tail # shows the last 10 lines of the history command output
history | tail -n 15 # shows the last 15 lines of the history output
* !-num - redo the command num commands ago
!-2 - redoes the command 2 commands ago
* a former student mentioned that ^r lets you search history
interestingly...
* (and start typing a command, and type return when you
get to the one you want to redo)
* ^patt^repl^
...redo the most-previous command with patt replaced with repl
* emacs looky2.txt
...
^2^4^
...now the command
emacs looky4.txt
...is done
* are more substitution-options here;
if you prefer, you can use
!!:s/patt/subst/
* note that ^patt^subst^ replaces the FIRST instance
of patt with subst --
there is a global replace:
you CAN put a g before the s in the :s approach;
that is,
!!:gs/4/8/ # to replace all 4's in the previous command with 8's
* hey! and this works with other expressions besides !! --
for example,
!-2:gs/8/9/ # to replace all 8s with 9s in the command done
# 2 commands ago
=====
how files are stored in UNIX/Linux
=====
* a UNIX/Linux implementation tidbit, that sometimes shows up
in documentation...!
* A UNIX/Linux file system stores essential information about a file
in an i-node (information node)
* where the file's contents are actually stored
* how long the file is
* how many LINKS there are to it <-- hard links, NOT symbolic links
* when it was created
...and more;
* each i-node has an i-number that identifies it (sometimes also
called an i-node number)
i-numbers are uniquie WITHIN file systems but not AMONG file systems,
and, as a result, links across file systems have to be treated
specially;
* hard links across file systems are not allowed,
but symbolic links CAN be;
* the ACTUAL data in a file is stored in a sequence of BLOCKS
* typical for a modern system: block size of 4096 bytes
[I hope that's up to date...]
* the file system stores files LONGER than one block
in SCATTERED data blocks,
and uses a SMALLER set of blocks to keep track of where
the file's data blocks are
* the blocks in this smaller set contain POINTERS to
the data blocks
and are called indirect blocks because they provide
access to the data indirectly
* small files? all the pointers can be stored in the i-node
very large files? there may be a second level of indirect
blocks that point to the first-level blocks, or even
perhaps a THIRD level;
* and the UNIX utilities that show the number of blocks
in a file count INDIRECT blocks as well as the blocks
containinf the actual data of the file;
=====
a few words on hard links and symbolic links (soft links)
=====
* [NOT the same as a hypertext link!!]
* what is a UNIX/Linux link?
* a link to a file is a directory entry for that file,
consisting of a filename that names that file within the directory,
along with an i-node number (remember, an i-node number or i-number
is a unique ID, essentially, for a file within one file system)
* a file CAN have multiple links
* the links to a file have the SAME i-node number but DIFFERENT
names
they can reside in different directories, also,
(but hard links CANNOT be *across* file systems
* The ln command creates a link to an existing file
(yes, this is something of an alias situation...)
* interesting fact: the rm command removes a LINK to a file,
not the file itself;
* a file is not deleted from the system until its LAST link
is removed;
* with this style of link -- the system can't really tell
which is the "original" link, and which are "later"
links - IF I understand correctly;
* (every file has at least one link, at least one name connected
with an i-inode...)
* touch first-file.txt
ln first-file.txt hard-link-to-1st.txt
...that should add a 2nd hard link to that file, so it now has
hard links for the names first-file.txt and hard-link-to-first.txt
ls -i filename # to see the inode number!
ls -i first-file.txt hard-link-to-1st.txt # should see the same i-node number!
* (note: if you just see "link", typically a hard link is meant...?)
=====
symbolic links (soft links)
=====
* references a file indirectly;
* a symbolic link specifies a PATHNAME;
if that pathname designates an actual file, then the symbolic link
refers to that file
if is designates another symbolic link, then that link is followed in
turn;
* see the difference?
for a hard link, what is stored is the file name and an inode
number;
for a soft/symbolic link, what is stored is the link name and
the PATHNAME to the linked-to file; it is clear, then,
which is the "original"
* ln with the -s option creates a symbolic/soft link
ln -s orig-file symbolic-link-to-orig-file
try:
ls -i orig-file symbolic-link-to-orig-file
...they have different i-node numbers
ls -l orig-file symbolic-link-to-orig-file
...SEE that the symbolic-link entry SAYS what it refers to!
AND its permissions string STARTS with an l !
ls -li orig-file symbolic-link-to-orig-file
...does give both the i-node number along with the usual long-listing info
* CAREFUL --
if two names are hard links to the same i-node (have the same i-node
number), removing one does not affect the other.
BUT if a soft/symbolic link links to one of those hard links,
and you remove the file it is linked TO, that soft link is
now "broken" (complains about being a nonexistent file if used)