spliting the tutorial-adding an index

This commit is contained in:
Jose 2022-07-03 16:06:29 -03:00
parent 05373617ac
commit 7e4c82d12a
27 changed files with 1242 additions and 819 deletions

View File

@ -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]]

View File

@ -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]]

View File

@ -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]]

View File

@ -0,0 +1 @@
compartido@compartido.3161:1656845041

51
tutorial/add_user.org Normal file
View File

@ -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.

206
tutorial/bash_tutorial.org Normal file
View File

@ -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]]

View File

@ -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

28
tutorial/croc.org Normal file
View File

@ -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]]

View File

@ -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]]

View File

@ -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 |

View File

@ -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

View File

@ -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

1
tutorial/file.awk Normal file
View File

@ -0,0 +1 @@
BEGIN { print " Dont Panic!" }

View File

@ -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

107
tutorial/gawk.org Normal file
View File

@ -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

View File

@ -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

11
tutorial/mail-listc Normal file
View File

@ -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

43
tutorial/manuals.org Normal file
View File

@ -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

34
tutorial/move_files.org Normal file
View File

@ -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

View File

@ -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