Suponha que eu tenha estes arquivos:
foo/bar/baz/test.js
foo/bar/baz/test.min.js
Se eu correr:
shopt -s globstar
shopt -s extglob
echo foo/bar/**/*!(.min).js
...que ainda assim corresponderá ao test.min.js
arquivo.
Como posso ignorar isso?
Suponha que eu tenha estes arquivos:
foo/bar/baz/test.js
foo/bar/baz/test.min.js
Se eu correr:
shopt -s globstar
shopt -s extglob
echo foo/bar/**/*!(.min).js
...que ainda assim corresponderá ao test.min.js
arquivo.
Como posso ignorar isso?
Recentemente configurei um Debian 12 VPS com uma nova empresa de hospedagem. Tem:
/media/cdrom -> cdrom0/
/media/cdrom0/
E em /etc/fstab
:
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
Os VPSs Debian da minha antiga empresa de hospedagem não têm isso. A nova empresa de hospedagem é bem conhecida e respeitável, mas fiquei surpreso, pois garante aos clientes que apenas imagens simples do Debian serão usadas, sem modificação.
Por que o dispositivo cdrom seria instalado para um VPS? Eu quero removê-lo; poderia ser necessário para algo como um processo de recuperação?
(Ou talvez meu antigo hoster desabilite o cdrom, e o novo hoster provisione corretamente o estoque debian?)
Estou usando o bash. Suponha que eu tenha um arquivo chamado filelist
, que contém uma lista de arquivos:
stuff/**/*.csv # to keep it simple (without loops), assume just one entry
#*.txt
#foo.md
#bar.bin
E quero expandir isso:
ls $(cat filelist)
Eu recebo:
ls: não é possível acessar 'stuff/**/*.csv': esse arquivo ou diretório não existe
O que eu quero é expandir isso em uma lista de arquivos que eu possa enviar para meu aplicativo principal para processamento. Como eu posso fazer isso?
Um contêiner docker baseado na scratch
imagem não possui um shell.
Então, como ele executa o binário que coloco dentro?
Os termos "permissão de arquivo" e "modo de arquivo" geralmente são usados de forma intercambiável. No entanto, algumas ferramentas usam exclusivamente um termo ou outro. Curiosamente, a venerável chmod
ferramenta refere-se especificamente ao "modo de arquivo".
Existe alguma diferença técnica ou histórica entre eles?
Minha empresa de hospedagem VPS injeta "extras" em novas imagens Debian (e outras) VPS - scripts, configuração de rede, telemetria, etc.
Como posso comparar um novo VPS com a imagem oficial, para ver quais alterações foram feitas pela empresa de hospedagem?
Eu usei o alias ssh
para autossh -M0
por conveniência, e funciona bem.
No entanto, sempre sai com erro, o que causa problemas com meus scripts.
por exemplo
ssh me@myserver 'true' # equivalent to: autossh -M0 me@myserver 'true'
echo $? # 1
Como faço para corrigir isso?
(Uma solução alternativa em scripts, para usar /usr/bin/ssh
em vez de ssh
. Mas gostaria de corrigir isso, se possível.)
Eu carrego arquivos para implantação em um diretório remoto. Esse servidor remoto possui um script que observa o diretório em busca de novos arquivos:
inotifywait --monitor --event create --format '%f' --quiet /foo
Quando um novo arquivo é detectado, o processo de implantação é iniciado.
O problema é que o upload leva tempo - e o arquivo é detectado assim que começa a ser gravado. Portanto, a implantação falha ao tentar usar um arquivo parcial.
Existe uma maneira de debounce inotifywait
para que ele relate o novo arquivo somente depois que ele for totalmente criado?
Para alguns apt
pacotes, não quero pequenas atualizações.
É possível configurar o apt para ignorar atualizações menores para um pacote específico e não me perguntar sobre essas versões mesmo ao atualizar seu banco de dados ( apt update
).
UPDATE
(Isso é tecnicamente possível, já que os pacotes apt não precisam seguir o versionamento semântico?)
Tem flatpak
uma opção de "limpeza" de desinstalação como apt
?
Objetivo: desinstalar um aplicativo e todos os arquivos de configuração .
Um script para encerrar um servidor em uma determinada porta:
#!/bin/bash
PORT="$1"
SIGNAL="$2"
if [ "${SIGNAL}" != "" ]; then SIGNAL=" -${SIGNAL}"; fi
lsof -i:"${PORT}" |\
grep -e "localhost:${PORT}" -e TCP -e LISTEN |\
tr -s ' ' |\
cut -d' ' -f2 |\
tee /dev/tty |\
xargs --no-run-if-empty kill "$SIGNAL"
Funciona:killbyport 4242
Mas se eu quiser fazer um kill -9
eu faria: killbyport 4242 9
, e esse erro:
kill: (-9): No such process
Os xargs
e kill
não estão cooperando – como faço para corrigir isso?
(PS: Eu quero consertar este script, em vez de alterá-lo para outra coisa. Está quase funcionando.)
Se eu montar um Kindle (na minha máquina Ubuntu), ele me mostra vários arquivos e bancos de dados relacionados a livros, metadados, etc.
Mas não vejo o sistema operacional real e seus arquivos - estou vendo-os e não percebo, ou estão ocultos de alguma forma? Como faço para acessar o sistema operacional real?
(O que procuro é encontrar os arquivos de log. A última atualização estragou meu dispositivo e espero que haja um registro da versão anterior do firmware em algum lugar, para que eu possa reverter.)
eu tenho isto
sftp -q my_host:my_dir 1>/dev/null 2>&1 <<EOF
some_command
some_command
some_command
some_command
put foo bar
some_command
exit
EOF
Isso suprime:
-q
1>/dev/null 2>&1
(por exemplo, não é possível excluir o arquivo, o diretório existe)Mas também suprime put
o medidor de progresso de .
Posso mostrar o progresso, mas não informações e erros?
Eu quero que o tmux inicie no login ssh.
O conselho típico é adicionar isso a ~/.bashrc
:
if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ] && [[ $- =~ i ]]; then
tmux attach-session -t mysession 2>/dev/null || tmux new-session -s mysession
fi
Mas quando eu faço login, recebo este erro do tmux:
servidor perdido
...E então estou na festança como de costume.
ATUALIZAR
Quando eu adiciono um sono:
if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ] && [[ $- =~ i ]]; then
tmux attach-session -t mysession 2>/dev/null || $(sleep 1 && tmux new-session -s mysession)
fi
...então funciona. Estranho! Qual é a razão?
Existem duas maneiras de alterar o editor padrão:
update-alternatives --set editor /bin/nano
export EDITOR='/bin/nano'
~/.bashrc
(único usuário) ou /etc/profile.d/
(todos os usuários)Existe alguma diferença/nuance entre eles? por exemplo, disponibilidade em várias distribuições?
ATUALIZAR
Há tambémselect-editor
Eu adicionei isso ~/.bashrc
para fornecer cauda colorida:
tailc () {
tail $@ | ccze
}
E eu posso executá-lo assim:tailc -f -n 10 foo/log.txt
Mas não posso usá-lo em um arquivo privilegiado:
sudo tailc -f -n 10 /var/log/syslog
Erro:
bash: tailc: comando não encontrado
Eu sei que posso fazer assim: sudo bash -i -c '...'
mas quero saber se consigo rodar sem aquela sintaxe mais complicada. O que posso fazer para poder apenas digitar sudo tailc ...
?
BTW, eu adicionei essa função /root/.bashrc
também, mas isso também não ajudou.
Sou novo no iptables e confuso com as mudanças da CLI ao longo dos anos. Vejo muitos exemplos que parecem fazer a mesma coisa, mas com sintaxe diferente.
Estes são exatamente os mesmos , ou há alguma nuance entre eles:
-p tcp -m state --state NEW
-p tcp -m conntrack --ctstate NEW
-p tcp -m tcp --syn
/-p tcp --syn
Se forem exatamente iguais, usarei -p tcp --syn
, o que simplificaria/encurtaria minha configuração.
Estou mudando do ufw para o iptables.
Existe uma regra padrão de "limite" no ufw, que entra em ação se um endereço IP iniciar mais de 6 conexões em 30 segundos ( sudo ufw limit ssh
). Eu uso essa regra de limite para tráfego SSH (porta 22).
Eu li tantas maneiras diferentes de fazer isso no iptables, que é apenas confuso. Não tenho certeza se devo usar o connlimit
ou limit
ou algum outro módulo.
Qual é a maneira mais simples de mapear essa regra 1:1 para o iptables?
Eu não uso snap e nunca instalo pacotes snap.
Em um novo Ubuntu Server 18.04, snap list
mostra:
Nenhum snap está instalado ainda.
É seguro removê-lo?
Não tenho certeza de quais dependências estranhas estão acontecendo em segundo plano - então não quero quebrar acidentalmente o sistema agora ou no futuro. (Eu quero ter certeza, porque na área de trabalho do Ubuntu, mesmo que eu não use o snap, o próprio sistema operacional usa.)
Eu quero que um serviço seja iniciado sob demanda e não na inicialização. Para fazer isso, eu poderia usar a ativação do soquete do systemd (com os arquivos de serviço e soquete).
Mas este é um servidor com recursos limitados, portanto, após algum tempo (por exemplo, 1 hora) de inatividade, quero interromper o serviço (até que seja acionado novamente). Como eu posso fazer isso?
Eu olhei através de alguma documentação, mas não consigo descobrir se isso é suportado.
Atualização:
Supondo que isso não seja suportado, o caso de uso provavelmente ainda é bastante comum. Qual seria uma boa maneira / solução alternativa para conseguir isso?