From 7e4c82d12a8dcd8892bee7fe1b62cbd18a7c767f Mon Sep 17 00:00:00 2001 From: Jose Date: Sun, 3 Jul 2022 16:06:29 -0300 Subject: [PATCH] spliting the tutorial-adding an index --- README.org | 21 +- bash_tutorial.org | 818 ----------------------------- tutorial/#bash_tutorial.org# | 134 +++++ tutorial/.#bash_tutorial.org | 1 + tutorial/add_user.org | 51 ++ tutorial/bash_tutorial.org | 206 ++++++++ tutorial/convertppt2pdf.org | 16 + tutorial/croc.org | 28 + tutorial/dd_command_flash_usb.org | 23 + tutorial/describe_hardware.org | 14 + tutorial/dictionaries_translat.org | 20 + tutorial/display_files.org | 48 ++ tutorial/file.awk | 1 + tutorial/files_directories.org | 96 ++++ tutorial/gawk.org | 107 ++++ tutorial/listing_process.org | 25 + tutorial/mail-listc | 11 + tutorial/manuals.org | 43 ++ tutorial/move_files.org | 34 ++ tutorial/redirect_output.org | 86 +++ tutorial/rmlint.org | 44 ++ tutorial/run_bash_script.org | 45 ++ tutorial/run_rscript.org | 8 + tutorial/search_files.org | 100 ++++ tutorial/sed_subsitute.org | 30 ++ tutorial/streaming_terminal.org | 21 + tutorial/variables.org | 30 ++ 27 files changed, 1242 insertions(+), 819 deletions(-) delete mode 100644 bash_tutorial.org create mode 100644 tutorial/#bash_tutorial.org# create mode 120000 tutorial/.#bash_tutorial.org create mode 100644 tutorial/add_user.org create mode 100644 tutorial/bash_tutorial.org create mode 100644 tutorial/convertppt2pdf.org create mode 100644 tutorial/croc.org create mode 100644 tutorial/dd_command_flash_usb.org create mode 100644 tutorial/describe_hardware.org create mode 100644 tutorial/dictionaries_translat.org create mode 100644 tutorial/display_files.org create mode 100644 tutorial/file.awk create mode 100644 tutorial/files_directories.org create mode 100644 tutorial/gawk.org create mode 100644 tutorial/listing_process.org create mode 100644 tutorial/mail-listc create mode 100644 tutorial/manuals.org create mode 100644 tutorial/move_files.org create mode 100644 tutorial/redirect_output.org create mode 100644 tutorial/rmlint.org create mode 100644 tutorial/run_bash_script.org create mode 100644 tutorial/run_rscript.org create mode 100644 tutorial/search_files.org create mode 100644 tutorial/sed_subsitute.org create mode 100644 tutorial/streaming_terminal.org create mode 100644 tutorial/variables.org diff --git a/README.org b/README.org index b76575f..7f9254e 100644 --- a/README.org +++ b/README.org @@ -2,4 +2,23 @@ Tutorial with some basic commands, tips and options to use bash - * [[./bash_tutorial.org][Tutorial]] + * [[./tutorial/add_user.org][How to add users]] + * [[./tutorial/convertppt2pdf.org][Convert office files to pdf]] + * [[./tutorial/dd_command_flash_usb.org][Using dd command to flash usb]] + * [[./tutorial/describe_hardware.org][Describing hardware]] + * [[./tutorial/dictionaries_translat.org][Using dictionaries and translation tools]] + * [[./tutorial/gawk.org][GNU awk program]] + * [[./tutorial/manuals.org][Reading the fabulous manuals!]] + * [[./tutorial/rmlint.org][Using 'rmlint' for cleaning your HD]] + * [[./tutorial/run_bash_script.org][How to run bash scripts]] + * [[./tutorial/run_rscript.org][How to run R-scripts]] + * [[./tutorial/streaming_terminal.org][Streaming from terminal!]] + * [[./tutorial/variables.org][Knowing about variables]] + * [[./tutorial/redirect_output.org][Input output and standard error]] + * [[./tutorial/files_directories.org][Exploring about files and directories]] + * [[./tutorial/sed_subsitute.org][Using 'sed' to subsitute text]] + * [[./tutorial/croc.org][Using 'croc' to tranfer files between machines]] + * [[./tutorial/move_files.org][Move or rename files]] + * [[./tutorial/search_files.org][Searching files in the system]] + * [[./tutorial/listing_process.org][Listing process]] + * [[./tutorial/display_files.org][Display files: 'less', 'head' and 'tail' commands]] diff --git a/bash_tutorial.org b/bash_tutorial.org deleted file mode 100644 index 94a1cbc..0000000 --- a/bash_tutorial.org +++ /dev/null @@ -1,818 +0,0 @@ -#+TITLE: bash commands -#+DATE: 2021-08-30 -#+STARTUP: indent -#+OPTIONS: num:nil - -* DONE work in bash tutorial - :LOGBOOK: - CLOCK: [2021-09-08 mié 18:52]--[2021-09-08 mié 19:22] => 0:30 - CLOCK: [2021-09-04 sáb 16:04]--[2021-09-04 sáb 16:34] => 0:30 - CLOCK: [2021-09-04 sáb 15:19]--[2021-09-04 sáb 15:49] => 0:30 - :END: - -* Variables - -System variables are stored in users environment - -- ~$PATH~ Finds the content of a variable ("PATH") -- "env" variables defined in shell environment - -* Add directory to path - -[[https://wiki.archlinux.org/title/Environment_variables]["Environment variables" in: Arch wiki]] - -To add a directory to the PATH for local usage, put -the following in "~/.bash_profile": - -#+begin_example bash -export PATH="${PATH}:/home/my_user/bin" -#+end_example - -This will add the directory at the end of $PATH. To update the variable, re-login or source the file: - -#+begin_example bash -source ~/.bash_profile -#+end_example - -Then check directories in "$PATH" - -#+begin_example bash -echo $PATH -#+end_example - - -* Adding a new user - -Check users that are logged - -#+begin_src bash -users -#+end_src - -#+RESULTS: -: myuser - -New user called "test" - -#+begin_example bash -sudo useradd -p -m test -#+end_example - -The configuration file "useradd" sets options for this command: - -#+begin_src bash -sudo less /etc/default/useradd -#+end_src - -#+RESULTS: -| # useradd defaults file for ArchLinux | -| # original changes by TomK | -| GROUP=users | -| HOME=/home | -| INACTIVE=-1 | -| EXPIRE= | -| SHELL=/bin/bash | -| SKEL=/etc/skel | -| CREATE_MAIL_SPOOL=no | -| (END) | - - -PS: should use "sudo" to see the file. And ~less()~ or ~more()~ will show the file - -The following file contains a list of fields about each user: - -#+begin_src bash - head -4 /etc/passwd -#+end_src - -#+RESULTS: -| root:x:0:0::/root:/bin/bash | -| bin:x:1:1::/:/sbin/nologin | -| daemon:x:2:2::/:/sbin/nologin | -| mail:x:8:12::/var/spool/mail:/sbin/nologin | - -PS: ~head()~ is used to show only the first four lines. - -* Describe hardware - -Here using piping to show only the first four lines in the output - -#+begin_src bash -lshw | head -4 -#+end_src - -#+RESULTS: -| myuser | | | -| description: | Computer | | -| width: | 64 | bits | -| capabilities: | smp | vsyscall32 | - -* Execute stuffs - -** Streaming from terminal - -To watch a stream use video player such as 'mpv' or 'vlc' that supports streaming -And pass the streaming address as argument to the name of the media player - -#+begin_example bash - mpv https://live0.emacsconf.org/main.webm -#+end_example - -** Run a bash script -*** Write script - -After writing, save the file with '.sh' extension. This script will -echo the words within quotes - - #+begin_src bash - #!/bin/bash - echo "Hellow hu-hu" - #+end_src - - #+RESULTS: - : Hellow hu-hu - -*** Option a: make it executable - -Use the command "chmod" to change permissions for the file - -#+begin_example bash - chmod +x script.sh -#+end_example - -Then, execute - -#+begin_example bash -./script.sh -#+end_example - -*** Option b: run from terminal - -#+begin_example bash -bash script.sh -#+end_example - -Or - -#+begin_example bash -sh script.sh -#+end_example - -PS: to execute the script from any place in the machine include -the script in a directory that can be read from ~$PATH~ - -*** Option c: run from graphical interface - -** Run R scripts - -Write the script and save it. Then go to the directory where the script -was saved and run this code from terminal - -#+begin_src bash -Rscript script.R -#+end_src - -* Manuals - -To explore the manuals use the command ~man~ or ~info~ followed by the name of the function or program - -#+begin_src bash -man -#+end_src - -#+RESULTS: -| What manual page do you want? | -| For example, try 'man man'. | - -Search for information about the manual interface within ~man~ - -: man man - -Description of the system hierarchy - -: man hier - -Showing only the first four lines of "info" interface - -#+begin_src bash -info | head -4 -#+end_src - -#+RESULTS: -| File: | dir, | Node: | Top, | This | is | the | top | of | the | INFO | tree. | -| | | | | | | | | | | | | -| This | is | the | Info | main | menu | (aka | directory | node). | | | | -| A | few | useful | Info | commands: | | | | | | | | - -Search for ~info~ page about Bash shell features - -: info bash - -The manuals can also be accessed from emacs using "M-x" (using the "meta" key or CTRL + x) - -: M-x info - -: M-x man - -: M-x woman - -* Show command history - -: history - -The file can be found in the user home: - -: /home/user/.bash_history - -* Translators and dictionaries - -** Apertium translator - -Installing in Parabola GNU-linux - -: sudo pacman -S apertium-eng-spa-git -: sudo pacman -S apertium-lex-tools -: sudo pacman -S apertium-viewer-2.5.3-1 - -Apertium can be used in the command line - -: echo Hola | apertium spa-eng -: echo Hello | apertium eng-spa - -The pipe operator "~|~" is used to pass the input to apertium - -* Files and directories - -** Create empty file - -Create "file.txt" with command ~touch~ - -: touch file.txt - -Create a file redirecting the shell output using "~>~" operator - -: echo I will put this text wthin a file > file2.txt - -** Redirect input, output and standard error - -Everything in GNU systems is a file. The keyboard and the terminal are also a file. -The keyboard is used for input and the terminal is used by commands as output. - -The files can be found in directory "fd", which stands for file descriptor) - -#+begin_src bash -cd /dev/fd/ -ls -l -#+end_src - -#+RESULTS: -| total | 0 | | | | | | | | | | -| lr-x------ | 1 | user | user | 64 | dec | 15 | 10:31 | 0 | -> | /tmp/babel-yl1RTd/ob-input-izpXuk | -| l-wx------ | 1 | user | user | 64 | dec | 15 | 10:31 | 1 | -> | pipe:[42063] | -| lr-x------ | 1 | user | user | 64 | dec | 15 | 10:31 | 17 | -> | /dev/pts/0 | -| l-wx------ | 1 | user | user | 64 | dec | 15 | 10:31 | 2 | -> | /tmp/emacsA1M18o | - - * standard input stream is bound to /dev/fd/0 - * standard output (stout) stream is bound to /dev/fd/1 - * standard errror (stderr) stream is bound to /dev/fd/2 - -During interaction a terminal gets written to stdin (dev/fd/0), which -a command read. The command then do an action and writes the output -(stout or stderr) where it will read by the terminal and is displayed -to the user. - -To redirect use the operator `>` as follows: - * `command > file_to_redirect` - -The operator `>` redirects stout, i.e., is the same that 1>. This code -creates a new file with the list of files present in the actual directory: - -#+begin_src bash -ls -l > file_redirect.txt -cat file_redirect.txt -#+end_src - -#+RESULTS: -| total | 32 | | | | | | | | -| -rw-r--r-- | 1 | user | user | 15782 | dec | 15 | 10:49 | bash_tutorial.org | -| -rw-r--r-- | 1 | user | user | 0 | dec | 15 | 10:49 | file_redirect.txt | -| -rw-r--r-- | 1 | user | user | 11895 | dec | 9 | 17:44 | markdown.md | -| -rw-r--r-- | 1 | user | user | 121 | dec | 9 | 17:17 | README.org | - -Use "2>&1" to redirect stderr with the stout. Using an arbitrary word and redirect it -to the file should print a warning message that is redirected to the file: - -#+begin_src bash -ls -l > file_redirect.txt -paco >> file_redirect.txt 2>&1 -cat file_redirect.txt -#+end_src - -#+RESULTS: -| total | 32 | | | | | | | | -| -rw-r--r-- | 1 | user | user | 15995 | dec | 15 | 12:39 | bash_tutorial.org | -| -rw-r--r-- | 1 | user | user | 0 | dec | 15 | 13:41 | file_redirect.txt | -| -rw-r--r-- | 1 | user | user | 11895 | dec | 9 | 17:44 | markdown.md | -| -rw-r--r-- | 1 | user | user | 121 | dec | 9 | 17:17 | README.org | -| bash: | line | 2: | paco: | command | not | found | | | - - -Use the "<" operator to pass commands to the file: - -#+begin_src bash -ls -l > file_redirect.txt -paco >> file_redirect.txt 2>&1 -sort < file_redirect.txt -cat file_redirect.txt -#+end_src - -#+RESULTS: -| bash: | line | 2: | paco: | command | not | found | | | -| -rw-r--r-- | 1 | user | user | 0 | dec | 15 | 13:44 | file_redirect.txt | -| -rw-r--r-- | 1 | user | user | 121 | dec | 9 | 17:17 | README.org | -| -rw-r--r-- | 1 | user | user | 16501 | dec | 15 | 13:41 | bash_tutorial.org | -| total | 24 | | | | | | | | -| total | 24 | | | | | | | | -| -rw-r--r-- | 1 | user | user | 16501 | dec | 15 | 13:41 | bash_tutorial.org | -| -rw-r--r-- | 1 | user | user | 0 | dec | 15 | 13:44 | file_redirect.txt | -| -rw-r--r-- | 1 | user | user | 121 | dec | 9 | 17:17 | README.org | -| bash: | line | 2: | paco: | command | not | found | | | - - -** List files - -Use ~ls~ in the directory you want to explore - -: ls - -List with properties using options ~-l~ and ~-la~ - -: ls -l -: ls -la - -List using wildcards - -List all files ending in ".csv" - -: ls *.csv - -List all files containing the characters "moda" within name, e.g., -"acomoda", "comoda.txt"... - -: ls *moda* - -Remove "x" - -: rm x - -Copy a file using "~cp~ source destination" - -: cp /home/text.csv /home/myuser/text.csv - -Copy multiple files, directories or disk using "rsync" (source, destination). -The command accepts arguments: - -- "-r" recursive -- "-v" verbose -- "-a" archive (keeps info about files) - -: rsync -rav /home/user/Documents /run/media/user/disk/backup/ - -~rsync~ can be also used with selective copyng based on file type - -: rsync /home/user/Desktop/*.jpg /home/user/Desktop/backupdata/ - -Create directory - -: mkdir new_dir - -Remove (unlink) a directory - -Some arguments: - - * -r: recursively unlink - * -v: verbose - * -f: force - -: rm -r new_dir - -Remove a file - -: rm file.txt - -Space used by a directory - -: du -hs /usr - -Display directory - -: pwd - -Change directory you are working from terminal. - -Go to the home of the user - -: cd - -Go one level up in the directory tree - -: cd .. - -Go to "Documents" directory - -: cd /home/myuser/Documents - -** Use rmlint to search for duplicated or empty files - -Install - -: sudo pacman -S rmlint - -Run in the directory you want to check for duplicated or empty files - -: rmlint -g - -This will create two files: - * rmlint.sh - * rmlint.json - -The shell script can be used to delete duplicated files - -OPTIONS: - - - h Show this message. - - d Do not ask before running. - - x Keep rmlint.sh; do not autodelete it. - - p Recheck that files are still identical before removing duplicates. - - r Allow deduplication of files on read-only btrfs snapshots. (requires sudo) - - n Do not perform any modifications, just print what would be done. (implies -d and -x) - - c Clean up empty directories while deleting duplicates. - - q Do not show progress. - - k Keep the timestamp of directories when removing duplicates. - - i Ask before deleting each file - -: chmod +x rmlint.sh -: bash -xcp rmlint.sh - -** Convert pdf to text or html using poppler - -Use poppler and redirect the text to a org file. -~pdftotext~ converts a pdf to "txt" if no other format is -specified - -: pdftotext foo.pdf foo - -: pacman -S poppler -: pdftotext foo.pdf ->> foo.org # first option -: pdftotext foo.pdf foo.org # second option - -Convert pdf to html - -: pfdftohtml foo.pdf foo.html - -** Convert files using pandoc - -Use pandoc with "-s" flag to produce a standalone document and "-o" to -redirect output to a file. - -In the example a file "foo" is converted from ~odt~ to ~org~ - -: pandoc -s -o foo.org foo.odt - -** Convert files to pdf using libreoffice - -Convert odt file "tcl_online3.odt" to pdf - -: libreoffice --headless --convert-to pdf tcl_online3.odt - -** Using 'sed' to substitute text - -"~sed~" is a stream editor for filtering and transforming text"... - -This command in emacs editor - -: M-x woman [RET] sed - -Visits the following file with info about ~sed~ - -usr/share/man/man1/sed.1.gz - -A brief example: -I have a long comma separated text file with strings and -need to include a line break after each comma (\n) - -: cat filetest - -#+RESULTS: -|'string1',|'string2', |'string3'| - -Using ~sed~ and redirecting the output to "filetest1" - -: $ sed 's/\,/&\n/g' filetest > filetest1 - -#+RESULTS: -| 'string1', | -| 'string2', | -| 'string3' | - - -** Send files to another machine with "croc" - -: sudo pacman -S croc - -Then run: - -: croc send clown.txt - -This will give a code - -: > Code is 34-04-paprika-sugar-micro -: > On the other computer run -: > croc 34-04-paprika-sugar-micro - -More info about croc in [[https://github.com/schollz/croc][Github repo]] - -** Move or rename - -Use "~mv~ source destination" command - -: mv /home/myuser/text.txt /home/myuser/Documents/text.csv - -Example: moving the ".config" files to ".config3", then moving -".config1" to ".config" to arrange configuration archives. - -This creates a copy of each file in the same directory - -: pwd # check where are you now -: # moving files -: mv file1.txt file3.txt - -*Moving multiple files* can be possible. Selecting all the files ending -in ".mp3" within Downloads - -: mv ~/Downloads/*.mp3 ~/Music/ - -*Moving multiple* files included within a text file. Files are included in "filesmv2.txt" and are moved to -"tmpfiles" directory. "t" argument stands for "target directory" - -Each line in the "txt" file looks like this: -'/home/user/file1.pdf' # original - -: $ cat filesmv2.txt | xargs mv -t ~/tmpfiles - -Source: [[https://unix.stackexchange.com/questions/115734/move-file-by-list-in-file-with-leading-whitespace][stackexchange]] - -*Moving multiple files* using wildcards. This moves all files containing the sequence "nasa" in the middle of -the name. '*' indicates that there are characters or numbers before and after the word "nasa" - -: mv *roco* -t ./direct - -** Flashing USB with "dd" - -"dd" (convert and copy a file) is useful to copy information from a disk. It can be used -to create bootable USB. An example with parabola: - -: sudo dd if=/home/user/Documents/parabola-2016.11.03-dual.iso of=/dev/sdb1 - -The ISO image is copied to "sdb1" (USB volume) - -More files with examples of use of "dd" [../bash/dd_command.org][here]] and [[~/Documentos/GNU/bash/dd_command_wiki.org][here]] - -** Display files - -Show content of a file. Concatenates and writes file. -Using "tac" reverses the result of "cat" command - -: cat file.txt - -Using head, tail and less to show parts of files - -Showing the first two entries - -#+begin_src bash - head -n 2 /etc/hosts -#+end_src - - #+RESULTS: - | 127.0.0.1 | localhost | - | 127.0.1.1 | myuser | - - Showing the last two entries - - #+begin_src bash - tail -n 2 /etc/hosts - #+end_src - - #+RESULTS: - | ff02::1 | ip6-allnodes | - | ff02::2 | ip6-allrouters | - - - #+begin_src bash - less /etc/hosts - #+end_src - - #+RESULTS: - | 127.0.0.1 | localhost | | | - | 127.0.1.1 | myuser | | | - | ::1 | localhost | ip6-localhost | ip6-loopback | - | ff02::1 | ip6-allnodes | | | - | ff02::2 | ip6-allrouters | | | - -** Backup a file - - Using "cp" - - : cp bbdb{,.bak} - - : bbdb.bak - - Backups with tar (tape archiver) - - Back up of "home" - - * c = create file - * v = verbose - * f = write to a file/device - * z = compress the file (gzip) "tar.bz" - * j = compress the file (bzip2) - - : tar -czvf /tmp/home.tar.gz /home - -** Simple code to encrypt - - Encrypt: - - : gpg -c X - : gpg X - - Use the code to remove the original file: - - : shred --remove X - -** Searching - -*** Search for files - -'find' can be used with multiple arguments such as: - - * -name: search for name - * -iname: search for case-insensitive name - * -type: type of file - * f = file - * d = directory - -Search within all the directory and subdirectories by name - -#+begin_src bash -find ./ -name "gitea*" -#+end_src - -#+RESULTS: -./imagens/gitea-sm.png - -Search for all the files ending in '.png' - -#+begin_src bash -find ./ -name "*.png" -#+end_src - -#+RESULTS: -./imagens/gitea-sm.png -./files/plot.png - -Search for empty files in 'home' - -#+begin_src bash -find /home -type f -empty -#+end_src - -'find' can also be used with grep to match patterns: - -#+begin_src bash -cd ~/Documentos/dat/intro_r/answers -find . | grep -E '.js|.png' -#+end_src - -#+RESULTS: -| ./plot.png | -| ./vizjs.js | -| ./Rplot.png | -| ./bipartiteD3Script.js | -| ./demo1.js | - -To find file with different name patters, 'find' can also be used as follows: - -#+begin_src bash - find . -type f \( -name "*.org" -o -name "*.md" \) -#+end_src - -#+RESULTS: -| ./README.org | -| ./bash_tutorial.org | - -*** Matching patterns - -Print lines within files that match patterns - -: grep - -Example: searching for all entries that have "root" - -#+begin_src bash -grep 'root' /etc/passwd -#+end_src - -#+RESULTS: -: root:x:0:0::/root:/bin/bash - -Additional arguments can be used with ~grep~: - * r: recursive search (within directories) - * n: print line number - * i: case-insensitive search - * '*' Wildcards to search in all the directories - -Search within files in the actual directory with wildcards - -#+begin_src bash -grep -rni IFELSE * -#+end_src - -#+RESULTS: -|answers/repl_values.R:137: mutate(Status = ifelse(Status == "almost peak" &| -|answers/categ_colum.R:40:df$lead_likely <- ifelse(grepl("UNCOVERED CURB | SERVICE", df$remarks), "non-lead", "unknown")| -|docs/vectorization.org:354:(counting number of repeated value), and =ifelse= (vectorized if...else| - -'grep' can be used also to search for files in directories as shown in the anterior -example using grep with extended regular expressions ("-E") and 'find' - -: find . | grep -E '.js|.png' - -In this example, 'find' will be passed to 'grep' and any pattern matching -will be printed - -** Download files - -This code download the file and the argument ~-O~ is to rename the file - -#+begin_example -wget https://filetodownload.org -O new_file -#+end_example - -* Devices - -- mount /what /where - - what = device name - - where = directory - - /mnt = devices that mount occasionally - - /media = devices that mount frequently - -: run/$USER/media/$LABEL - -* List process - -Use ~ps~, ~top~ or ~htop~ to list process: - - * ~ps~ reports a snapshot of the current process - -: ps aux | less - - * ~top~ display dynamic real-time view of linux process - -: top - - * ~htop~ displays an interactive process viewer - -: htop - -To kill a process use: - -: kill [PID] - -or - -: pkill [PID] - -PID = process identificator - -* Evaluate time to load - -In emacs: - -: time emacs --eval '(save-buffers-kill-terminal)' - -* Cool commands - -: cal # calendar -: clear # clear output -: uname # display system information (-r, -p, -a) -: wc # wordcount (file name) -: date # check the date - - -* References: - - * [[https://wiki-dev.bash-hackers.org/][The bash hackers wiki]] - * [[https://link.springer.com/content/pdf/bfm%3A978-1-4302-6829-1%2F1.pdf?error=cookies_not_supported&code=2e41714e-ca8f-4796-a077-3243c836ec90][Beginning the linux command line]] - * [[https://pandoc.org/][Pandoc manual]] - * [[https://stackoverflow.com/][stackoverflow]] diff --git a/tutorial/#bash_tutorial.org# b/tutorial/#bash_tutorial.org# new file mode 100644 index 0000000..ba9e3bb --- /dev/null +++ b/tutorial/#bash_tutorial.org# @@ -0,0 +1,134 @@ +#+TITLE: bash commands +#+DATE: 2021-08-30 +#+STARTUP: indent +#+OPTIONS: num:nil + +* DONE work in bash tutorial + :LOGBOOK: + CLOCK: [2021-09-08 mié 18:52]--[2021-09-08 mié 19:22] => 0:30 + CLOCK: [2021-09-04 sáb 16:04]--[2021-09-04 sáb 16:34] => 0:30 + CLOCK: [2021-09-04 sáb 15:19]--[2021-09-04 sáb 15:49] => 0:30 + :END: + + + +* Execute stuffs + + +* Show command history + +: history + +The file can be found in the user home: + +: /home/user/.bash_history + + + + +** Convert pdf to text or html using poppler + +Use poppler and redirect the text to a org file. +~pdftotext~ converts a pdf to "txt" if no other format is +specified + +: pdftotext foo.pdf foo + +: pacman -S poppler +: pdftotext foo.pdf ->> foo.org # first option +: pdftotext foo.pdf foo.org # second option + +Convert pdf to html + +: pfdftohtml foo.pdf foo.html + +** Convert files using pandoc + +Use pandoc with "-s" flag to produce a standalone document and "-o" to +redirect output to a file. + +In the example a file "foo" is converted from ~odt~ to ~org~ + +: pandoc -s -o foo.org foo.odt + +** Convert files to pdf using libreoffice + +Convert odt file "tcl_online3.odt" to pdf + +: libreoffice --headless --convert-to pdf tcl_online3.odt + + + + +** Backup a file + + Using "cp" + + : cp bbdb{,.bak} + + : bbdb.bak + + Backups with tar (tape archiver) + + Back up of "home" + + * c = create file + * v = verbose + * f = write to a file/device + * z = compress the file (gzip) "tar.bz" + * j = compress the file (bzip2) + + : tar -czvf /tmp/home.tar.gz /home + +** Simple code to encrypt + + Encrypt: + + : gpg -c X + : gpg X + + Use the code to remove the original file: + + : shred --remove X + + +** Download files + +This code download the file and the argument ~-O~ is to rename the file + +#+begin_example +wget https://filetodownload.org -O new_file +#+end_example + +* Devices + +- mount /what /where + - what = device name + - where = directory + - /mnt = devices that mount occasionally + - /media = devices that mount frequently + +: run/$USER/media/$LABEL + + +* Evaluate time to load + +In emacs: + +: time emacs --eval '(save-buffers-kill-terminal)' + +* Cool commands + +: cal # calendar +: clear # clear output +: uname # display system information (-r, -p, -a) +: wc # wordcount (file name) +: date # check the date + + +* References: + + * [[https://wiki-dev.bash-hackers.org/][The bash hackers wiki]] + * [[https://link.springer.com/content/pdf/bfm%3A978-1-4302-6829-1%2F1.pdf?error=cookies_not_supported&code=2e41714e-ca8f-4796-a077-3243c836ec90][Beginning the linux command line]] + * [[https://pandoc.org/][Pandoc manual]] + * [[https://stackoverflow.com/][stackoverflow]] diff --git a/tutorial/.#bash_tutorial.org b/tutorial/.#bash_tutorial.org new file mode 120000 index 0000000..4c86bb8 --- /dev/null +++ b/tutorial/.#bash_tutorial.org @@ -0,0 +1 @@ +compartido@compartido.3161:1656845041 \ No newline at end of file diff --git a/tutorial/add_user.org b/tutorial/add_user.org new file mode 100644 index 0000000..6e85e58 --- /dev/null +++ b/tutorial/add_user.org @@ -0,0 +1,51 @@ +* Adding a new user + +Check users that are logged + +#+begin_src bash +users +#+end_src + +#+RESULTS: +: myuser + +New user called "test" + +#+begin_example bash +sudo useradd -p -m test +#+end_example + +The configuration file "useradd" sets options for this command: + +#+begin_src bash +sudo less /etc/default/useradd +#+end_src + +#+RESULTS: +| # useradd defaults file for ArchLinux | +| # original changes by TomK | +| GROUP=users | +| HOME=/home | +| INACTIVE=-1 | +| EXPIRE= | +| SHELL=/bin/bash | +| SKEL=/etc/skel | +| CREATE_MAIL_SPOOL=no | +| (END) | + + +PS: should use "sudo" to see the file. And ~less()~ or ~more()~ will show the file + +The following file contains a list of fields about each user: + +#+begin_src bash + head -4 /etc/passwd +#+end_src + +#+RESULTS: +| root:x:0:0::/root:/bin/bash | +| bin:x:1:1::/:/sbin/nologin | +| daemon:x:2:2::/:/sbin/nologin | +| mail:x:8:12::/var/spool/mail:/sbin/nologin | + +PS: ~head()~ is used to show only the first four lines. diff --git a/tutorial/bash_tutorial.org b/tutorial/bash_tutorial.org new file mode 100644 index 0000000..5c2960b --- /dev/null +++ b/tutorial/bash_tutorial.org @@ -0,0 +1,206 @@ +#+TITLE: bash commands +#+DATE: 2021-08-30 +#+STARTUP: indent +#+OPTIONS: num:nil + +* DONE work in bash tutorial + :LOGBOOK: + CLOCK: [2021-09-08 mié 18:52]--[2021-09-08 mié 19:22] => 0:30 + CLOCK: [2021-09-04 sáb 16:04]--[2021-09-04 sáb 16:34] => 0:30 + CLOCK: [2021-09-04 sáb 15:19]--[2021-09-04 sáb 15:49] => 0:30 + :END: + + + +* Execute stuffs + + +* Show command history + +: history + +The file can be found in the user home: + +: /home/user/.bash_history + + + + +** Convert pdf to text or html using poppler + +Use poppler and redirect the text to a org file. +~pdftotext~ converts a pdf to "txt" if no other format is +specified + +: pdftotext foo.pdf foo + +: pacman -S poppler +: pdftotext foo.pdf ->> foo.org # first option +: pdftotext foo.pdf foo.org # second option + +Convert pdf to html + +: pfdftohtml foo.pdf foo.html + +** Convert files using pandoc + +Use pandoc with "-s" flag to produce a standalone document and "-o" to +redirect output to a file. + +In the example a file "foo" is converted from ~odt~ to ~org~ + +: pandoc -s -o foo.org foo.odt + +** Convert files to pdf using libreoffice + +Convert odt file "tcl_online3.odt" to pdf + +: libreoffice --headless --convert-to pdf tcl_online3.odt + + + +** Display files + +Show content of a file. Concatenates and writes file. +Using "tac" reverses the result of "cat" command + +: cat file.txt + +Using head, tail and less to show parts of files + +Showing the first two entries + +#+begin_src bash + head -n 2 /etc/hosts +#+end_src + + #+RESULTS: + | 127.0.0.1 | localhost | + | 127.0.1.1 | myuser | + + Showing the last two entries + + #+begin_src bash + tail -n 2 /etc/hosts + #+end_src + + #+RESULTS: + | ff02::1 | ip6-allnodes | + | ff02::2 | ip6-allrouters | + + + #+begin_src bash + less /etc/hosts + #+end_src + + #+RESULTS: + | 127.0.0.1 | localhost | | | + | 127.0.1.1 | myuser | | | + | ::1 | localhost | ip6-localhost | ip6-loopback | + | ff02::1 | ip6-allnodes | | | + | ff02::2 | ip6-allrouters | | | + + +Show content of a zip file using less and pipe "|" + +#+begin_src bash +unzip -l tntvillage_484094.zip | less +#+end_src + +** Backup a file + + Using "cp" + + : cp bbdb{,.bak} + + : bbdb.bak + + Backups with tar (tape archiver) + + Back up of "home" + + * c = create file + * v = verbose + * f = write to a file/device + * z = compress the file (gzip) "tar.bz" + * j = compress the file (bzip2) + + : tar -czvf /tmp/home.tar.gz /home + +** Simple code to encrypt + + Encrypt: + + : gpg -c X + : gpg X + + Use the code to remove the original file: + + : shred --remove X + + +** Download files + +This code download the file and the argument ~-O~ is to rename the file + +#+begin_example +wget https://filetodownload.org -O new_file +#+end_example + +* Devices + +- mount /what /where + - what = device name + - where = directory + - /mnt = devices that mount occasionally + - /media = devices that mount frequently + +: run/$USER/media/$LABEL + +* List process + +Use ~ps~, ~top~ or ~htop~ to list process: + + * ~ps~ reports a snapshot of the current process + +: ps aux | less + + * ~top~ display dynamic real-time view of linux process + +: top + + * ~htop~ displays an interactive process viewer + +: htop + +To kill a process use: + +: kill [PID] + +or + +: pkill [PID] + +PID = process identificator + +* Evaluate time to load + +In emacs: + +: time emacs --eval '(save-buffers-kill-terminal)' + +* Cool commands + +: cal # calendar +: clear # clear output +: uname # display system information (-r, -p, -a) +: wc # wordcount (file name) +: date # check the date + + +* References: + + * [[https://wiki-dev.bash-hackers.org/][The bash hackers wiki]] + * [[https://link.springer.com/content/pdf/bfm%3A978-1-4302-6829-1%2F1.pdf?error=cookies_not_supported&code=2e41714e-ca8f-4796-a077-3243c836ec90][Beginning the linux command line]] + * [[https://pandoc.org/][Pandoc manual]] + * [[https://stackoverflow.com/][stackoverflow]] diff --git a/tutorial/convertppt2pdf.org b/tutorial/convertppt2pdf.org new file mode 100644 index 0000000..acf2df5 --- /dev/null +++ b/tutorial/convertppt2pdf.org @@ -0,0 +1,16 @@ +* How to convert office documents to text + +You may use libreoffice from terminal to tranform the file in pdf: + +#+begin_example sh + libreoffice --headless --convert-to pdf Presentation.pptx +#+end_example + + +Then you can use 'pdftotext' command to transform the pdf file to any plain text +format: + +#+begin_example sh + pdftotext Presentation.pdf Presentation.txt +#+end_example + diff --git a/tutorial/croc.org b/tutorial/croc.org new file mode 100644 index 0000000..77526d9 --- /dev/null +++ b/tutorial/croc.org @@ -0,0 +1,28 @@ + +* Send files to another machine with "croc" + +Installing in Parabola-GNU/linux + +#+begin_example bash + pacman -S croc +#+end_example + +Let's say that you have a file called 'clown.txt' and you want to send to +another machine. + +Run in the shell the following command: + +#+begin_example bash + croc send clown.txt +#+end_example + +This will give you a code + +: > Code is 34-04-paprika-sugar-micro +: > On the other computer run +: > croc 34-04-paprika-sugar-micro + +Then, just send the code to the user in the second machine. Including that code +should let the file be trasfered. + +More info about croc in [[https://github.com/schollz/croc][Github repo]] diff --git a/tutorial/dd_command_flash_usb.org b/tutorial/dd_command_flash_usb.org new file mode 100644 index 0000000..90cef74 --- /dev/null +++ b/tutorial/dd_command_flash_usb.org @@ -0,0 +1,23 @@ + +** Flashing USB with "dd" + +~dd~ is a command to convert and copy a file. It is useful to copy information from a +disk. + +It can be used to create bootable USB. + +Let's say that you need to create a 'live' usb to install or repair a GNU-linux system. + +An example with parabola: + + * First, obtain a ISO image: + https://wiki.parabola.nu/Get_Parabola + * Then, open a shell and use the command + +#+begin_example sh + sudo dd if=/home/user/Documents/parabola-2016.11.03-dual.iso of=/dev/sdb1 +#+end_example + +The ISO image is copied to "sdb1" (USB volume) + +More files with examples of use of "dd" [../bash/dd_command.org][here]] and [[~/Documentos/GNU/bash/dd_command_wiki.org][here]] diff --git a/tutorial/describe_hardware.org b/tutorial/describe_hardware.org new file mode 100644 index 0000000..3ec35e5 --- /dev/null +++ b/tutorial/describe_hardware.org @@ -0,0 +1,14 @@ +* Describe hardware + +Here using piping to show only the first four lines in the output + +#+begin_src bash +lshw | head -4 +#+end_src + +#+RESULTS: +| myuser | | | +| description: | Computer | | +| width: | 64 | bits | +| capabilities: | smp | vsyscall32 | + diff --git a/tutorial/dictionaries_translat.org b/tutorial/dictionaries_translat.org new file mode 100644 index 0000000..20841e3 --- /dev/null +++ b/tutorial/dictionaries_translat.org @@ -0,0 +1,20 @@ +* Translators and dictionaries + +** Apertium translator + +Installing in Parabola GNU-linux + +#+begin_example sh + pacman -S apertium-eng-spa-git + pacman -S apertium-lex-tools + pacman -S apertium-viewer-2.5.3-1 +#+end_example + +Apertium can be used in the command line, e.g.: + +#+begin_example sh + echo Hola | apertium spa-eng + echo Hello | apertium eng-spa +#+end_example + +The pipe operator "~|~" is used to send the input to apertium diff --git a/tutorial/display_files.org b/tutorial/display_files.org new file mode 100644 index 0000000..403138f --- /dev/null +++ b/tutorial/display_files.org @@ -0,0 +1,48 @@ +* Display files + +Show content of a file. Concatenates and writes file. +Using "tac" reverses the result of "cat" command + +: cat file.txt + +Using head, tail and less to show parts of files + +Showing the first two entries + +#+begin_src bash + head -n 2 /etc/hosts +#+end_src + + #+RESULTS: + | 127.0.0.1 | localhost | + | 127.0.1.1 | myuser | + + Showing the last two entries + + #+begin_src bash + tail -n 2 /etc/hosts + #+end_src + + #+RESULTS: + | ff02::1 | ip6-allnodes | + | ff02::2 | ip6-allrouters | + + + #+begin_src bash + less /etc/hosts + #+end_src + + #+RESULTS: + | 127.0.0.1 | localhost | | | + | 127.0.1.1 | myuser | | | + | ::1 | localhost | ip6-localhost | ip6-loopback | + | ff02::1 | ip6-allnodes | | | + | ff02::2 | ip6-allrouters | | | + + +Show content of a zip file using less and pipe "|" + +#+begin_src bash +unzip -l tntvillage_484094.zip | less +#+end_src + diff --git a/tutorial/file.awk b/tutorial/file.awk new file mode 100644 index 0000000..8ad2d47 --- /dev/null +++ b/tutorial/file.awk @@ -0,0 +1 @@ +BEGIN { print " Dont Panic!" } diff --git a/tutorial/files_directories.org b/tutorial/files_directories.org new file mode 100644 index 0000000..886bf6b --- /dev/null +++ b/tutorial/files_directories.org @@ -0,0 +1,96 @@ + +* Files and directories + +** Create empty file + +Create "file.txt" with command ~touch~ + +: touch file.txt + +Create a file redirecting the shell output using "~>~" operator + +: echo I will put this text wthin a file > file2.txt + + +** List files + +Use ~ls~ in the directory you want to explore + +: ls + +List with properties using options ~-l~ and ~-la~ + +: ls -l +: ls -la + +List using wildcards + +List all files ending in ".csv" + +: ls *.csv + +List all files containing the characters "moda" within name, e.g., +"acomoda", "comoda.txt"... + +: ls *moda* + +Remove "x" + +: rm x + +Copy a file using "~cp~ source destination" + +: cp /home/text.csv /home/myuser/text.csv + +Copy multiple files, directories or disk using "rsync" (source, destination). +The command accepts arguments: + +- "-r" recursive +- "-v" verbose +- "-a" archive (keeps info about files) + +: rsync -rav /home/user/Documents /run/media/user/disk/backup/ + +~rsync~ can be also used with selective copyng based on file type + +: rsync /home/user/Desktop/*.jpg /home/user/Desktop/backupdata/ + +Create directory + +: mkdir new_dir + +Remove (unlink) a directory + +Some arguments: + + * -r: recursively unlink + * -v: verbose + * -f: force + +: rm -r new_dir + +Remove a file + +: rm file.txt + +Space used by a directory + +: du -hs /usr + +Display directory + +: pwd + +Change directory you are working from terminal. + +Go to the home of the user + +: cd + +Go one level up in the directory tree + +: cd .. + +Go to "Documents" directory + +: cd /home/myuser/Documents diff --git a/tutorial/gawk.org b/tutorial/gawk.org new file mode 100644 index 0000000..4efc0c5 --- /dev/null +++ b/tutorial/gawk.org @@ -0,0 +1,107 @@ +#+TITLE: Using gawk in command-line +#+DATE: 2022-03-15 +#+OPTIONS: num:nil toc:nil +#+AUTHOR: Jose +#+PROPERTY: header-args:bash :exports both :session *bsh* :tangle yes +#+PROPERTY: header-args:bash+ :cmdline :results output + +* gawk stands for GNU-awk + + ~awk~ is a data driven program that search text in files using a pattern. After finding the pattern + ~awk~ performs operations on these files. + ~awk~ is not bash, but since you can use it from a shell, let's talk about ~awk~ in this + tutorial. + +** Syntaxis + + Use the following and apply to files or to standard input ('INPUT') + + #+begin_example bash + awk PATTERN { ACTION } INPUT + #+end_example + + ~awk~ can be run directly in the command-line, or you can write scripts and run them. + + #+begin_src bash + set +H #disabling c-shell-style to avoid treat '!' as special character + #+end_src + + #+RESULTS: + | compartido@compartido: | ~/Documentos/GNU/bash/bash-tutorial | + | compartido@compartido: | ~/Documentos/GNU/bash/bash-tutorial | + + #+begin_src bash + awk 'BEGIN { print " Don\47t Panic!" }' + #+end_src + + #+RESULTS: + | Don't | Panic! | + + To run the program from a file, use the 'f' argument followed by the name of the file. + + #+begin_src bash + awk -f file.awk + #+end_src + + #+RESULTS: + | Dont | Panic! | + + ~awk~ scripts use the following before the code + + #+begin_example bash + #! /bin/awk -f + #+end_example + + Then, make the file executable ('chmod +x file.awk') + +** Data + + Check in awklib/eg/data + + #+begin_src bash :results output + awk '/li/ { print $0}' mail-listc + #+end_src + + #+RESULTS: + : Amelia 555-5553 amelia.zodiacusque@gmail.comF + : Broderick555-0542 broderick.aliquotiens@yahoo.com R + : Julie555-6699 julie.perscrutabor@skeeve.com F + : Samuel 555-3430 samuel.lanceolis@shu.eduA + : compartido@compartido: ~/Documentos/GNU/bash/bash-tutorial + + Printing is the default action. Thus, when printing is omitted, ~awk~ + as action in the code, the output will still be printed. + + #+begin_src bash + awk 'length($0) > 50' mail-listc + #+end_src + + #+RESULTS: + : Anthony 555-3412 anthony.asserturo@hotmail.com A + : Broderick555-0542 broderick.aliquotiens@yahoo.com R + : compartido@compartido: ~/Documentos/GNU/bash/bash-tutorial + +** awk examples + + Compare two text files + + $ awk ' +NR==FNR { # process b.txt or the first file + seen[$0] # hash words to hash seen + next # next word in b.txt +} # process a.txt or all files after the first +!($0 in seen)' b.txt a.txt # if word is not hashed to seen, output it + + + awk ' + NR==FNR { + seen[$0] + next + } + !($0 in seen)' diagnostico_es_2022-03-21.org ../reunion/reunion_2022_03_20.org + + git --diff diagnostico_es_2022-03-21.org ../reunion/reunion_2022_03_20.org + +* References + + - ~awk~ info manual diff --git a/tutorial/listing_process.org b/tutorial/listing_process.org new file mode 100644 index 0000000..843e830 --- /dev/null +++ b/tutorial/listing_process.org @@ -0,0 +1,25 @@ +* List process + +Use ~ps~, ~top~ or ~htop~ to list process: + + * ~ps~ reports a snapshot of the current process + +: ps aux | less + + * ~top~ display dynamic real-time view of linux process + +: top + + * ~htop~ displays an interactive process viewer + +: htop + +To kill a process use: + +: kill [PID] + +or + +: pkill [PID] + +PID = process identificator diff --git a/tutorial/mail-listc b/tutorial/mail-listc new file mode 100644 index 0000000..a402e01 --- /dev/null +++ b/tutorial/mail-listc @@ -0,0 +1,11 @@ + Amelia 555-5553 amelia.zodiacusque@gmail.comF + Anthony 555-3412 anthony.asserturo@hotmail.com A + Becky555-7685 becky.algebrarum@gmail.com A + Bill 555-1675 bill.drowning@hotmail.com A + Broderick555-0542 broderick.aliquotiens@yahoo.com R + Camilla 555-2912 camilla.infusarum@skynet.be R + Fabius 555-1234 fabius.undevicesimus@ucb.eduF + Julie555-6699 julie.perscrutabor@skeeve.com F + Martin 555-6480 martin.codicibus@hotmail.comA + Samuel 555-3430 samuel.lanceolis@shu.eduA + Jean-Paul555-2127 jeanpaul.campanorum@nyu.edu R diff --git a/tutorial/manuals.org b/tutorial/manuals.org new file mode 100644 index 0000000..5cebb23 --- /dev/null +++ b/tutorial/manuals.org @@ -0,0 +1,43 @@ +* Manuals + +To explore the manuals use the command ~man~ or ~info~ followed by the name of the function or program + +#+begin_src bash +man +#+end_src + +#+RESULTS: +| What manual page do you want? | +| For example, try 'man man'. | + +Search for information about the manual interface within ~man~ + +: man man + +Description of the system hierarchy + +: man hier + +Showing only the first four lines of "info" interface + +#+begin_src bash +info | head -4 +#+end_src + +#+RESULTS: +| File: | dir, | Node: | Top, | This | is | the | top | of | the | INFO | tree. | +| | | | | | | | | | | | | +| This | is | the | Info | main | menu | (aka | directory | node). | | | | +| A | few | useful | Info | commands: | | | | | | | | + +Search for ~info~ page about Bash shell features + +: info bash + +The manuals can also be accessed from emacs using "M-x" (using the "meta" key or CTRL + x) + +: M-x info + +: M-x man + +: M-x woman diff --git a/tutorial/move_files.org b/tutorial/move_files.org new file mode 100644 index 0000000..12e56d6 --- /dev/null +++ b/tutorial/move_files.org @@ -0,0 +1,34 @@ +* Move or rename + +Use "~mv~ source destination" command + +: mv /home/myuser/text.txt /home/myuser/Documents/text.csv + +Example: moving the ".config" files to ".config3", then moving +".config1" to ".config" to arrange configuration archives. + +This creates a copy of each file in the same directory + +: pwd # check where are you now +: # moving files +: mv file1.txt file3.txt + +*Moving multiple files* can be possible. Selecting all the files ending +in ".mp3" within Downloads + +: mv ~/Downloads/*.mp3 ~/Music/ + +*Moving multiple* files included within a text file. Files are included in "filesmv2.txt" and are moved to +"tmpfiles" directory. "t" argument stands for "target directory" + +Each line in the "txt" file looks like this: +'/home/user/file1.pdf' # original + +: $ cat filesmv2.txt | xargs mv -t ~/tmpfiles + +Source: [[https://unix.stackexchange.com/questions/115734/move-file-by-list-in-file-with-leading-whitespace][stackexchange]] + +*Moving multiple files* using wildcards. This moves all files containing the sequence "nasa" in the middle of +the name. '*' indicates that there are characters or numbers before and after the word "nasa" + +: mv *roco* -t ./direct diff --git a/tutorial/redirect_output.org b/tutorial/redirect_output.org new file mode 100644 index 0000000..390edb3 --- /dev/null +++ b/tutorial/redirect_output.org @@ -0,0 +1,86 @@ + +* Redirect input, output and standard error + +Everything in GNU systems is a file. The keyboard and the terminal are also a file. +The keyboard is used for input and the terminal is used by commands as output. + +The files can be found in directory "fd", which stands for file descriptor) + +#+begin_example bash + cd /dev/fd/ + ls -l +#+end_example + +#+RESULTS: +| total | 0 | | | | | | | | | | +| lr-x------ | 1 | user | user | 64 | dec | 15 | 10:31 | 0 | -> | /tmp/babel-yl1RTd/ob-input-izpXuk | +| l-wx------ | 1 | user | user | 64 | dec | 15 | 10:31 | 1 | -> | pipe:[42063] | +| lr-x------ | 1 | user | user | 64 | dec | 15 | 10:31 | 17 | -> | /dev/pts/0 | +| l-wx------ | 1 | user | user | 64 | dec | 15 | 10:31 | 2 | -> | /tmp/emacsA1M18o | + + * standard input stream is bound to /dev/fd/0 + * standard output (stout) stream is bound to /dev/fd/1 + * standard errror (stderr) stream is bound to /dev/fd/2 + +During interaction a terminal gets written to stdin (dev/fd/0), which +a command read. The command then do an action and writes the output +(stout or stderr) where it will read by the terminal and is displayed +to the user. + +To redirect use the operator `>` as follows: + * `command > file_to_redirect` + +The operator `>` redirects stout, i.e., is the same that 1>. This code +creates a new file with the list of files present in the actual directory: + +#+begin_example bash + ls -l > file_redirect.txt + cat file_redirect.txt +#+end_example + +#+RESULTS: +| total | 32 | | | | | | | | +| -rw-r--r-- | 1 | user | user | 15782 | dec | 15 | 10:49 | bash_tutorial.org | +| -rw-r--r-- | 1 | user | user | 0 | dec | 15 | 10:49 | file_redirect.txt | +| -rw-r--r-- | 1 | user | user | 11895 | dec | 9 | 17:44 | markdown.md | +| -rw-r--r-- | 1 | user | user | 121 | dec | 9 | 17:17 | README.org | + +Use "2>&1" to redirect stderr with the stout. Using an arbitrary word and redirect it +to the file should print a warning message that is redirected to the file: + +#+begin_example bash + ls -l > file_redirect.txt + paco >> file_redirect.txt 2>&1 + cat file_redirect.txt +#+end_example + +#+RESULTS: +| total | 32 | | | | | | | | +| -rw-r--r-- | 1 | user | user | 15995 | dec | 15 | 12:39 | bash_tutorial.org | +| -rw-r--r-- | 1 | user | user | 0 | dec | 15 | 13:41 | file_redirect.txt | +| -rw-r--r-- | 1 | user | user | 11895 | dec | 9 | 17:44 | markdown.md | +| -rw-r--r-- | 1 | user | user | 121 | dec | 9 | 17:17 | README.org | +| bash: | line | 2: | paco: | command | not | found | | | + + +Use the "<" operator to pass commands to the file: + +#+begin_example bash + ls -l > file_redirect.txt + paco >> file_redirect.txt 2>&1 + sort < file_redirect.txt + cat file_redirect.txt +#+end_example + +#+RESULTS: +| bash: | line | 2: | paco: | command | not | found | | | +| -rw-r--r-- | 1 | user | user | 0 | dec | 15 | 13:44 | file_redirect.txt | +| -rw-r--r-- | 1 | user | user | 121 | dec | 9 | 17:17 | README.org | +| -rw-r--r-- | 1 | user | user | 16501 | dec | 15 | 13:41 | bash_tutorial.org | +| total | 24 | | | | | | | | +| total | 24 | | | | | | | | +| -rw-r--r-- | 1 | user | user | 16501 | dec | 15 | 13:41 | bash_tutorial.org | +| -rw-r--r-- | 1 | user | user | 0 | dec | 15 | 13:44 | file_redirect.txt | +| -rw-r--r-- | 1 | user | user | 121 | dec | 9 | 17:17 | README.org | +| bash: | line | 2: | paco: | command | not | found | | | + diff --git a/tutorial/rmlint.org b/tutorial/rmlint.org new file mode 100644 index 0000000..c9d6dde --- /dev/null +++ b/tutorial/rmlint.org @@ -0,0 +1,44 @@ +* Use rmlint to search for duplicated or empty files + +** Install in Parabola GNU-linux + +#+begin_example sh + pacman -S rmlint +#+end_example + + +** Run in the directory you want to check for duplicated or empty files + +#+begin_example sh + rmlint -g +#+end_example + +This will create two files: + + * rmlint.sh + * rmlint.json + +The shell script can be used to delete duplicated files + +OPTIONS: + + - h Show this message. + - d Do not ask before running. + - x Keep rmlint.sh; do not autodelete it. + - p Recheck that files are still identical before removing duplicates. + - r Allow deduplication of files on read-only btrfs snapshots. (requires sudo) + - n Do not perform any modifications, just print what would be done. (implies -d and -x) + - c Clean up empty directories while deleting duplicates. + - q Do not show progress. + - k Keep the timestamp of directories when removing duplicates. + - i Ask before deleting each file + +** Execute the scripts + +#+begin_example sh + chmod +x rmlint.sh +#+end_example + +#+begin_example sh + bash -xcp rmlint.sh +#+end_example diff --git a/tutorial/run_bash_script.org b/tutorial/run_bash_script.org new file mode 100644 index 0000000..5f8a5d1 --- /dev/null +++ b/tutorial/run_bash_script.org @@ -0,0 +1,45 @@ +* Run a bash script + +** Write script + +After writing, save the file with '.sh' extension. This script will +echo the words within quotes + + #+begin_src bash + #!/bin/bash + echo "Hellow hu-hu" + #+end_src + + #+RESULTS: + : Hellow hu-hu + +** Option a: make it executable + +Use the command "chmod" to change permissions for the file + +#+begin_example bash + chmod +x script.sh +#+end_example + +Then, execute + +#+begin_example bash +./script.sh +#+end_example + +** Option b: run from terminal + +#+begin_example bash +bash script.sh +#+end_example + +Or + +#+begin_example bash +sh script.sh +#+end_example + +PS: to execute the script from any place in the machine include +the script in a directory that can be read from ~$PATH~ + +** Option c: run from graphical interface diff --git a/tutorial/run_rscript.org b/tutorial/run_rscript.org new file mode 100644 index 0000000..0f3c47e --- /dev/null +++ b/tutorial/run_rscript.org @@ -0,0 +1,8 @@ +* Run R scripts + +Write the script and save it. Then go to the directory where the script +was saved and run this code from terminal + +#+begin_src bash +Rscript script.R +#+end_src diff --git a/tutorial/search_files.org b/tutorial/search_files.org new file mode 100644 index 0000000..dc3eb49 --- /dev/null +++ b/tutorial/search_files.org @@ -0,0 +1,100 @@ +* Searching + +** Search for files + +'find' can be used with multiple arguments such as: + + * -name: search for name + * -iname: search for case-insensitive name + * -type: type of file + * f = file + * d = directory + +Search within all the directory and subdirectories by name + +#+begin_src bash +find ./ -name "gitea*" +#+end_src + +#+RESULTS: +./imagens/gitea-sm.png + +Search for all the files ending in '.png' + +#+begin_src bash +find ./ -name "*.png" +#+end_src + +#+RESULTS: +./imagens/gitea-sm.png +./files/plot.png + +Search for empty files in 'home' + +#+begin_src bash +find /home -type f -empty +#+end_src + +'find' can also be used with grep to match patterns: + +#+begin_src bash +cd ~/Documentos/dat/intro_r/answers +find . | grep -E '.js|.png' +#+end_src + +#+RESULTS: +| ./plot.png | +| ./vizjs.js | +| ./Rplot.png | +| ./bipartiteD3Script.js | +| ./demo1.js | + +To find file with different name patters, 'find' can also be used as follows: + +#+begin_src bash + find . -type f \( -name "*.org" -o -name "*.md" \) +#+end_src + +#+RESULTS: +| ./README.org | +| ./bash_tutorial.org | + +** Matching patterns + +Print lines within files that match patterns + +: grep + +Example: searching for all entries that have "root" + +#+begin_src bash +grep 'root' /etc/passwd +#+end_src + +#+RESULTS: +: root:x:0:0::/root:/bin/bash + +Additional arguments can be used with ~grep~: + * r: recursive search (within directories) + * n: print line number + * i: case-insensitive search + * '*' Wildcards to search in all the directories + +Search within files in the actual directory with wildcards + +#+begin_src bash +grep -rni IFELSE * +#+end_src + +#+RESULTS: +|answers/repl_values.R:137: mutate(Status = ifelse(Status == "almost peak" &| +|answers/categ_colum.R:40:df$lead_likely <- ifelse(grepl("UNCOVERED CURB | SERVICE", df$remarks), "non-lead", "unknown")| +|docs/vectorization.org:354:(counting number of repeated value), and =ifelse= (vectorized if...else| + +'grep' can be used also to search for files in directories as shown in the anterior +example using grep with extended regular expressions ("-E") and 'find' + +: find . | grep -E '.js|.png' + +In this example, 'find' will be passed to 'grep' and any pattern matching +will be printed diff --git a/tutorial/sed_subsitute.org b/tutorial/sed_subsitute.org new file mode 100644 index 0000000..6ffabee --- /dev/null +++ b/tutorial/sed_subsitute.org @@ -0,0 +1,30 @@ +* Using 'sed' to substitute text + +"~sed~" is a stream editor for filtering and transforming text"... + +This command in emacs editor + +: M-x woman [RET] sed + +Visits the following file with info about ~sed~ + +usr/share/man/man1/sed.1.gz + +A brief example: +I have a long comma separated text file with strings and +need to include a line break after each comma (\n) + +: cat filetest + +#+RESULTS: +|'string1',|'string2', |'string3'| + +Using ~sed~ and redirecting the output to "filetest1" + +: $ sed 's/\,/&\n/g' filetest > filetest1 + +#+RESULTS: +| 'string1', | +| 'string2', | +| 'string3' | + diff --git a/tutorial/streaming_terminal.org b/tutorial/streaming_terminal.org new file mode 100644 index 0000000..59f2e3c --- /dev/null +++ b/tutorial/streaming_terminal.org @@ -0,0 +1,21 @@ +* Streaming from terminal + +To watch a stream use video player such as 'mpv' or 'vlc' that supports streaming +And pass the streaming address as argument to the name of the media player + +#+begin_example sh + mpv https://live0.emacsconf.org/main.webm +#+end_example + +Let's say that you want to remove the image from a vide and only listen then +audio. You can use arguments in 'mpv', like this: + +#+begin_example sh + mpv https://www.dailymotion.com/video/xrjzlb --no-video +#+end_example + +You can check more information about 'mpv' in the manual: + +: man mpv + +: info mpv diff --git a/tutorial/variables.org b/tutorial/variables.org new file mode 100644 index 0000000..2b44cd6 --- /dev/null +++ b/tutorial/variables.org @@ -0,0 +1,30 @@ +* Variables and how to add a directory to $PATH + +System variables are stored in users environment + +- ~$PATH~ Finds the content of a variable ("PATH") +- "env" variables defined in shell environment + +** Add directory to path + +[[https://wiki.archlinux.org/title/Environment_variables]["Environment variables" in: Arch wiki]] + +To add a directory to the PATH for local usage, put +the following in "~/.bash_profile": + +#+begin_example bash +export PATH="${PATH}:/home/my_user/bin" +#+end_example + +This will add the directory at the end of $PATH. To update the variable, re-login or source the file: + +#+begin_example bash +source ~/.bash_profile +#+end_example + +Then check directories in "$PATH" + +#+begin_example bash +echo $PATH +#+end_example +