spliting the tutorial-adding an index
This commit is contained in:
parent
05373617ac
commit
7e4c82d12a
21
README.org
21
README.org
|
@ -2,4 +2,23 @@
|
||||||
|
|
||||||
Tutorial with some basic commands, tips and options to use bash
|
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]]
|
||||||
|
|
|
@ -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]]
|
|
|
@ -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]]
|
|
@ -0,0 +1 @@
|
||||||
|
compartido@compartido.3161:1656845041
|
|
@ -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.
|
|
@ -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]]
|
|
@ -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
|
||||||
|
|
|
@ -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]]
|
|
@ -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]]
|
|
@ -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 |
|
||||||
|
|
|
@ -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
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
BEGIN { print " Dont Panic!" }
|
|
@ -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
|
|
@ -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:
|
||||||
|
| [01;32mcompartido@compartido[00m: | [01;34m~/Documentos/GNU/bash/bash-tutorial[00m |
|
||||||
|
| [01;32mcompartido@compartido[00m: | [01;34m~/Documentos/GNU/bash/bash-tutorial[00m |
|
||||||
|
|
||||||
|
#+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
|
||||||
|
: [01;32mcompartido@compartido[00m: [01;34m~/Documentos/GNU/bash/bash-tutorial[00m
|
||||||
|
|
||||||
|
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
|
||||||
|
: [01;32mcompartido@compartido[00m: [01;34m~/Documentos/GNU/bash/bash-tutorial[00m
|
||||||
|
|
||||||
|
** 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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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 | | |
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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' |
|
||||||
|
|
|
@ -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
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue