CS 279 - Week 3 Lecture 2 - 2022-09-07 TODAY WE WILL * announcements * intro to file permissions * a LITTLE more on ls * intro to the chmod command * shell local variables? local shell variables? * [did not get to] using backquotes in the shell * prep for next class * some more reading: * Paul Cobbaut 2021 revision course text: Section II - Chapter 13 - Sections 13.1 - 13.5 ===== intro to file permissions! * three levels: permissions for the: * owner - typically the creator of the file * group - a specified group of users * "world" - everyone who has an account on that UNIX/Linux system * for each of those levels, for each file, one can specify if, for those in that level, that file is: r - readable w - writable x - executable * common way of expressing in UNIX/Linux: * always in the order read then write then execute * put the letter if that file HAS that permission, put a dash if a file does NOT * rwx -> has read AND write AND execute --- -> has NO permissions! no read, no write, no execute rw- -> has read and write but not execute r-x -> has read and execute but not write * AND you give these for the owner level, then the group level, then the world level rwxr-xr-- -> owner has read, write execute, group has jusr read and execute, world has just read * consider plain text files! * permissions r and w mean exactly you think -- can someone in that group read this file, write this file * a plain text file (such as a bash shell script) needs to have permission x to be typed as a command to be run * it's a little weirder for directory files! * r, for a directory, lets you find out WHAT is in the directory, BUT it is INSUFFICIENT for ACCESSING the files whose names appear in it * (you cannot, for example, use cat to view the contents of a file that's in a directory you only have r access to) * w, for a directory, is required to ADD files to it or DELETE files from it BUT! w permission is NOT required to MODIFY a file listed in the directory or to delete its *contents* (subject to the *file's* permissions...) * x, for a directory, lets you operate on the names in the directory IF you know them, but does NOT let you find out what they are if you don't * r-x turns out to be pretty common for a (publicly-accessible) directory --x can be weird, but occasionally useful, for a directory; * some additional important permissions info: * the permissions a directory has can (to some degree) "override" those of the files within it for example, if a directory does not have world read and execute, the world will not be able to "reach" the files within, even if they are world-readable ===== two more ls options: -l and -d * option l is for "long listing" ls -l ... gives more information, including file permissions * option d is for a directory listing...? from the man page: "Directories are listed as plain files (not searched recursively)." * (for options that don't themselves have arguments, you can combine them with a single dash -- ls -ld -> both of these work for a ls -dl non-recursive long listing of a directory ls -al -> both of these work for a long ls -la listing of invisible files ===== intro to the chmod command * SEVERAL approaches to this! ...see course text, 2021 revision, Sections 33.6 and 33.7! * "old school chmod" - you specify the permissions for all of the levels using an octal code -- with an octal digit representing the binary representation for each level r, then w, then x r-x WHAT IF you expressed this as 1 if the file has that permission for that level, and 0 if it does not? rwx -> 111 r-x -> 101 r-- -> 100 What if you then expressed that binary value in base 8? 111 is 7, 101 is 5, etc. And if you write that octal value for the owner, then the group, then the world, THAT can be the 1st argument to chmod (and the 2nd argument is what file(s) are getting those permissions) * for example: chmod 700 just-for-me.sh ...111 000 000 ...rwx --- --- chmod 600 mine-only.txt ...110 000 000 ...rw- --- --- chmod 711 public_html ...111 001 001 ...rwx --x --x chmod 644 all-can-see.txt ...110 100 100 ...rw- r-- r-- chmod 755 all-can-see-dir ...111 101 101 ...rwx r-x r-x ===== intro to shell local variables! * see 2021 revision of course text, Section II, Chapter 13, sections 13.1 - 13.5 * you CAN declare a local variable by just setting a name to a value, or optionally you can put declare in front of it BUT!!!! you can NOT have ANY blanks to the immediate LEFT or RIGHT of the assignment statement, = !!!!!! $> declare cow=moo $> animal=cow * when you USE the local variable, you PRECEDE its name with a $ (but if you RESET it, don't use a $ in that assignment statement...!) $> echo $cow moo $> echo $animal cow $> animal=kitty $> echo $animal kitty # various bugs demo'd! $> echo cow cow $> echo $cow moo $> $cow=holstein -bash: moo=holstein: command not found $> declare oopsie = 3 -bash: declare: `=': not a valid identifier -bash: declare: `3': not a valid identifier $> declare oopsie= 3 -bash: declare: `3': not a valid identifier $> declare oopsie =3 -bash: declare: `=3': not a valid identifier $> declare oopsie=3 $> echo $oopsie 3 * what's the scope of a local variable? * created interactively? I *think* it is the lifetime of that particular shell process it was created within * created within a bash script? I *think* it is from where it is declared until the end of that script * see little shell script make-local-looky, which uses a local variable to help to make a local directory named looky within its present working directory when it is called