diff --git a/collections/system_administrators/computer_it_basics/cli_scripts_basics.md b/collections/system_administrators/computer_it_basics/cli_scripts_basics.md index dec08b2..c6f591b 100644 --- a/collections/system_administrators/computer_it_basics/cli_scripts_basics.md +++ b/collections/system_administrators/computer_it_basics/cli_scripts_basics.md @@ -24,6 +24,7 @@ - [Become the superuser (su) on Linux](#become-the-superuser-su-on-linux) - [Exit a session](#exit-a-session) - [Know the current user](#know-the-current-user) + - [See the path of a package](#see-the-path-of-a-package) - [Set the path of a package](#set-the-path-of-a-package) - [See the current path](#see-the-current-path-1) - [Find the current shell](#find-the-current-shell) @@ -127,11 +128,11 @@ You can also set a number of counts with `-c` on Linux and MAC and `-n` on Windo Here are the steps to install [Go](https://go.dev/). * Install go - * ``` + ``` sudo apt install golang-go ``` * Verify that go is properly installed - * ``` + ``` go version ``` @@ -142,19 +143,19 @@ Here are the steps to install [Go](https://go.dev/). Follow those steps to install [Brew](https://brew.sh/) * Installation command from Brew: - * ``` + ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` * Add the path to the **.profile** directory. Replace by your username. - * ``` + ``` echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home//.profile ``` * Evaluation the following: - * ``` + ``` eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" ``` * Verify the installation - * ``` + ``` brew doctor ``` @@ -163,27 +164,27 @@ Follow those steps to install [Brew](https://brew.sh/) ### Brew basic commands * To update brew in general: - * ``` + ``` brew update ``` * To update a specific package: - * ``` + ``` brew update ``` * To install a package: - * ``` + ``` brew install ``` * To uninstall a package: - * ``` + ``` brew uninstall ``` * To search a package: - * ``` + ``` brew search ``` * [Uninstall Brew](https://github.com/homebrew/install#uninstall-homebrew) - * ``` + ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" ``` @@ -194,11 +195,11 @@ Follow those steps to install [Brew](https://brew.sh/) Installing Terraform with Brew is very simple by following the [Terraform documentation](https://developer.hashicorp.com/terraform/downloads). * Compile HashiCorp software on Homebrew's infrastructure - * ``` + ``` brew tap hashicorp/tap ``` * Install Terraform - * ``` + ``` brew install hashicorp/tap/terraform ``` @@ -207,27 +208,27 @@ Installing Terraform with Brew is very simple by following the [Terraform docume ### Yarn basic commands * Add a package - * ``` + ``` yarn add ``` * Initialize the development of a package - * ``` + ``` yarn init ``` * Install all the dependencies in the **package.json** file - * ``` + ``` yarn install ``` * Publish a package to a package manager - * ``` + ``` yarn publish ``` * Remove unused package from the current package - * ``` + ``` yarn remove ``` * Clean the cache - * ``` + ``` yarn cache clean ``` @@ -260,11 +261,11 @@ ls -ld .?* You can use **tree** to display the files and organization of a directory: * General command - * ``` + ``` tree ``` * View hidden files - * ``` + ``` tree -a ``` @@ -336,10 +337,10 @@ which On MAC and Linux, you can use **coreutils** and **realpath** from Brew: -* ``` + ``` brew install coreutils ``` -* ``` + ``` realpath file_name ``` @@ -350,11 +351,11 @@ On MAC and Linux, you can use **coreutils** and **realpath** from Brew: You can use either command: * Option 1 - * ``` + ``` sudo -i ``` * Option 2 - * ``` + ``` sudo -s ``` @@ -364,10 +365,10 @@ You can use either command: You can use either command depending on your shell: -* ``` + ``` exit ``` -* ``` + ``` logout ``` @@ -377,7 +378,7 @@ You can use either command depending on your shell: You can use the following command: -* ``` + ``` whoami ``` @@ -387,7 +388,7 @@ You can use the following command: To see the path of a package, you can use the following command: -* ``` + ``` whereis ``` @@ -414,11 +415,11 @@ pwd ### Find the current shell * Compact version - * ``` + ``` echo $SHELL ``` * Detailed version - * ``` + ``` ls -l /proc/$$/exe ``` @@ -427,35 +428,35 @@ pwd ### SSH into Remote Server * Create SSH key pair - * ``` + ``` ssh-keygen ``` * Install openssh-client on the local computer* - * ``` + ``` sudo apt install openssh-client ``` * Install openssh-server on the remote computer* - * ``` + ``` sudo apt install openssh-server ``` * Copy public key - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Create the ssh directory on the remote computer - * ``` + ``` mkdir ~/.ssh ``` * Add public key in the file **authorized_keys** on the remote computer - * ``` + ``` nano ~/.ssh/authorized_keys ``` * Check openssh-server status - * ``` + ``` sudo service ssh status ``` * SSH into the remote machine - * ``` + ``` ssh @ ``` @@ -468,11 +469,11 @@ To enable remote login on a MAC, [read this section](#enable-remote-login-on-mac ### Replace a string by another string in a text file * Replace one string by another (e.g. **old_string**, **new_string**) - * ``` + ``` sed -i 's/old_string/new_string/g' / ``` * Use environment variables (double quotes) - * ``` + ``` sed -i "s/old_string/$env_variable/g" / ``` @@ -529,11 +530,11 @@ date You can use [Dig](https://man.archlinux.org/man/dig.1) to gather DNS information of a website * Template - * ``` + ``` dig ``` * Example - * ``` + ``` dig threefold.io ``` @@ -546,31 +547,31 @@ You can also use online tools such as [DNS Checker](https://dnschecker.org/). We present one of many ways to partition and mount a disk. * Create partition with [gparted](https://gparted.org/) - * ``` + ``` sudo gparted ``` * Find the disk you want to mount (e.g. **sdb**) - * ``` + ``` sudo fdisk -l ``` * Create a directory to mount the disk to - * ``` + ``` sudo mkdir /mnt/disk ``` * Open fstab - * ``` + ``` sudo nano /etc/fstab ``` * Append the following to the fstab with the proper disk path (e.g. **/dev/sdb**) and mount point (e.g. **/mnt/disk**) - * ``` + ``` /dev/sdb /mnt/disk ext4 defaults 0 0 ``` * Mount the disk - * ``` + ``` sudo mount /mnt/disk ``` * Add permissions (as needed) - * ``` + ``` sudo chmod -R 0777 /mnt/disk ``` @@ -583,36 +584,36 @@ We present one of many ways to partition and mount a disk. You can use [gocryptfs](https://github.com/rfjakob/gocryptfs) to encrypt files. * Install gocryptfs - * ``` + ``` apt install gocryptfs ``` * Create a vault directory (e.g. **vaultdir**) and a mount directory (e.g. **mountdir**) - * ``` + ``` mkdir vaultdir mountdir ``` * Initiate the vault - * ``` + ``` gocryptfs -init vaultdir ``` * Mount the mount directory with the vault - * ``` + ``` gocryptfs vaultdir mountdir ``` * You can now create files in the folder. For example: - * ``` + ``` touch mountdir/test.txt ``` * The new file **test.txt** is now encrypted in the vault - * ``` + ``` ls vaultdir ``` * To unmount the mountedvault folder: * Option 1 - * ``` + ``` fusermount -u mountdir ``` * Option 2 - * ``` + ``` rmdir mountdir ``` @@ -623,27 +624,27 @@ To encrypt files, you can use [Veracrypt](https://www.veracrypt.fr/en/Home.html) * Veracrypt GUI * Download the package - * ``` + ``` wget https://launchpad.net/veracrypt/trunk/1.25.9/+download/veracrypt-1.25.9-Ubuntu-22.04-amd64.deb ``` * Install the package - * ``` + ``` dpkg -i ./veracrypt-1.25.9-Ubuntu-22.04-amd64.deb ``` * Veracrypt console only * Download the package - * ``` + ``` wget https://launchpad.net/veracrypt/trunk/1.25.9/+download/veracrypt-console-1.25.9-Ubuntu-22.04-amd64.deb ``` * Install the package - * ``` + ``` dpkg -i ./veracrypt-console-1.25.9-Ubuntu-22.04-amd64.deb ``` You can visit [Veracrypt download page](https://www.veracrypt.fr/en/Downloads.html) to get the newest releases. * To run Veracrypt - * ``` + ``` veracrypt ``` * Veracrypt documentation is very complete. To begin using the application, visit the [Beginner's Tutorial](https://www.veracrypt.fr/en/Beginner%27s%20Tutorial.html). @@ -661,11 +662,11 @@ ifconfig ### See identity and info of IP address * See abuses related to an IP address: - * ``` + ``` https://www.abuseipdb.com/check/ ``` * See general information of an IP address: - * ``` + ``` https://www.whois.com/whois/ ``` @@ -674,124 +675,124 @@ ifconfig ### ip basic commands * Manage and display the state of all network - * ``` + ``` ip link ``` * Display IP Addresses and property information (abbreviation of address) - * ``` + ``` ip addr ``` * Display and alter the routing table - * ``` + ``` ip route ``` * Manage and display multicast IP addresses - * ``` + ``` ip maddr ``` * Show neighbour object - * ``` + ``` ip neigh ``` * Display a list of commands and arguments for each subcommand - * ``` + ``` ip help ``` * Add an address * Template - * ``` + ``` ip addr add ``` * Example: set IP address to device **enp0** - * ``` + ``` ip addr add 192.168.3.4/24 dev enp0 ``` * Delete an address * Template - * ``` + ``` ip addr del ``` * Example: set IP address to device **enp0** - * ``` + ``` ip addr del 192.168.3.4/24 dev enp0 ``` * Alter the status of an interface * Template - * ``` + ``` ip link set ``` * Example 1: Bring interface online (here device **em2**) - * ``` + ``` ip link set em2 up ``` * Example 2: Bring interface offline (here device **em2**) - * ``` + ``` ip link set em2 down ``` * Add a multicast address * Template - * ``` + ``` ip maddr add ``` * Example : set IP address to device **em2** - * ``` + ``` ip maddr add 33:32:00:00:00:01 dev em2 ``` * Delete a multicast address * Template - * ``` + ``` ip maddr del ``` * Example: set IP address to device **em2** - * ``` + ``` ip maddr del 33:32:00:00:00:01 dev em2 ``` * Add a routing table entry * Template - * ``` + ``` ip route add ``` * Example 1: Add a default route (for all addresses) via a local gateway - * ``` + ``` ip route add default via 192.168.1.1 dev em1 ``` * Example 2: Add a route to 192.168.3.0/24 via the gateway at 192.168.3.2 - * ``` + ``` ip route add 192.168.3.0/24 via 192.168.3.2 ``` * Example 3: Add a route to 192.168.1.0/24 that can be reached on device em1 - * ``` + ``` ip route add 192.168.1.0/24 dev em1 ``` * Delete a routing table entry * Template - * ``` + ``` ip route delete ``` * Example: Delete the route for 192.168.1.0/24 via the gateway at 192.168.1.1 - * ``` + ``` ip route delete 192.168.1.0/24 via 192.168.1.1 ``` * Replace, or add, a route * Template - * ``` + ``` ip route replace ``` * Example: Replace the defined route for 192.168.1.0/24 to use device em1 - * ``` + ``` ip route replace 192.168.1.0/24 dev em1 ``` * Display the route an address will take * Template - * ``` + ``` ip route get ``` * Example: Display the route taken for IP 192.168.18.25 - * ``` + ``` ip route replace 192.168.18.25/24 dev enp0 ``` @@ -804,23 +805,23 @@ References: https://www.commandlinux.com/man-page/man8/ip.8.html ### Display socket statistics * Show all sockets - * ``` + ``` ss -a ``` * Show detailed socket information - * ``` + ``` ss -e ``` * Show timer information - * ``` + ``` ss -o ``` * Do not resolve address - * ``` + ``` ss -n ``` * Show process using the socket - * ``` + ``` ss -p ``` @@ -833,19 +834,19 @@ References: https://www.commandlinux.com/man-page/man8/ss.8.html ### Query or control network driver and hardware settings * Display ring buffer for a device (e.g. **eth0**) - * ``` + ``` ethtool -g eth0 ``` * Display driver information for a device (e.g. **eth0**) - * ``` + ``` ethtool -i eth0 ``` * Identify eth0 by sight, e.g. by causing LEDs to blink on the network port - * ``` + ``` ethtool -p eth0 ``` * Display network and driver statistics for a device (e.g. **eth0**) - * ``` + ``` ethtool -S eth0 ``` @@ -866,21 +867,21 @@ cat /sys/class/net//carrier ### Add IP address to hardware port (ethernet) * Find ethernet port ID on both computers - * ``` + ``` ip a ``` * Add IP address (DHCO or static) * Computer 1 - * ``` + ``` ip addr add /24 dev ``` * Computer 2 - * ``` + ``` ip addr add /24 dev ``` * [Ping](#test-the-network-connectivity-of-a-domain-or-an-ip-address-with-ping) the address to confirm connection - * ``` + ``` ping ``` @@ -918,11 +919,11 @@ You can use the following template when you set an IP address manually: You can use the following template to add arguments when running a script: * Option 1 - * ``` + ``` ./example_script.sh arg1 arg2 ``` * Option 2 - * ``` + ``` sh example_script.sh "arg1" "arg2" ``` @@ -930,16 +931,16 @@ You can use the following template to add arguments when running a script: * Write a script * File: `example_script.sh` - * ```bash + ```bash #!/bin/sh echo $@ ``` * Give permissions - * ```bash + ```bash chmod +x ./example_script.sh ``` * Run the script with arguments - * ```bash + ```bash sh example_script.sh arg1 arg2 ``` @@ -947,7 +948,7 @@ You can use the following template to add arguments when running a script: ### Iterate over arguments * Write the script - * ```bash + ```bash # iterate_script.sh #!/bin/bash for i; do @@ -955,16 +956,16 @@ You can use the following template to add arguments when running a script: done ``` * Give permissions - * ``` + ``` chmod +x ./iterate_script.sh ``` * Run the script with arguments - * ``` + ``` sh iterate_script.sh arg1 arg2 ``` * The following script is equivalent - * ```bash + ```bash # iterate_script.sh #/bin/bash for i in $*; do @@ -977,7 +978,7 @@ You can use the following template to add arguments when running a script: ### Count lines in files given as arguments * Write the script - * ```bash + ```bash # count_lines.sh #!/bin/bash for i in $*; do @@ -986,11 +987,11 @@ You can use the following template to add arguments when running a script: done ``` * Give permissions - * ``` + ``` chmod +x ./count_lines.sh ``` * Run the script with arguments (files). Here we use the script itself as an example. - * ``` + ``` sh count_lines.sh count_lines.sh ``` @@ -999,14 +1000,14 @@ You can use the following template to add arguments when running a script: ### Find path of a file * Write the script - * ```bash + ```bash # find.sh #!/bin/bash find / -iname $1 2> /dev/null ``` * Run the script - * ``` + ``` sh find.sh ``` @@ -1015,13 +1016,13 @@ You can use the following template to add arguments when running a script: ### Print how many arguments are passed in a script * Write the script - * ```bash + ```bash # print_qty_args.sh #!/bin/bash echo This script was passed $# arguments ``` * Run the script - * ``` + ``` sh print_qty_args.sh ``` @@ -1050,7 +1051,7 @@ Note that the Terraform documentation also covers other methods to install Terra * Option 1: * Use the following command line: - * ``` + ``` systemsetup -setremotelogin on ``` * Option 2 @@ -1063,7 +1064,7 @@ Note that the Terraform documentation also covers other methods to install Terra * Open **Finder** \> **Go** \> **Go to Folder** * Paste this path - * ``` + ``` ~/Library/Caches ``` @@ -1087,15 +1088,15 @@ To install Chocolatey on Windows, we follow the [official Chocolatey website](ht * Run PowerShell as Administrator * Check if **Get-ExecutionPolicy** is restricted - * ``` + ``` Get-ExecutionPolicy ``` * If it is restricted, run the following command: - * ``` + ``` Set-ExecutionPolicy AllSigned ``` * Install Chocolatey - * ``` + ``` Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) ``` * Note: You might need to restart PowerShell to use Chocolatey @@ -1107,7 +1108,7 @@ To install Chocolatey on Windows, we follow the [official Chocolatey website](ht Once you've installed Chocolatey on Windows, installing Terraform is as simple as can be: * Install Terraform with Chocolatey - * ``` + ``` choco install terraform ```