User Tools

Site Tools


os_cp:intro

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
os_cp:intro [2023/02/27 12:41]
jkonczak
os_cp:intro [2026/03/12 00:57] (current)
jkonczak [Glob names and wildcards]
Line 22: Line 22:
 POSIX - a standard (published by IEEE and The Open Group) for operating system interface and environment,​ predominantly built to unify Unix-like systems POSIX - a standard (published by IEEE and The Open Group) for operating system interface and environment,​ predominantly built to unify Unix-like systems
  
-<​html>​<small></​html>+<​small>​
  
-GNU/Linux+Linux, ​GNU/Linux, Linux distribution…
   * [[https://​www.gnu.org/​gnu/​gnu.html|GNU]] is a collection of free software that altogether forms an operating system supplied with a broad choice of user applications [[https://​www.gnu.org/​manual/​blurbs.html]]   * [[https://​www.gnu.org/​gnu/​gnu.html|GNU]] is a collection of free software that altogether forms an operating system supplied with a broad choice of user applications [[https://​www.gnu.org/​manual/​blurbs.html]]
   * the kernel of GNU, [[https://​www.gnu.org/​software/​hurd/​|Hurd]],​ has never been fit enough for the task   * the kernel of GNU, [[https://​www.gnu.org/​software/​hurd/​|Hurd]],​ has never been fit enough for the task
   * therefore GNU software is usually run on top of Linux kernel ​   * therefore GNU software is usually run on top of Linux kernel ​
-  * most Linux distributions,​ apart form GNU software, has also a multitude of other software (not necessarely ​free or open source)+  * most Linux distributions,​ apart form GNU software, has also a multitude of other software (not necessarily ​free or open source) 
 +  * some Linux distributions base on free and/or open source software that is neither GNU software nor uses GNU licenses
  
-<​html>​</small></​html>+</​small>​
  
 ==== Shell and vital utilities ==== ==== Shell and vital utilities ====
Line 59: Line 60:
   * Apple operating systems (e.g. MacOS) ship with modified BSD tools [[https://​opensource.apple.com/​releases/​|[1]]] [[https://​github.com/​apple-oss-distributions/​file_cmds|[2]]] [[https://​github.com/​apple-oss-distributions/​text_cmds|[3]]]   * Apple operating systems (e.g. MacOS) ship with modified BSD tools [[https://​opensource.apple.com/​releases/​|[1]]] [[https://​github.com/​apple-oss-distributions/​file_cmds|[2]]] [[https://​github.com/​apple-oss-distributions/​text_cmds|[3]]]
   * Embedded / resource restrained systems often use [[https://​www.busybox.net/​downloads/​BusyBox.html|BusyBox]]   * Embedded / resource restrained systems often use [[https://​www.busybox.net/​downloads/​BusyBox.html|BusyBox]]
-  * Android uses [[https://​www.landley.net/​toybox/​|toybox]] [[https://​cs.android.com/​android/​platform/​superproject/​+/​master:​external/​toybox/​toys/​posix/​|[4]]]+  * Android uses [[https://​www.landley.net/​toybox/​|toybox]] [[https://​cs.android.com/​android/​platform/​superproject/main/+/main:​external/​toybox/​toys/​posix/​|[4]]]
   * For more, see [[https://​wiki.archlinux.org/​title/​core_utilities]]   * For more, see [[https://​wiki.archlinux.org/​title/​core_utilities]]
 <​html></​small></​html>​ <​html></​small></​html>​
  
-POSIX standarizes both the [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​V3_chap02.html|shell]] +POSIX standarizes both the [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html|shell]] 
-and its vital [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​contents.html|utilities]].+and its vital [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​contents.html|utilities]].
  
 ==== Accessing the shell ==== ==== Accessing the shell ====
Line 78: Line 79:
   * terminals bundled with some Linux desktop environment:​ [[https://​docs.xfce.org/​apps/​terminal/​start|xfce4-terminal]],​ [[https://​en.wikipedia.org/​wiki/​GNOME_Terminal|GNOME Terminal]], [[https://​konsole.kde.org/​|konsole]]   * terminals bundled with some Linux desktop environment:​ [[https://​docs.xfce.org/​apps/​terminal/​start|xfce4-terminal]],​ [[https://​en.wikipedia.org/​wiki/​GNOME_Terminal|GNOME Terminal]], [[https://​konsole.kde.org/​|konsole]]
   * default MacOS [[https://​en.wikipedia.org/​wiki/​Terminal_(macOS)|Terminal]]   * default MacOS [[https://​en.wikipedia.org/​wiki/​Terminal_(macOS)|Terminal]]
-  * drop-down terminals: [[https://​apps.kde.org/​yakuake/​|yakuake]] / [[http://guake-project.org/|guake]] / [[https://​github.com/​lanoxx/​tilda|tilda]]+  * drop-down terminals: [[https://​apps.kde.org/​yakuake/​|yakuake]] / [[https://guake.github.io/|guake]] / [[https://​github.com/​lanoxx/​tilda|tilda]]
  
 <​html></​small></​html>​ <​html></​small></​html>​
Line 94: Line 95:
 The basic command to log into a shell on a remote system is: The basic command to log into a shell on a remote system is:
 \\ \\
-''​ssh //​user//​@//​host//''​+**''​ssh //​user//​@//​host//''​**
 \\ \\
 where ''​user''​ is the user name and ''​host''​ is the name or address of the target device. where ''​user''​ is the user name and ''​host''​ is the name or address of the target device.
 \\ \\
-For instance, if used ''​john''​ would like to log into a computer named ''​polluks.put.poznan.pl'',​ he would have to input \\ ''​ssh john@polluks.put.poznan.pl''​.+For instance, if the user ''​john''​ would like to log into a computer named ''​polluks.cs.put.poznan.pl'',​ he would have to input \\ ''​ssh john@polluks.cs.put.poznan.pl''​
 +\\ 
 +To terminate a ssh session, one can use either ''​logout''​ or ''​exit''​ command, or use //Ctrl// + //d// key combination on empty prompt line((//​Ctrl//​ + //d// actually indicates //​end-of-file//​ condition.)).
  
 Currently all major operating systems (including Windows) provide ''​ssh''​ command by default. Currently all major operating systems (including Windows) provide ''​ssh''​ command by default.
  
-<​html>​<small></​html>+<​small>​
  
 Secure SHell encrypts all traffic. Its predecessor – telnet – sends all data (including passwords) in plaintext. Secure SHell encrypts all traffic. Its predecessor – telnet – sends all data (including passwords) in plaintext.
  
-<html></small></html>+Upon password authentication,​ the client must send the password to the server. 
 +\\ 
 +It is vital for security to confirm the authenticity of the server – the client 
 +must verify that it does not contact a rogue server that can learn the password 
 +([[https://​docs.ssh-mitm.at/​user_guide/​authentication.html#​id2|ready-to-go tool]]) 
 +and/or hijack the session. 
 +\\ 
 +[[https://​en.wikipedia.org/​wiki/​Public-key_cryptography|Asymmetric cryptography]] 
 +is used to this end: the server has a (secret) private key, and upon each 
 +connection it sends the public key to the client, and the client verifies whether 
 +the public key pairs with the private. 
 +\\  
 +Hence, upon the first connection to a new server the SSH client program requests 
 +the  user to verify the authenticity of the public key and stores the key (in 
 +OpenSSH in ''​~/​.ssh/​known_hosts''​) to verify it automatically upon subsequent 
 +connections. 
 + 
 +</small>
  
 ~~Exercise.#​~~ Run a terminal emulator. Execute command ''​date''​ and ''​echo $SHELL''​ within. ​ ~~Exercise.#​~~ Run a terminal emulator. Execute command ''​date''​ and ''​echo $SHELL''​ within. ​
 +
 +~~Exercise.#​~~ Execute command ''​sleep 1h''​ and interrupt it by pressing //Ctrl + c//.
  
 ~~Exercise.#​~~ Switch to second virtual console and log in. Execute ''​pwgen''​. Return to graphical console. ​ ~~Exercise.#​~~ Switch to second virtual console and log in. Execute ''​pwgen''​. Return to graphical console. ​
  
-~~Exercise.#​~~ Use SSH to access ''​polluks.cs.put.poznan.pl''​.+~~Exercise.#​4~~a Use SSH to access your neighbour'​s computer. 
 +\\ 
 +<​small>​~~Exercise.#​4~~b ​Use SSH to access ''​polluks.cs.put.poznan.pl''​.</​small>​
  
 ===== Getting help ===== ===== Getting help =====
Line 118: Line 142:
 ==== System manual and '​help'​ switch ==== ==== System manual and '​help'​ switch ====
  
-Most commands will display help when run with ''​--help''​ argument. Some commands also use ''​-h''​ for this.+Most commands will display help when run with **''​--help''​** argument. Some commands also use ''​-h''​ for this.
  
 ~~Exercise.#​~~ Display help for ''​cat''​ and ''​bat''​ commands by running them with help option. <​html><​small></​html>​(NB:​ ''​bat''​ is installed by default only in some Linux distros.)<​html></​small></​html>​ ~~Exercise.#​~~ Display help for ''​cat''​ and ''​bat''​ commands by running them with help option. <​html><​small></​html>​(NB:​ ''​bat''​ is installed by default only in some Linux distros.)<​html></​small></​html>​
  
-Usually ​together with a program comes with a set of system manual pages. The pages can be displayed using the ''​man //​pagename//''​ command.+Usually a program comes together ​with a set of system manual pages. The pages can be displayed using the **''​man //​pagename//''​** command. To leave the manual, type ''​q''​.
  
 ~~Exercise.#​~~ Display manual page for ''​timeout''​ command. ~~Exercise.#​~~ Display manual page for ''​timeout''​ command.
- 
  
 Manual pages are organized into sections. Use ''​man man''​ to learn about the standard sections. Manual pages are organized into sections. Use ''​man man''​ to learn about the standard sections.
Line 131: Line 154:
 Page names are unique within a section, but there may be pages with the same name in different sections. Page names are unique within a section, but there may be pages with the same name in different sections.
 \\ \\
-You may use the ''​whatis //​pagename//'' ​command ​to learn which sections contain given page name and display the full page title.+You may type **''​whatis //​pagename//''​** or <​small>''​man -f //​pagename//''</​small> ​to learn which sections contain given page name and display the full page title.
  
 ~~Exercise.#​~~ List all pages that are named ''​time''​. ~~Exercise.#​~~ List all pages that are named ''​time''​.
  
-To select a page from a given section, one has to use ''​man //section// //​pagename//''​ syntax. ​+To select a page from a given section, one has to use ''​man //section// //​pagename//''​ syntax, e.g., ''​man 2 write''​.
  
 ~~Exercise.#​~~ The ''​man''​ itself is described on two manual pages. Display both. What information is contained in each one? ~~Exercise.#​~~ The ''​man''​ itself is described on two manual pages. Display both. What information is contained in each one?
  
 ''​man''​ uses another tool, called ''​less'',​ to actually display the manual pages. ''​less''​ will be discussed in details later.\\ ''​man''​ uses another tool, called ''​less'',​ to actually display the manual pages. ''​less''​ will be discussed in details later.\\
-To search for text in ''​less'',​ one can type ''/''​ followed by the search term and //Enter//. Next / previous ​ occurrence of the search term can be found by typing ''​n''​ / ''​N''​. To jump to the beginning of the document press ''​g''​. ''​h''​ displays a summary of ''​less''​ commands.+To search for text in ''​less'',​ one can type **''/''​** followed by the search term and //Enter//. Next / previous ​ occurrence of the search term can be found by typing ​**''​n''​** / ''​N''​. To jump to the beginning of the document press ''​g''​. ''​h''​ displays a summary of ''​less''​ commands.
  
 ~~Exercise.#​~~ Display manual page for ''​bash''​ and search for ''​printf''​ there. Then, search for explanation of ''​dirs''​ command. ~~Exercise.#​~~ Display manual page for ''​bash''​ and search for ''​printf''​ there. Then, search for explanation of ''​dirs''​ command.
Line 146: Line 169:
 <​html><​small></​html>​ <​html><​small></​html>​
  
-For searching within manual there is also the ''​apropos //​what//'' ​command ​that searches ​within page names and titles.+For searching within manual there are also the ''​apropos //​what//'' ​and ''​man -k //​what//''​ commands ​that search ​within page names and titles.
  
 Apart from ''​man'',​ there is an alternative (and less popular) documentation system called ''​info''​. To see an Info page, type ''​info //​name//''​. Some programs ship with a more detailed Info document than manual page. Apart from ''​man'',​ there is an alternative (and less popular) documentation system called ''​info''​. To see an Info page, type ''​info //​name//''​. Some programs ship with a more detailed Info document than manual page.
Line 177: Line 200:
 For instance, in ''​find -amin N''​ and ''​find -anewer FILE''​ the ''​N''​ and ''​FILE''​ are such placeholders:​ ''​N''​ must be replaced by number of minutes, and ''​FILE''​ must be replaced by a name of a file. For instance, in ''​find -amin N''​ and ''​find -anewer FILE''​ the ''​N''​ and ''​FILE''​ are such placeholders:​ ''​N''​ must be replaced by number of minutes, and ''​FILE''​ must be replaced by a name of a file.
  
-~~Exercise.#​~~ Run: \\ ''​man zip''​ and review the SYNOPSIS, \\ ''​more --help''​ and explain its syntax \\ ''​taskset -h''​ and explain its syntax ​+~~Exercise.#​~~ Run: \\ ''​man zip''​ and review the SYNOPSIS, \\ ''​findmnt ​--help''​ and explain its syntax \\ ''​taskset -h''​ and explain its syntax ​
  
 ==== Autocompletion ==== ==== Autocompletion ====
  
-Almost any shell supports autocompletion. It is invoked by pressing //TAB// key.\\+Almost any shell supports autocompletion. It is invoked by pressing ​**//TAB//** key.\\
 Autocompletion is supposed to type the rest of a word for you, and does so if only one possibility is found.\\ Autocompletion is supposed to type the rest of a word for you, and does so if only one possibility is found.\\
 If autocompletion recognizes multiple possibilities,​ it does nothing. If one presses //TAB// key again, most autocompletion procedures display all possibilities. If autocompletion recognizes multiple possibilities,​ it does nothing. If one presses //TAB// key again, most autocompletion procedures display all possibilities.
Line 187: Line 210:
 Autocompletion implementation differs across shells. Many shells support context-aware helpers. Autocompletion implementation differs across shells. Many shells support context-aware helpers.
  
-~~Exercise.#​~~ Type ''​bad''​ and press //TAB//. Type ''​ba''​ and press //TAB// twice.+~~Exercise.#​~~ Type ''​vu''​ and press //TAB//. Type ''​ba''​ and press //TAB// twice.
  
 ~~Exercise.#​~~ Type ''​man --''​ and press //TAB// twice. Type ''​man fs''​ and press //TAB// twice. ~~Exercise.#​~~ Type ''​man --''​ and press //TAB// twice. Type ''​man fs''​ and press //TAB// twice.
Line 195: Line 218:
 ==== File tree ==== ==== File tree ====
  
-In Unix-like systems all files and directories are organized in a tree, i.e., any two files share the same top-level directory called [[https://​en.wikipedia.org/​wiki/​Root_directory|root directory]]. The path to root directory is ''/''​. \\+In Unix-like systems all files and directories are organized in a tree, i.e., any two files share the same top-level directory called [[https://​en.wikipedia.org/​wiki/​Root_directory|root directory]]. The path to root directory is **''/''​**. \\
 Filesystems other than the root one (e.g., other partitions, compact disks, flash drives), are //mounted// inside a selected directory located within ''/''​ (rather than being a separate file hierarchy). Filesystems other than the root one (e.g., other partitions, compact disks, flash drives), are //mounted// inside a selected directory located within ''/''​ (rather than being a separate file hierarchy).
  
 A path is a chain of names separated by ''/''​. \\ A path is a chain of names separated by ''/''​. \\
-''​.''​ stands for current directory and ''​..''​ stands for parent directory. \\+**''​.''​** stands for current directory and **''​..''​** stands for parent directory. \\
  
 A path that starts with ''/''​ is called absolute. A path that is not absolute is called relative. A path that starts with ''/''​ is called absolute. A path that is not absolute is called relative.
Line 205: Line 228:
 In Unix-like system each process has its working directory. Relative paths are resolved relative to the working directory. ​ In Unix-like system each process has its working directory. Relative paths are resolved relative to the working directory. ​
  
-Each user has a [[https://​en.wikipedia.org/​wiki/​Home_directory|home directory]]. Shell (and some other programs) replaces the word ''​~''​ with home directory of the current user. <​html><​small></​html>''​~user''​ stands for home directory of ''​user'',​ so ''​~/​x/​a.txt''​ is within home directory of current user, and ''​~x/​b.txt''​ is within home directory of user ''​x''​.<​html></​small></​html>​+Each user has a [[https://​en.wikipedia.org/​wiki/​Home_directory|home directory]]. Shell (and some other programs) replaces the word **''​~''​** with home directory of the current user. <​html><​small></​html>''​~user''​ stands for home directory of ''​user'',​ so ''​~/​x/​a.txt''​ is within home directory of current user, and ''​~x/​b.txt''​ is within home directory of user ''​x''​.<​html></​small></​html>​
  
  
 ==== Listing directory contents ==== ==== Listing directory contents ====
  
-The command ''​ls [//​dir//​]''​ lists file in directory ''​dir''​. When run with no arguments, it lists the current working directory.+The command ​**''​ls [//​dir//​]''​** lists file in directory ''​dir''​. When run with no arguments, it lists the current working directory.
 \\ \\
-By default ''​ls''​ does not list hidden files. The ''​-a'' ​and ''​--all'' ​switch changes this behaviour.+By default ''​ls''​ does not list hidden files. The **''​-a''​** switch changes this behaviour.
 \\ \\
-Switch ''​-l'' ​/ ''​--list'' ​prints list of files with details such as file owner, size, modification date, etc.+Switch ​**''​-l''​** prints list of files with details such as file owner, size, modification date, etc.
  
 ~~Exercise.#​~~ List files in ''/​usr/​share/​zoneinfo/''​ and ''​../​../​../​../​../​bin''​. ​ ~~Exercise.#​~~ List files in ''/​usr/​share/​zoneinfo/''​ and ''​../​../​../​../​../​bin''​. ​
Line 234: Line 257:
 ==== Changing working directory ==== ==== Changing working directory ====
  
-To print the working directory one can execute the ''​pwd''​ command.+To print the working directory one can execute the **''​pwd''​** command.
  
 ~~Exercise.#​~~ Check in which directory you end up upon logging into the system. ~~Exercise.#​~~ Check in which directory you end up upon logging into the system.
  
-To change directory the command ''​cd [//​target//​]''​ is used. If no target is provided, ''​cd''​ changes current directory to the home directory.+To change directory the command ​**''​cd [//​target//​]''​** is used. If no target is provided, ''​cd''​ changes current directory to the home directory.
 \\ \\
-<​html><​small></​html>​If ''​-''​ is uses as the target, the directory is changed to the previously visited. <​html></​small></​html>​+<​html><​small></​html>​If ''​-''​ is used as the target, the directory is changed to the previously visited. <​html></​small></​html>​
  
 ~~Exercise.#​~~ Enter ''​.config''​ directory (located in your home directory) and list files within. ~~Exercise.#​~~ Enter ''​.config''​ directory (located in your home directory) and list files within.
Line 256: Line 279:
 <​html></​small></​html>​ <​html></​small></​html>​
  
-==== Glob names and wildcards ​====+==== Wildcard, regex, … ====
  
-Upon parsing the user input, the shell attempts to replace any word containing wildcard characters ''​*'',​ ''?''​ and expressions in square brackets ''​[…]''​. A word that contains such wildcards is called [[https://​en.wikipedia.org/​wiki/​Glob_(programming)|glob]].+<​small>​
  
-''​*''​ expands to any text, ''?''​ expand to single character, ''​[ace]''​ expands to either ''​a'',​ or ''​c'',​ or ''​e'',​ and ''​[f-h]''​ expands to either ''​f'',​ or ''​g'',​ or ''​h''​. +In computer science patterns/expressions ​that describe ​the expected data can be 
- +expressed ​and used to match against ​some datausually to find fitting data or 
-If there is at least one file that matches the glob, the shell replaces the glob with all filenames that match. If no file matches, then the glob is left unaltered. +check if the data matches the description.
- +
- +
- +
-~~Exercise.#​~~ Change directory to ''​/usr/​bin/''​ directory. List all files that end with ''​cat''​. +
- +
-~~Exercise.#​~~ List all files that end with ''​cat''​ in ''/​usr/​bin/''​ while being in your home directory. +
- +
-~~Exercise.#​~~ List all files that are in the ''/​usr/​bin/''​ directory that have names consisting of two chatacters. +
- +
-~~Exercise.#​~~ List contents of ''/​usr/​share/​zoneinfo/'' ​and its subdirectories using a single command. +
- +
-~~Exercise.#​~~ List all files named ''​UTC''​ that are in any subdirectory of ''/​usr/​share/​zoneinfo/''​. +
- +
-~~Exercise.#​~~ List all files starting with ''​L''​ that are in any subdirectory of ''/​usr/​share/​zoneinfo/''​. +
- +
-<​html><​small></​html>​ +
- +
-~~Exercise.#​~~ List all files starting with ''​F''​ or ''​H'' ​ that are in any subdirectory of ''/​usr/​share/​zoneinfo/''​. Use a single glob. +
- +
-~~Exercise.#​~~ Navigate ​to ''/​usr/​bin''​ and attempt to execute ''​ls*''​. What has happened? +
- +
-<​html></​small></​html>​ +
- +
- +
-==== Copying, moving and erasing files ==== +
- +
-<​html><​small></​html>​ +
- +
-To create an empty file, you can use ''​touch //​file//''​. To create file with some contentsyou can use ''​echo //​contents//​ > //​file//''​. The ''​touch''​ and ''​echo''​ commands as well as meaning of ''>''​ will be explained later on. +
- +
-To display a file, use ''​cat //​filename//''​. +
- +
-<​html></​small></​html>​ +
- +
-=== Directories === +
- +
-''​mkdir //​dir//''​ creates a new directory.+
 \\ \\
-<​html><​small><​/html> +For instance, ​//lines beginning with a word followed by an equals sign// might 
-''​mkdir -p //dir1/dir2/​dir3//''​ creates directory ''​dir1'',​ and directory ''​dir2''​ within ''​dir1'',​ and ''​dir3''​ within ''​dir1/​dir2''​. +be written as a regular expression ​''​^\w+=''​.
-With the ''​-p'' ​switch ''​mkdir''​ does not print an error if a directory already exists. +
-<​html></​small></​html>​+
  
-To remove an empty directory one can use ''​rmdir ​//​dir//''​.+There are countless syntaxes and implementations of such patterns/expressions.
  
-~~Exercise.#​~~ Create ​the following directory tree: +In the shell, [[https://en.wikipedia.org/​wiki/​Wildcard_character|wildcards]] 
-  ​+and [[https://​en.wikipedia.org/wiki/​Regular_expression|regular expressions]] 
-  ​├── foo +are commonplace.
-  │   ├── baz +
-  │   │   └── bar +
-  │   └── bar +
-  └── foobaz +
-      └── bar +
-  +
-~~Exercise.#~~ Remove ''​foo/baz''​ directory+
  
-=== Hard and soft links === +Syntax ​and implementation ​of both wildcards ​and regexes ​is language/application 
- +specific.
-Multiple directory entries can point to the same file. This is called a [[https://​en.wikipedia.org/​wiki/​Hard_link|hard link]]. \\ +
-A directory entry can also point to another directory entry. ​ This is called a [[https://​en.wikipedia.org/​wiki/​Symbolic_link|soft link or symbolic link]] (usually abbreviated as symlink). +
- +
-All Linux filesystems [[https://​​en.wikipedia.org/​​wiki/​​Comparison_of_file_systems#​​File_capabilities|support]] hard links for ordinary files, and soft links to arbitrary path (e.g., a file or a directory). +
- +
-To create a hard link, one can use ''​ln //source// //​destination//''​.\\ +
-To create a symlink, one can use ''​ln -s //source// //​destination//''​. +
- +
-~~Exercise.#​~~ Create file ''​file1''​ with some contents. Create a hard link called ''​file2'' ​of the file ''​file1''​. Modify ''​file2''​. Display ''​file1''​. +
- +
-<​html><​small></​html>​ +
- +
-~~Exercise.#​~~ The ''​ls''​ command can display for each file its link count. Discover how to do it. +
- +
-The disk space used by a file is reclamied once link count drops to 0 (all directory entries that link to the file are erased) ​and the file is no longer open in any process. +
- +
-<​html><​/small></​html>​ +
- +
-~~Exercise.#​~~ Create in your home directory a symlink called ''​TMP''​ pointing to ''/​tmp''​. Change directory to ''​TMP''​. What does ''​pwd''​ output? +
- +
-~~Exercise.#​~~ Create in your home directory a symlink called ''​loop''​ that points to your home directory. Enter it. And enter it again. +
- +
-~~Exercise.#​~~ Create a symlink to a non-existent path. List the directory containing it. +
- +
-<​html><​small></​html>​ +
- +
-The ''​readlink [-f] //​target//''​ command resolves all symlinks and prints a [[https://​en.wikipedia.org/​wiki/​Canonicalization|canonical]] path. +
- +
-The Windows NTFS filesystem supports links as well. Creating the links is possible e.g., with [[https://​learn.microsoft.com/​en-us/​windows-server/​administration/​windows-commands/​mklink|mklink]] command. +
- +
-<​html></​small></​html>​ +
- +
-=== Copying and moving files === +
- +
-To copy files, one can use the ''​cp''​ command. To move (or rename) file, one can use the ''​mv''​ command. +
- +
-The basic syntax is ''​cp/​mv //​source//​… //​destination//''​. \\ +
-Multiple source files can be provided if the destination is a directory. \\ +
-If the destination is a file, it will be overwritten without warning <​html><​small></​html>​(unless ''​-i''​ or ''​-n''​ switch is used)<​html></​small></​html>​. +
- +
-<​html><​small></​html>​ +
- +
-By default ''​cp''​ will deny copying a directory. Use ''​-r''​ to copy a directory recursively. +
- +
-<​html></​small></​html>​ +
- +
-When ''​cp''​ copies a file, it creates a new file with current date, default permissions,​ etc.+
 \\ \\
-To copy recursively,​ and preserve datespermissions and more, one can use the ''​-a'' ​switch (that stands for ''​--archive''​).+The shell uses syntax summarized e.g.in 
 +''​[[https://​man7.org/​linux/​man-pages/​man7/​glob.7.html|man 7 glob]]'' ​and  
 +''​[[https://​man7.org/​linux/​man-pages/​man7/​regex.7.html|man 7 regex]]''​
  
-<​html><​small>​</html>+</small>
  
-With the ''​-l''​ switch ''​cp''​ creates a hard link instead of copying a file. Notice that this can be combined with ''​--recursive''​.+==== Glob names and wildcards ====
  
-<​html><​/small><​/html>+Upon parsing the user input, the shell attempts to replace with filenames any 
 +word containing wildcard characters **''​*''​**,​ **''?''​** and expressions in 
 +square brackets **''​[…]''​**. A word that contains such wildcards is called 
 +[[https://en.wikipedia.org/​wiki/​Glob_(programming)|glob]].
  
-~~Exercise.#​~~ Copy, using a single ​commandthe files ''​/​​etc/​​os-release''​​ and ''​/​​etc/​​SUSE-brand''​​ to the current working directory.+''​*''​ expands to any text\\ 
 +''?''​ expand to single ​character\\ 
 +''​[ace]''​ expands to either ''​a''​or ''​c''​, or ''​e''​ \\ 
 +''​[f-h]'' ​expands ​to either ''​f'',​ or ''​g'',​ or ''​h''​
  
-~~Exercise.#~~ Run ''​mkdir someDir && for F in file{1..3}; do echo $RANDOM$RANDOM > someDir/$F; done''​ to create ''​someDir''​ directory with three files inside.+If there is at least one file that matches the glob, the shell replaces the glob with all filenames that matchIf no file matches, then the glob is left unaltered.
  
-~~Exercise.#​~~ Copy the ''​someDir''​ directory recursively under a new name. 
  
-~~Exercise.#​~~ Move the newly copied directory into the ''​someDir''​ directory. 
  
-~~Exercise.#​~~ ​Rename ​''​someDir'' ​to a name of your choice.+~~Exercise.#​~~ ​Change directory to ''​/​usr/​bin/''​ directory. List all files that end with ''​cat''​.
  
-<​html><​small><​/html>+~~Exercise.#​~~ Change directory to your home directory. From there, list all files that end with ''​cat''​ in ''​/usr/​bin/''​.
  
-~~Exercise.#​~~ ​Copy the renamed directory with ''​-al''​ switches. Modify a selected file with any of the directories. Which files changed contents? <​html><​small><​/html> (You can ''​cat //filename//'' ​or display modification dates with second accuracy using ''​ls -l --time-style=+%H:​%M:​%S …''​ or ''​tree -D --timefmt=%H:​%M:​%S …''​)<​html></​small></​html>​+~~Exercise.#​~~ ​List all files that are in the ''/​usr/bin/'' ​directory that have names consisting of two characters.
  
-<​html><​/small><​/html>+~~Exercise.#​~~ List contents of ''​/usr/share/​zoneinfo/''​ and its subdirectories using a single command.
  
-=== Copying ​files to/from a remote machine ===+~~Exercise.#​~~ List all files named ''​UTC''​ that are in any subdirectory of ''​/usr/​share/​zoneinfo/''​.
  
-It is possible to copy files via SSHWhenever one has SSH access to a remote machine, one can copy files with ''​scp'' ​command. \\ +~~Exercise.#~~ List all files starting ​with ''​L'' ​that are in any subdirectory of ''/​usr/share/zoneinfo/''​.
-''​scp''​ accepts ​''//​file//'' ​as file path on local machine and ''//​user//​@//​host//://​file//''​ as a file path on a remote machine. Remote relative paths are relative to home directory.\\ +
-''​scp''​ accepts the ''​-r''​ switch for copying recursively.+
  
 <​html><​small></​html>​ <​html><​small></​html>​
  
-Microsoft Windows now ships with ''​scp'' ​command, but usually [[https://en.wikipedia.org/wiki/Comparison_of_FTP_client_software#​Protocol_support|various file commanders]] are more convenient.+~~Exercise.#​~~ List all files starting ​with ''​F''​ or ''​H'' ​ that are in any subdirectory of ''/​usr/share/zoneinfo/''​. Use a single glob.
  
-<​html></​small></​html>​ +~~Exercise.#​~~ ​Navigate ​to ''/​usr/bin''​ and attempt ​to execute ​''​ls*''​. ​What has happened?
- +
-Most SSH servers enable also the SFTP protocol that allows copying files more conveniently.\\ +
-''​sftp //​user//​@//​host//''​ launches sftp command line. You can use ''​ls''​ and ''​cd''​ to navigate the remote filesystem, and ''​get''​ and ''​put''​ to copy files. Type ''​help''​ to see all supported commands. +
- +
-~~Exercise.#​~~ ​Create a file in ''/​tmp''​ directory in your computer. Copy the file to home directory of user ''​student''​ on another computer. +
- +
-~~Exercise.#​~~ Copy the file to ''/​tmp''​ directory on another computer. +
- +
-~~Exercise.#​~~ Copy the file to ''​/tmp'' ​directory on another computer using ''​sftp''​. +
- +
-<​html><​small></​html>​ +
-=== Rsync === +
- +
-The ''​[[https://​en.wikipedia.org/​wiki/​Rsync|rsync]]''​ program is widely used to copy files and directories. It efficiently compares source files with destination files and copies only the differences. It can copy data to/from remote machines, and can compress the data sent via network to increase throughput. ​''​rsync'' ​is also commonly used to make backups.+
  
 <​html></​small></​html>​ <​html></​small></​html>​
- 
-=== Removing files === 
- 
-The program that removes files is called ''​rm''​. 
- 
-''​rm''​ by default won't remove directories (regardless if empty) and write-protected files. 
- 
-To remove a directory with ''​rm''​ (recursively with their contents) one has to add a ''​-r''​ switch. 
- 
-To remove write-protected files (and stop printing warnings whenever a file to be removed already does not exist) the switch ''​-f''​ (''​--force''​) can be used. 
- 
-A misused ''​rm -rf …''​ command is a notorious source of data loss. Beware especially of asterisk and what it expands to. 
- 
-''​rm''​ accepts ''​-I''​ and ''​-i''​ switches that ask for confirmation. ''​-I''​ asks once upon attempt to remove multiple files, and ''​-i''​ asks upon each file. 
- 
-~~Exercise.#​~~ Create multiple files with ''​touch file_{a..z}''​. \\ Remove all files with a single ''​rm''​ command with 1) no switches 2) ''​-f''​ switch 3) ''​-I''​ switch 4) ''​-i''​ switch. 
- 
-~~Exercise.#​~~ Repeat the remove command from the previous exercise when the files are gone. \\ Then repeat the command again with ''​-f''​ switch. 
- 
-~~Exercise.#​~~ Create a directory and remove it with ''​rm''​. 
  
  
os_cp/intro.1677498097.txt.gz · Last modified: 2023/02/27 12:41 by jkonczak