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/03/01 11:38]
jkonczak [Autocompletion]
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 98: Line 99:
 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.cs.put.poznan.pl'',​ he would have to input \\ ''​ssh john@polluks.cs.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.#​~~ 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 124: Line 146:
 ~~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. To leave the manual, type ''​q''​.+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.
Line 132: 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?
Line 147: 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 178: 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 ====
Line 213: Line 235:
 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 241: Line 263:
 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 257: Line 279:
 <​html></​small></​html>​ <​html></​small></​html>​
  
-==== Glob names and wildcards ==== +==== Wildcardregex, … ====
- +
-Upon parsing the user inputthe 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]]. +
- +
-''​*''​ 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''​. +
- +
-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. +
- +
- +
- +
-~~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 contents, you 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 ===+<​small>​
  
-**''​mkdir ​//​dir//''​** creates a new directory.+In computer science patterns/expressions that describe the expected data can be 
 +expressed and used to match against some data, usually to find fitting data or 
 +check if the data matches the description.
 \\ \\
-<​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 === +
- +
-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.+Syntax and implementation of both wildcards and regexes is language/​application 
 +specific.
 \\ \\
-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.1677667120.txt.gz · Last modified: 2023/03/01 11:38 by jkonczak