Como posso pesquisar dois diretórios por arquivos com o mesmo nome, tamanho, tipo... e removê-los de um desses diretórios?
Eu tenho um projeto composto por cerca de 20 .sh
arquivos pequenos. Eu os chamo de "pequenos" porque geralmente nenhum arquivo tem mais de 20 linhas de código. Adotei uma abordagem modular porque assim sou fiel à filosofia Unix e é mais fácil para mim manter o projeto.
No início de cada .sh
arquivo, coloco #!/bin/bash
.
Simplificando, entendo que as declarações de script têm dois propósitos:
- Eles ajudam o usuário a lembrar qual shell é necessário para executar o arquivo (digamos, depois de alguns anos sem usar o arquivo).
- Eles garantem que o script seja executado apenas com um determinado shell (Bash nesse caso) para evitar comportamento inesperado caso outro shell seja usado.
Quando um projeto começa a crescer de, digamos, 5 arquivos para 20 arquivos ou de 20 para 50 arquivos (não neste caso, mas apenas para demonstrar), temos 20 ou 50 linhas de declarações de script. Eu admito, embora possa ser engraçado para alguns, parece um pouco redundante para mim usar 20 ou 50 em vez de dizer apenas 1 por projeto (talvez no arquivo principal do projeto).
Existe uma maneira de evitar essa suposta redundância de 20 ou 50 ou um número muito maior de linhas de declarações de script usando alguma declaração de script "global", em algum arquivo principal?
Estou tentando adicionar uma chave pública a um servidor, mas não quero reiniciar o serviço sshd para que ele entre em vigor. A razão é que reiniciar o serviço ssh parece ser prejudicial para outros usuários que poderiam usar o serviço ssh naquele momento. A maioria da documentação sugere adicionar uma chave pública $HOME/.ssh/authorized_keys
e reiniciar o sshd
serviço ( systemctl restart sshd
). O sistema operacional de interesse é o Linux.
Minhas perguntas são:
- O reinício do é
sshd
necessário? - Se
sshd
for reiniciado, há uma interrupção do serviço naquele momento? - Existe uma maneira de configurar a autenticação sem senha usando ssh sem precisar reiniciar o
sshd
serviço após adicionar novas chaves públicas$HOME/.ssh/authorized_keys
?
No momento, estou reescrevendo upstart
trabalhos para usar systemd
e queria saber:
Onde está o local "padrão" para umEnvironmentFile
?
Pode potencialmente entrar/etc/environment
Pode ser com todos os outros arquivos de serviço em /etc/systemd/service
, /run/systemd/system
ou /lib/systemd/system
mas não vejo nenhum outro EnvironmentFile
s nesses locais para nenhum outro Service
.
Eu também debati /etc/default/
ou/etc/<PACKAGE_NAME>
Não há um lugar "convencional" documentado para colocá-lo. Muitos dos exemplos que vi parecem usar o /tmp/<FILE_NAME>
que não faz sentido, pois /tmp
são apagados na reinicialização, e esses arquivos precisam persistir para que possam ser referenciados sempre que o Service
for iniciado ou reiniciado.
Antecedentes: Estou gerando o EnvironmentFile
tempo de pré-instalação (com scripts de manutenção) antes do pacote debian ser instalado e sei que o arquivo deve estar disponível toda vez que o serviço for iniciado/reiniciado.
Alguma ideia do que poderia estar causando isso? Sem usar o grep, as únicas coisas exibidas são os códigos ISO e o espaço vazio.
Comando:./trans --id --input /path/to/txt | grep ISO | grep [a-z]
root@box /test # alias grep
alias grep='grep --color=auto'
root@box /test # type grep
grep is aliased to `grep --color=auto'
Saída normal:
Eu me pego fazendo <command> --help | grep <feature>
muito, muito frequentemente todos os dias. Eu queria saber se era possível fazer algo assim ^^
se expande para "--help | grep"
e então eu faço isso:
ls ^^ size
Isso executaria o seguinte:
ls --help | grep size
Gostaria de saber um comando ou função no linux bash para obter o timestamp (e talvez formatar sua saída) do último arquivo modificado dentro de um diretório.
Digamos que eu tenha /path/mydir e este diretório tenha muitos arquivos dentro dele. Dado seu caminho, desejo exibir o registro de data e hora do arquivo modificado mais recente.
Eu acho que o procedimento poderia ser fazer um arquivo foreach recursivo, verificar todos eles e atualizar uma variável com o tempo mais recente cada vez que um mais recente for encontrado.
Edit: Desculpe pela confusão, mas eu queria intencionar o carimbo de data/hora da Epoch :)
Eu li que bash
pode fazer aritmética inteira sem usar um comando externo, por exemplo:
echo "$((3 * (2 + 1)))"
Também pode bash
fazer aritmética de ponto flutuante sem usar um comando externo?
Esta pergunta é semelhante a esta , mas mais específica.
Eu tenho uma máquina OpenBSD -stable e quero começar a seguir -current. Conheço o procedimento de atualização de uma versão para outra. Como posso passar de uma versão para o snapshot mais recente? Posso simplesmente inicializar a partir do bsd.rd do instantâneo mais recente e seguir o procedimento de atualização, mas e as "etapas de pré-atualização" e as "etapas de configuração"? Há algum a ser aplicado ao passar de -stable para o instantâneo mais recente?
Quando obtenho um sistema -current e desejo atualizá-lo novamente, qual é o procedimento? Devo compilar a partir de fontes ou usar o bsd.rd do instantâneo mais recente novamente? De qualquer forma, existem "etapas de configuração" envolvidas, como no link acima?
Porque se importar?
A limpeza do buffer de rolagem é útil de várias maneiras, por exemplo, quando desejo executar algum comando com saída longa e quero rolar rapidamente para o início dessa saída. Quando o buffer de rolagem é limpo, posso apenas rolar para o topo e pronto.
Algumas considerações:
Há clear
comando, de acordo com o homem,
clear limpa sua tela se isso for possível, incluindo seu buffer de rolagem (se o recurso "E3" estendido estiver definido).
No gnome-terminal clear
não limpa o buffer de rolagem. (Mas o que é a capacidade "E3")?
Há também reset
, que limpa, mas faz um pouco mais do que isso e é muito lento (no meu sistema leva mais de um segundo, o que é um atraso significativo para os humanos serem notados).
E há echo -ne '\ec'
ou echo -ne '\033c'
, que faz o trabalho. E, de fato, é muito mais rápido que reset
.
A questão é: o que é \ec
sequência, como ela difere do que clear
e reset
faz e por que não há um comando separado para isso?
Há também a C-l
sequência de teclas do readline, que por padrão é vinculada ao clear-screen
comando (quero dizer, comando readline, não comando shell). O que é este comando? Qual sequência de escape ele emite? Como de fato, isso funciona? Ele executa o comando shell? Ou o que? Novamente, no gnome-terminal, parece que funciona apenas cuspindo linhas em branco até que o prompt apareça na linha superior do terminal. Não tenho certeza sobre outros emuladores de terminal. Este é um comportamento muito complicado. Ele polui a rolagem para trás com pedaços de vazio, então você deve rolar para cima mais e mais. É como um hack, em vez de uma solução limpa.
Outra questão é: existe um comando readline para a \ec
sequência mencionada? Em vez disso , quero vinculá-lo C-l
porque sempre desejo limpar o buffer de rolagem quando limpo a tela.
E outra questão é como digitar essa sequência de escape no terminal para executar a ação desejada? Então não precisa pensar em vincular C-l
a outro comando readline (se tal comando existir). Eu tentei digitar Esc
, então, c
mas isso não funciona.
ATUALIZAÇÃO Esta pergunta foi respondida principalmente aqui: https://unix.stackexchange.com/a/375784/257159 . É uma resposta muito boa que explica quase todas as perguntas feitas aqui.