Linux Tips: Difference between revisions
(13 intermediate revisions by the same user not shown) | |||
Line 12: | Line 12: | ||
nc -l -p 2342 | tar -C /target/dir -xzf - |
nc -l -p 2342 | tar -C /target/dir -xzf - |
||
#On SOURCE box, launch the sender |
#On SOURCE box, launch the sender |
||
tar -cz /source/dir | nc Target_Box 2342 |
tar -cz /source/dir | nc -w 3 Target_Box 2342 |
||
</source> |
</source> |
||
=== Using tar === |
|||
Say you want to copy from directory <tt>/mnt/img</tt> to <tt>/mnt/usb</tt> |
|||
<source lang="bash"> |
|||
(cd /mnt/img ; tar -cf - *) | (cd /mnt/usb ; tar -xvf -) |
|||
sync # Flush file system buffers |
|||
</source> |
|||
=== Other === |
|||
See [http://en.gentoo-wiki.com/wiki/Fast_Copy here] |
|||
== Fast Search == |
== Fast Search == |
||
=== Locate === |
|||
'''{{red|! Power Tip !}}''' Use '''<tt>locate</tt>''' to find files rapidly by their names. <tt>locate</tt> is very lightweight (hardly notice it's running) and very efficient. It works for any file in any local file system. |
'''{{red|! Power Tip !}}''' Use '''<tt>locate</tt>''' to find files rapidly by their names. <tt>locate</tt> is very lightweight (hardly notice it's running) and very efficient. It works for any file in any local file system. |
||
=== Recoll, Beagle, Google Desktop... === |
|||
See [[Linux Software]] for more powerful search tool (searching in file content). |
|||
=== |
=== ag - the Silver Searcher === |
||
'''ag''' is a much faster alternative to <code>grep</code> (in fact a faster <code>ack</code>). See [[Linux Commands]]. |
|||
See [http://en.gentoo-wiki.com/wiki/Fast_Copy here] |
|||
=== rg - ripgrep === |
|||
'''rg''' is like Ag, but even faster. See [[Linux Commands]]. |
|||
=== ug - ugrep === |
|||
'''ug''' is like rg, but even faster in some benchmark (however on my machine, ripgrep is consistenly 2x faster than ug built from source). See [[Linux Commands]]. |
|||
=== fd === |
|||
'''fd''' is a simpler <code>find</code>. See [[Linux Commands]]. |
|||
== Password prompt during boot == |
|||
This is a tip for GDM but similar tip works for KDM. It prompts for a password needed to mount a password protected HOME partition [https://bugs.launchpad.net/ubuntu/+source/cryptsetup/+bug/484272]. |
|||
Add at the end of <tt>/etc/gdm/Init/Default</tt>: |
|||
<source lang="text"> |
|||
DEVICE=/dev/sda6 |
|||
while [ ! -e /dev/mapper/cryptohome ]; do |
|||
zenity --entry --hide-text --text="Enter your passphrase:" | cryptsetup luksOpen $DEVICE cryptohome |
|||
done |
|||
mount /dev/mapper/cryptohome /home |
|||
</source> |
|||
== Open File Manager at Current Directory from Terminal == |
|||
Source [http://www.ubuntugeek.com/ubuntu-tiphow-to-open-a-file-manager-of-the-current-directory-in-the-terminal.html] |
|||
<source lang="bash"> |
|||
xdg-open . # Works for any desktop |
|||
gnome-open . # In Gnome |
|||
nautilus . # Open Nautilus specifically |
|||
</source> |
|||
== Fix 'Operation not permitted' when removing (rm) a file as root == |
|||
We try to remove a file as root but get an ''Operation not permitted'' error. How is that possible? |
|||
<source lang="bash"> |
|||
ls -l |
|||
# -rw-r--r-- 1 root root 144 Mar 14 07:33 extlinux.conf |
|||
# -r-------- 1 root root 60K Mar 14 07:06 ldlinux.sys |
|||
rm ldlinux.sys |
|||
# rm: cannot remove ‘ldlinux.sys’: Operation not permitted |
|||
</source> |
|||
Two possibilities: |
|||
* The '''immutable''' file attribute is set |
|||
* The filesystem is mounted read-only. |
|||
In the latter case, just mount the filesystem with write access. In the former case, use <code>chattr</code>: |
|||
<source lang="bash"> |
|||
lsattr ldlinux.sys |
|||
# ----i----------- ldlinux.sys |
|||
chattr -i ldlinux.sys |
|||
rm ldlinux.sys |
|||
</source> |
|||
== Shell tips == |
|||
=== Linux documentation === |
|||
<source lang="bash"> |
|||
man hier # Documentation on filesystem, /bin, /etc, /usr... |
|||
man builtins # bash built-in commands (part of man bash) |
|||
man ascii |
|||
</source> |
|||
=== Color in Shell === |
|||
Some tips to provide a more colorful shell experience. |
|||
* '''cat''' with color syntax highlighting |
|||
* Colored diff '''colordiff''' |
|||
* Color with '''git''' |
|||
* Preserve color with '''less''' |
|||
* Colors in '''man''' pages (using either ''less'' or ''most'' as pager) |
|||
* Vim-based color viewer '''view''' |
|||
=== <code>cat</code> with highlighting === |
|||
The examples below create a script '''ccat''', similar to ''cat'' but with syntax highlighting. |
|||
;Using <code>source-highlight</code> [http://superuser.com/questions/84426/is-there-any-option-let-cat-command-output-with-color] |
|||
Define a script {{file|ccat}}: |
|||
<source lang="bash"> |
|||
#!/bin/bash |
|||
src-hilite-lesspipe.sh $1 |
|||
</source> |
|||
The included ''less'' script is also nice. Add to your '''.bashrc''': |
|||
<source lang="bash"> |
|||
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s" |
|||
export LESS=FRX # At least R! |
|||
</source> |
|||
Some examples |
|||
<source lang="bash"> |
|||
ccat file.c |
|||
ccat file.c | less -FRX |
|||
</source> |
|||
;Using <code>highlight</code> [http://www.andre-simon.de/doku/highlight/en/regex.php] |
|||
<code>highlight</code> comes with package {{deb|highlight}}. Example of script: |
|||
<source lang="bash"> |
|||
#!/bin/bash |
|||
highlight -O ANSI "$1" |
|||
</source> |
|||
Note that highlight can produce output in many different format (e.g. html) |
|||
;Alternatives |
|||
On Ubuntu: |
|||
* <tt>python-pygments</tt> |
|||
* <tt>[http://www.palfrader.org/code2html/ code2html]</tt> |
|||
* <tt>[http://www.gnu.org/software/src-highlite/ source-highlight]</tt> (a dependency of ''qgit'') |
|||
=== <tt>colordiff</tt> === |
|||
'''colordiff''' is a Perl wrapper around ''diff'' to show diff outputs in color: |
|||
<source lang="bash"> |
|||
colordiff file1 file2 # Diff in colors |
|||
alias diff="colordiff -W ${COLUMNS:-130}" # Handy alias that also adds auto-width |
|||
</source> |
|||
Note that ''colordiff'' output can be piped through ''less'', or ''colordiff'' can also take a diff as standard input: |
|||
<source lang="bash"> |
|||
colordiff file1 file2 | less -FSRX # Page output |
|||
<patchfile colordiff # Colorize stdin |
|||
</source> |
|||
=== <tt>git</tt> === |
|||
See [[Git#Configuration|Git (configuration section)]]. |
|||
=== <tt>less</tt> === |
|||
Use option '''-R''' to preserve ANSI color escape sequence in input: |
|||
<source lang="bash"> |
|||
colordiff file1 file2 | less -R # As command-line option |
|||
export LESS=R # Better use env. var $LESS |
|||
colordiff file1 file2 | less # ... no need to give -R anymore |
|||
export LESS=FRX # Even better |
|||
colordiff file1 file2 | less # ... quit asap if less than 1-page |
|||
</source> |
|||
In ''git'', ''less'' is called with the following option: |
|||
<source lang="bash"> |
|||
export lESS=FSRX # Default git options |
|||
# ... F - quit if less than 1-page |
|||
# ... S - truncate long lines |
|||
# ... R - preserve color |
|||
# ... X - don't initialize term (no clear) |
|||
</source> |
|||
=== <tt>man</tt> === |
|||
To have colors in ''manpages'', the simplest is to install the package ''most'': |
|||
<source lang="bash"> |
|||
sudo apt-get install most |
|||
</source> |
|||
And then tell how you want to use it: |
|||
<source lang="bash"> |
|||
# SYSTEM-WIDE |
|||
sudo update-alternatives --config pager # To select 'most' as default pager system-wide |
|||
# per USER - in ~/.bashrc |
|||
export PAGER=most # To select 'most' as default pager for that user |
|||
alias man="PAGER=most man" # To select 'most' only for manpages |
|||
</source> |
|||
The drawback is that ''most'' does not support the same keyboard shortcuts as ''less''. If you still want colors in your man page, you can get the same effect with ''less'' thanks to some bash script-fu magic (see [http://nion.modprobe.de/blog/archives/569-colored-manpages.html]) |
|||
<source lang="bash"> |
|||
mkdir ~/.terminfo/ |
|||
cd ~/.terminfo |
|||
wget http://nion.modprobe.de/mostlike.txt # Get the new terminfo description |
|||
tic mostlike.txt # Compile it using terminfo entry-description compiler |
|||
</source> |
|||
Now just define the following alias in <tt>~/.bashrc</tt>: |
|||
<source lang="bash"> |
|||
alias man="TERMINFO=~/.terminfo TERM=mostlike PAGER=LESS LESS=C man" # LESS=C can be skipped or adapted |
|||
</source> |
|||
Unfortunately the supplied terminfo does not support scrolling the pages with the mousewheel as it used to. Another alternative is to give ''less'' some explicit termcap commands (see [http://tips4linux.com/color-man-pages-in-linux/]): |
|||
<source lang="bash"> |
|||
export LESS_TERMCAP_mb=$'\E[01;31m' |
|||
export LESS_TERMCAP_md=$'\E[01;37m' |
|||
export LESS_TERMCAP_me=$'\E[0m' |
|||
export LESS_TERMCAP_se=$'\E[0m' |
|||
export LESS_TERMCAP_so=$'\E[01;44;33m' |
|||
export LESS_TERMCAP_ue=$'\E[0m' |
|||
export LESS_TERMCAP_us=$'\E[01;32m' |
|||
</source> |
|||
=== <tt>view</tt> === |
|||
''view'' is ''vim'' front-end document reader. ''view'' can highlight syntax of files based on their filename, but also based on their content (unlike ''source-highlight''). Use <code>view -</code> to view standard input: |
|||
<source lang="bash"> |
|||
view file.c # Detect .c format from filename |
|||
git diff HEAD^ | view - # Git - Will detect diff format from content |
|||
svn diff | view - # Svn - idem |
|||
</source> |
|||
=== Pager === |
|||
;Manpages |
|||
* By default uses <tt>pager -s</tt> |
|||
** <tt>/usr/bin/pager</tt> is a symlink to <tt>/etc/alternatives/pager</tt>. |
|||
* Overridden by env var '''$PAGER'''. |
|||
* Overridden by env var '''$MANPAGER'''. |
|||
* Overridden by cli option '''-P pager'''. |
|||
== Config / Tuning == |
|||
=== Vivid === |
|||
'''[https://github.com/sharkdp/vivid Vivid]''' is a generator for the LS_COLORS environment variable that controls the colorized output of ls, tree, fd, bfs, dust and many other tools. |
|||
Usage: |
|||
<source lang="bash"> |
|||
export LS_COLORS="$(vivid generate molokai)" |
|||
</source> |
|||
=== Exa === |
|||
'''[https://github.com/ogham/exa exa]''' is a modern replacement for the file listing utility <code>ls</code> |
|||
<source lang="bash"> |
|||
exa --long --tree --level=3 |
|||
</source> |
Latest revision as of 08:02, 17 November 2023
Disable Auto-Mount
You can temporarily disable automount by doing as root [1]:
$ rcdbus stop
Fast Copy
Using Netcat
When copying a directory that contains a lot of small files (like 1000+ files <1kB), it is faster to actually generate a tarball of the directory and have it unpacked on the fly on the destination server [2]:
# On DESTINATION box, launch first the listener
nc -l -p 2342 | tar -C /target/dir -xzf -
#On SOURCE box, launch the sender
tar -cz /source/dir | nc -w 3 Target_Box 2342
Using tar
Say you want to copy from directory /mnt/img to /mnt/usb
(cd /mnt/img ; tar -cf - *) | (cd /mnt/usb ; tar -xvf -)
sync # Flush file system buffers
Other
See here
Fast Search
Locate
! Power Tip ! Use locate to find files rapidly by their names. locate is very lightweight (hardly notice it's running) and very efficient. It works for any file in any local file system.
Recoll, Beagle, Google Desktop...
See Linux Software for more powerful search tool (searching in file content).
ag - the Silver Searcher
ag is a much faster alternative to grep
(in fact a faster ack
). See Linux Commands.
rg - ripgrep
rg is like Ag, but even faster. See Linux Commands.
ug - ugrep
ug is like rg, but even faster in some benchmark (however on my machine, ripgrep is consistenly 2x faster than ug built from source). See Linux Commands.
fd
fd is a simpler find
. See Linux Commands.
Password prompt during boot
This is a tip for GDM but similar tip works for KDM. It prompts for a password needed to mount a password protected HOME partition [3].
Add at the end of /etc/gdm/Init/Default:
DEVICE=/dev/sda6
while [ ! -e /dev/mapper/cryptohome ]; do
zenity --entry --hide-text --text="Enter your passphrase:" | cryptsetup luksOpen $DEVICE cryptohome
done
mount /dev/mapper/cryptohome /home
Open File Manager at Current Directory from Terminal
Source [4]
xdg-open . # Works for any desktop
gnome-open . # In Gnome
nautilus . # Open Nautilus specifically
Fix 'Operation not permitted' when removing (rm) a file as root
We try to remove a file as root but get an Operation not permitted error. How is that possible?
ls -l
# -rw-r--r-- 1 root root 144 Mar 14 07:33 extlinux.conf
# -r-------- 1 root root 60K Mar 14 07:06 ldlinux.sys
rm ldlinux.sys
# rm: cannot remove ‘ldlinux.sys’: Operation not permitted
Two possibilities:
- The immutable file attribute is set
- The filesystem is mounted read-only.
In the latter case, just mount the filesystem with write access. In the former case, use chattr
:
lsattr ldlinux.sys
# ----i----------- ldlinux.sys
chattr -i ldlinux.sys
rm ldlinux.sys
Shell tips
Linux documentation
man hier # Documentation on filesystem, /bin, /etc, /usr...
man builtins # bash built-in commands (part of man bash)
man ascii
Color in Shell
Some tips to provide a more colorful shell experience.
- cat with color syntax highlighting
- Colored diff colordiff
- Color with git
- Preserve color with less
- Colors in man pages (using either less or most as pager)
- Vim-based color viewer view
cat
with highlighting
The examples below create a script ccat, similar to cat but with syntax highlighting.
- Using
source-highlight
[5]
Define a script ccat:
#!/bin/bash
src-hilite-lesspipe.sh $1
The included less script is also nice. Add to your .bashrc:
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=FRX # At least R!
Some examples
ccat file.c
ccat file.c | less -FRX
- Using
highlight
[6]
highlight
comes with package highlight. Example of script:
#!/bin/bash
highlight -O ANSI "$1"
Note that highlight can produce output in many different format (e.g. html)
- Alternatives
On Ubuntu:
- python-pygments
- code2html
- source-highlight (a dependency of qgit)
colordiff
colordiff is a Perl wrapper around diff to show diff outputs in color:
colordiff file1 file2 # Diff in colors
alias diff="colordiff -W ${COLUMNS:-130}" # Handy alias that also adds auto-width
Note that colordiff output can be piped through less, or colordiff can also take a diff as standard input:
colordiff file1 file2 | less -FSRX # Page output
<patchfile colordiff # Colorize stdin
git
See Git (configuration section).
less
Use option -R to preserve ANSI color escape sequence in input:
colordiff file1 file2 | less -R # As command-line option
export LESS=R # Better use env. var $LESS
colordiff file1 file2 | less # ... no need to give -R anymore
export LESS=FRX # Even better
colordiff file1 file2 | less # ... quit asap if less than 1-page
In git, less is called with the following option:
export lESS=FSRX # Default git options
# ... F - quit if less than 1-page
# ... S - truncate long lines
# ... R - preserve color
# ... X - don't initialize term (no clear)
man
To have colors in manpages, the simplest is to install the package most:
sudo apt-get install most
And then tell how you want to use it:
# SYSTEM-WIDE
sudo update-alternatives --config pager # To select 'most' as default pager system-wide
# per USER - in ~/.bashrc
export PAGER=most # To select 'most' as default pager for that user
alias man="PAGER=most man" # To select 'most' only for manpages
The drawback is that most does not support the same keyboard shortcuts as less. If you still want colors in your man page, you can get the same effect with less thanks to some bash script-fu magic (see [7])
mkdir ~/.terminfo/
cd ~/.terminfo
wget http://nion.modprobe.de/mostlike.txt # Get the new terminfo description
tic mostlike.txt # Compile it using terminfo entry-description compiler
Now just define the following alias in ~/.bashrc:
alias man="TERMINFO=~/.terminfo TERM=mostlike PAGER=LESS LESS=C man" # LESS=C can be skipped or adapted
Unfortunately the supplied terminfo does not support scrolling the pages with the mousewheel as it used to. Another alternative is to give less some explicit termcap commands (see [8]):
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;37m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'
view
view is vim front-end document reader. view can highlight syntax of files based on their filename, but also based on their content (unlike source-highlight). Use view -
to view standard input:
view file.c # Detect .c format from filename
git diff HEAD^ | view - # Git - Will detect diff format from content
svn diff | view - # Svn - idem
Pager
- Manpages
- By default uses pager -s
- /usr/bin/pager is a symlink to /etc/alternatives/pager.
- Overridden by env var $PAGER.
- Overridden by env var $MANPAGER.
- Overridden by cli option -P pager.
Config / Tuning
Vivid
Vivid is a generator for the LS_COLORS environment variable that controls the colorized output of ls, tree, fd, bfs, dust and many other tools.
Usage:
export LS_COLORS="$(vivid generate molokai)"
Exa
exa is a modern replacement for the file listing utility ls
exa --long --tree --level=3