- remove files with chinese character AND spaces
- remove space in filename
- Create empty files at minimum depth 4
- create a securized user
- run command for a securized user
- Git Prompt
- Improved ls
- Edit a file without vi
- Create a tunnel
- Get file magic number
- Get last created folders in current path
- Tar
- Find exec multi args command
- Make sure files created in folder inherit group ownership
- Rsync in place of scp
- Update apt keys
- Restore deleted file
- Kill a background task
- Config ssh for git
- Benchmark command line
- Know if using x11 or wayland
- Get last modified files in any folder
- Start a xsession on a server
linux
Bash
→ remove files with chinese character AND spaces
- PCRE regexp with
-P
- quote spaces with xargs + pattern
#./[机器学习]Introduction to Machine Learning.pdf
#./算法竞赛入门经典(第2版) (算法艺术与信息学竞赛).pdf
find . | grep -P '[\p{Han}]'|xargs -I '{}' rm "{}"
→ remove space in filename
prename
is a perl rewrite of rename. On archlinux its called perl-rename
and needs to be installed. Its called rename
on debian:
find . -name '*.mkv' -exec prename 's/ +/_/g' {} +
→ Create empty files at minimum depth 4
find . -mindepth 4 -type d -exec touch {}/state.json \;
→ create a securized user
useradd -m -G users -s /bin/bash <the user>
→ run command for a securized user
sudo -Hu <the user> <the command>
→ Git Prompt
Shows details about git project when in the folder
git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1
# add to bashrc
if [ -f "$HOME/.bash-git-prompt/gitprompt.sh" ]; then
GIT_PROMPT_ONLY_IN_REPO=1
source $HOME/.bash-git-prompt/gitprompt.sh
fi
→ Improved ls
alias ll="exa -l --git --all --octal-permissions --sort modified --time-style long-iso --group --color=auto --color-scale"
→ Edit a file without vi
cat - > /path/to/file
# paste the content
# then ctrl+D
→ Create a tunnel
ssh -fNTML 9432:localhost:5432 sshusername@you-server.com
Then, just launch psql, connecting to port 9432 at localhost:
psql -h localhost -p 9432 -U <username> <dbname>
→ Get file magic number
18:42 $ file -i assets/images/puml.*
assets/images/puml.png: image/png; charset=binary
assets/images/puml.webp: image/webp; charset=binary
→ Get last created folders in current path
find . -ctime -1|cut -d'/' -f2|sort -u
→ Tar
→ Tar from find
tar czf <file>.tgz `find . -name '*.json' -maxdepth 1`
→ Tar from find
tar czf <file>.tgz <folder> --exclude=<path/to/*>
→ Find exec multi args command
- write a script in the path
- make it executable
- find . -exec ./script {} ;
→ Make sure files created in folder inherit group ownership
chmod g+s <path/to/dif>
→ Rsync in place of scp
Rsync handle files with spaces in it. Just add s
=--protect-args
and quote the string
rsync -avs user@host:"path with spaces" /tmp/
→ Update apt keys
for PUBKEY in $(apt-get update 2>&1 | grep NO_PUBKEY | awk '{print $NF}')
do
wget -q "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x${PUBKEY}" -O - | sed -n '/BEGIN/,/END/p' | apt-key add - 2>/dev/null
done
→ Restore deleted file
grep -a -C 2000 "a-string-present-in-the-file" /dev/sda2 | tee recovered_data
→ Kill a background task
ctrl+z # put current task in background
jobs -p|xargs kill
→ Config ssh for git
To avoid beeing able to connect with ssh
# create a blind user
sudo adduser --disabled-password --shell /usr/bin/git-shell --gecos "User" git
# allow local user to access the folder
sudo usermod -a -G git natus
# init a git repo accessible by remote
git init --bare
# and in the authorized key, prefix with
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa <then-rsa-public-key>
also secure ssh:
if [ -z "$(command grep "^ssh-users" '/etc/group')" ]; then
command addgroup --system "ssh-users"
fi
sudo usermod -a -G ssh-users natus
command echo '
# Limit access to users of group ssh-users
AllowGroups ssh-users' >> /etc/ssh/sshd_config
→ Benchmark command line
hyperfine <command>
→ Know if using x11 or wayland
loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type
→ Get last modified files in any folder
# this excludes hidden files
find * -type f -printf "%T+ %p\n" | sort
→ Start a xsession on a server
→ from startx
As root, this will start a session for a given user:
# systemd-run --property PAMName=login \
--property User=<user-name> \
--property StandardInput=tty \
--property TTYPath=/dev/tty8 \
sh -c 'chvt 8 && startx /usr/bin/xterm -- :1'
Then the user is able to start programs with X support:
DISPLAY=:1 /usr/bin/chromium "https://blog.parisni.com"
→ from vnc server
Follow vnc install, in particular:
- start the vnc server (it will start a display, let's say :2)
- create the systemd unit to enable it at startup
- open firewall to access locally to the vnc server
- Now you can also access thought remina with vnc plugin connection
- also cron can run display apps
DISPLAY=:2 /usr/bin/chromium "https://blog.parisni.com"
This page was last modified: