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" }
$ 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
$ curl -sL "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA6A19B38D3D831EF" | sudo apt-key add
$ ./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
# 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 -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
$ 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
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