util

[!NOTE|label:references:]

system command

$ find . -type f | xargs -n 1 -I FILE bash -c 'echo $(file --mime-type -b FILE)'
text/plain
text/plain
text/plain
inode/x-empty
text/plain
text/plain
text/plain
text/plain
text/plain
text/plain

find commands belongs to and come from

  • belongs to

    $ type which
    which is aliased to `alias | which -a --tty-only --read-alias --show-dot --show-tilde'
    
    $ type bello
    bello is a function
    bello ()
    {
      source "${iRCHOME}/.imac"
    }
  • come from

    $ shopt -s extdebug
    
    $ declare -F _completion_loader
    _completion_loader 2219 /usr/local/Cellar/bash-completion@2/2.11/share/bash-completion/bash_completion
    
    $ declare -F _docker
    _docker 5463 /usr/local/etc/bash_completion.d/docker
    
    $ declare -F __git_ps1
    __git_ps1 340 /usr/local/etc/bash_completion.d/git-prompt.sh
    
    $ declare -F bello
    bello 79 /Users/marslo/.marslo/.marslorc
    • linux

      $ bash --debugger
      $ declare -F _docker
      _docker 5011 /usr/share/bash-completion/completions/docker

find alias come from

[!NOTE|label:references:]

$ bash -ixlc : 2>&1 | grep ...
$ zsh -ixc : 2>&1 | grep ...
  • i.e.:

    $ bash -ixlc : 2>&1 | grep 'clr='
        /Users/marslo/.marslo/.alias/docker::16: alias 'dclr=docker system prune -a -f'
        /Users/marslo/.marslo/.alias/utils::22: alias clr=clear

get command from PATH

[!NOTE|label:references:]

$ type -a kubectl
kubectl is aliased to `kubecolor'
kubectl is /Users/marslo/.docker/bin/kubectl
  • type -P

    $ type -P kubectl
    /Users/marslo/.docker/bin/kubectl
  • /usr/bin/which

    $ /usr/bin/which kubectl
    /Users/marslo/.docker/bin/kubectl
  • which --skip-alias

    $ which --skip-alias kubectl
    ~/.docker/bin/kubectl
  • shopt -u expand_aliases

    $ type -a kubectl
    kubectl is aliased to `kubecolor'
    kubectl is /Users/marslo/.docker/bin/kubectl
    
    $ shopt -u expand_aliases
    $ type -a kubectl
    kubectl is /Users/marslo/.docker/bin/kubectl
    
    $ shopt -s expand_aliases
  • check alias only

    $ echo ${BASH_ALIASES[kubectl]}
    kubecolor

get all google website

$ whois www.google.com

Whois Server Version 2.0

Domain names in the .com and .net domains can now be registered
with many different competing registrars. Go to http://www.internic.net
for detailed information.

  Server Name: WWW.GOOGLE.COM.VN
  Registrar: ENOM, INC.
  Whois Server: whois.enom.com
  Referral URL: http://www.enom.com

  Server Name: WWW.GOOGLE.COM.TW
  Registrar: ENOM, INC.
  Whois Server: whois.enom.com
  Referral URL: http://www.enom.com

  Server Name: WWW.GOOGLE.COM.TR
  Registrar: TUCOWS DOMAINS INC.
  Whois Server: whois.tucows.com
  Referral URL: http://domainhelp.opensrs.net

  Server Name: WWW.GOOGLE.COM.SA
  Registrar: OMNIS NETWORK, LLC
  Whois Server: whois.omnis.com
  Referral URL: http://domains.omnis.com

  Server Name: WWW.GOOGLE.COM.PK
  Registrar: INTERNET.BS CORP.
  Whois Server: whois.internet.bs
  Referral URL: http://www.internet.bs

  Server Name: WWW.GOOGLE.COM.PE
  Registrar: HOSTOPIA.COM INC. D/B/A APLUS.NET
  Whois Server: whois.names4ever.com
  Referral URL: http://www.aplus.net

  Server Name: WWW.GOOGLE.COM.MX
  Registrar: ENOM, INC.
  Whois Server: whois.enom.com
  Referral URL: http://www.enom.com

  Server Name: WWW.GOOGLE.COM.HK
  Registrar: GKG.NET, INC.
  Whois Server: whois.gkg.net
  Referral URL: http://www.gkg.net

  Server Name: WWW.GOOGLE.COM.DO
  Registrar: ENOM, INC.
  Whois Server: whois.enom.com
  Referral URL: http://www.enom.com

  Server Name: WWW.GOOGLE.COM.CO
  Registrar: ENOM, INC.
  Whois Server: whois.enom.com
  Referral URL: http://www.enom.com

  Server Name: WWW.GOOGLE.COM.BR
  Registrar: ENOM, INC.
  Whois Server: whois.enom.com
  Referral URL: http://www.enom.com

  Server Name: WWW.GOOGLE.COM.AU
  Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE
  Whois Server: whois.melbourneit.com
  Referral URL: http://www.melbourneit.com

  Server Name: WWW.GOOGLE.COM.AR
  Registrar: ENOM, INC.
  Whois Server: whois.enom.com
  Referral URL: http://www.enom.com

>>> Last update of whois database: Mon, 24 Feb 2014 17:24:05 UTC <<<

perm

[!NOTE|label:references:]

backup

$ find . -printf '%m\t%u\t%g\t%p\0' > file.perm

restore

while read -rd $'\0' perms user group file; do
  if [ -e "$file" ]; then
    chown "$user:$group" "$file"
    chmod "$perms" "$file"
  else
    echo "warning: $file not found"
  fi
done < file.perm

check perm

  • find & printf

    $ find $PWD -printf '%m\t%u\t%g\t%p\n' | head
    755 marslo  staff /Users/marslo
    755 marslo  staff /Users/marslo/.eclipse
    755 marslo  staff /Users/marslo/.eclipse/org.eclipse.oomph.jreinfo
    644 marslo  staff /Users/marslo/.eclipse/org.eclipse.oomph.jreinfo/defaults.properties
    644 marslo  staff /Users/marslo/.eclipse/org.eclipse.oomph.jreinfo/infos.txt
    
    $ find $PWD -printf '%M %u %g %p\n' | head
    drwxr-xr-x marslo staff /Users/marslo
    drwxr-xr-x marslo staff /Users/marslo/.eclipse
    drwxr-xr-x marslo staff /Users/marslo/.eclipse/org.eclipse.oomph.jreinfo
    -rw-r--r-- marslo staff /Users/marslo/.eclipse/org.eclipse.oomph.jreinfo/defaults.properties
  • stat

    $ stat -c '%A %a %n' *
    drwx------ 700 Applications
    drwx------ 700 Desktop
    drwx------ 700 Documents
    drwx------ 700 Downloads
    drwx------ 700 Library
    drwx------ 700 Movies
    drwx------ 700 Music
    drwx------ 700 Pictures
    drwxr-xr-x 755 Public
    drwxr-xr-x 755 mywork
    drwxr-xr-x 755 test
  • namei

    $ namei -l $PWD
    /Users/marslo
      / = drwxr-xr-x l=22 u=root/0 g=admin/80 s=704 m=07-16-2020@13:40:21
      Users = drwxr-xr-x l=6 u=root/0 g=admin/80 s=192 m=09-30-2019@04:22:36
      marslo = drwxr-xr-x l=72 u=marslo/501 g=staff/20 s=2304 m=07-16-2020@17:37:27

gpg

encrypt bash file

$ echo "ls" > script.bash; gpg -c script.bash; cat script.bash.gpg | gpg -d --no-mdc-warning | bash

install apt keys

[!TIP]

  • via gpg

    $ gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    • more options

      $ gpg --ignore-time-conflict \
            --no-options \
            --no-default-keyring \
            --homedir /tmp/tmp.Hrb5ETPac2 \
            --no-auto-check-trustdb \
            --trust-model always \
            --keyring /etc/apt/trusted.gpg \
            --primary-keyring /etc/apt/trusted.gpg \
            --keyserver keyserver.ubuntu.com \
            --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
  • via apt-key adv

    $ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
  • via apt-key add

    $ curl -sL "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF" | sudo apt-key add
  • Ghostbird/add-repository

    $ ./add-repository "https://keyserver.ubuntu.com/pks/lookup?search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef&op=get" "deb https://download.mono-project.com/repo/debian stable-buster main" mono-official-stable.list
  • others

    # dockerfile
    RUN apt install -y gnupg ca-certificates
    RUN gpg --keyserver keyserver.ubuntu.com --recv 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    RUN gpg --export 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF | tee /usr/share/keyrings/mono.gpg >/dev/null
    RUN gpg --batch --yes --delete-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    RUN echo "deb [signed-by=/usr/share/keyrings/mono.gpg] https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list
    RUN apt update
    RUN apt install -y mono-devel

inode

get inode of a file

$ l -i a_b
10224132 -rw-r--r-- 1 marslo marslo 10 Feb 21 00:43 a_b

get inodes in a folder

  • stat

    $ stat -c '%i' ~
    686476
    • equivalent to

      $ ls -id ~
      686476 /Users/marslo
    • example

      $ ls -id  /local_storage/docker
      2818591238 /local_storage/docker
  • ls

    $ ls /local_storage/docker -AiR1U |
         sed -rn '/^[./]/{h;n;};G;
             s|^ *([0-9][0-9]*)[^0-9][^/]*([~./].*):|\1:\2|p' |
         sort -t : -uk1.1,1n |
         cut -d: -f2 | sort -V |
         uniq -c | sort -rn | head -n10
         46 /Users/marslo/test/keepalived-2.0.18/lib
         29 /Users/marslo/test
         28 /Users/marslo/test/keepalived-2.0.18/doc/samples
         27 /Users/marslo/test/jenkins/vars
         23 /Users/marslo/test/keepalived-2.0.18
         22 /Users/marslo/test/keepalived-2.0.18/doc/source
         17 /Users/marslo/test/jenkins/jenkinsfile
         16 /Users/marslo/test/autosquash/.git/objects
         14 /Users/marslo/test/keepalived-2.0.18/keepalived/vrrp
         14 /Users/marslo/test/jenkins/configs/etc/yum.repos.d
  • df

     $ df -i
    Filesystem                            Type   Inodes IUsed IFree IUse% Mounted on
    /dev/disk1s5s1                        apfs     2.3G  555K  2.3G    1% /
    /dev/disk1s4                          apfs     2.3G     2  2.3G    1% /System/Volumes/VM
    /dev/disk1s2                          apfs     2.3G  1.2K  2.3G    1% /System/Volumes/Preboot
    /dev/disk1s6                          apfs     2.3G    16  2.3G    1% /System/Volumes/Update
    /Library/Input Methods/SogouInput.app nullfs   2.3G  1.8M  2.3G    1% /private/var/folders/s3/mg_f3cv54nn7y758j_t46zt40000gn/T/AppTranslocation/1E49F6C4-251F-443B-8D8A-86DA8F531F09
  • du

    $ sudo du --inodes -S ~ \
           | sort -rh \
           | sed -n '1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}' \
           | head -10
    14994 /Users/marslo/Library/Co...icrosoft User Data/OneNote/15.0/cache
    13453 /Users/marslo/Library/Gr...s/Main Profile/Files/S0/1/Attachments
    4667  /Users/marslo/Library/Caches/Google/Chrome Canary/Default/Cache
    4086  /Users/marslo/Library/Gro...ofiles/Company/Files/S0/1/Attachments
    3912  /Users/marslo/Library/Con...476b0cb6d7b78ea9f492c743c1bdfa/Avatar
    3359  /Users/marslo/Library/Con...6d7b78ea9f492c743c1bdfa/Stickers/File
    3174  /Users/marslo/Library/App...versions/3.8.6/openssl/share/man/man3
    3174  /Users/marslo/Library/App...6/openssl/share/doc/openssl/html/man3
    3174  /Users/marslo/Library/App...versions/3.7.9/openssl/share/man/man3
    3174  /Users/marslo/Library/App...9/openssl/share/doc/openssl/html/man3

check inode status

$ sudo tune2fs -l /dev/sdb1 | grep inode
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Free inodes:              234152632
First inode:              11
Journal inode:            8
First orphan inode:       44171696
Journal backup:           inode blocks

extend inode

reference:

  • check

    $ shopt | grep checkwinsize
    checkwinsize    on
  • enable

    $ shopt -s checkwinsize

readline & bind

[!NOTE]

get info

  • get current keymap

    $ bind -v | awk '/keymap/ {print $NF}'
    vi-insert
    • tricky for switch keymap

      set keymap emacs
      "\ee": vi-editing-mode
      
      set keymap vi-insert
      "\e": vi-movement-mode
      
      set keymap vi-command
      "\ee": emacs-editing-mode

Last updated