Digamos que eu selecionei algum texto pelo modo visual:
Como posso limpar todos os espaços em branco? Então isso 0 0 0 0 0 0 0 1 0 1 0 1
se torna 000000010101
.
Ao criar um serviço para o Firewalld, você verá diferentes abas Ports
Protocols
Source-Port
, etc. (veja a captura de tela). Agora, meu problema é entender o que a aba de protocolos faz. Ao definir portas, ports
você já especifica o protocolo para determinadas portas. Gostaria de saber o que a protocols
aba faz de diferente?
Estou perguntando porque acabei de encontrar um problema em que, i had set tcp/udp ports
para um jogo, ainda não conseguia me conectar a um servidor usando essas portas. Tive que adicionar udp
em protocol
(como cliente). Algo que nunca precisei fazer antes. E me pergunto por quê? Por que não foi suficiente definir as portas UDP em "Portas"? O que isso faz de diferente? Permite todas as portas para determinados protocolos? Caso contrário, não entendo bem o que faria.
Ultimamente, tenho precisado colar grandes blocos de texto no editor VIM com frequência, e notei que a operação parece ser executada linha por linha. Ou seja, se eu pressionar ESC ou digitar qualquer coisa durante a colagem, ela é interrompida instantaneamente.
Gostaria de saber se existe uma maneira de tornar a colagem "atômica" — garantindo que todo o conteúdo seja colado de uma vez, ignorando qualquer pressionamento de tecla intermediário?
Reproduzível no Linux RHEL e no macOS.
Estou tentando capturar tráfego de dentro de um namespace de rede e visualizá-lo no Wireshark no host como um usuário sem privilégios. Para fazer isso, estou executando tcpdump
dentro do namespace de rede de destino e gravando a captura em um pipe nomeado /tmp/fifo
que pode ser acessado pelo host.
Quando tento visualizar esse tráfego no Wireshark no host executando wireshark -k -i /tmp/fifo
, recebo a mensagem de erro:
Couldn't run dumpcap in child process: Permission denied
A execução ls -l /bin/dumpcap
gera as permissões -rwxr-xr-- 1 root wireshark
, o que explica por que dumpcap
não pode ser executada pelo usuário que não está no wireshark
grupo.
Como o usuário está efetivamente apenas lendo bytes de um pipe, não são necessários privilégios ou capacidades de root. Eu poderia adicionar o usuário ao wireshark
grupo, mas o dumpcap
binário tem capacidades que eu preferiria não conceder. Alternativamente, eu poderia remover capacidades dumpcap
e torná-lo executável por todos, o que, em um breve teste, funciona, mas pode apresentar dumpcap
falhas inesperadas, já que foi projetado para ser executado com essas capacidades.
Existe uma maneira mais direta de atingir meu objetivo?
sort
tem opção --ignore-leading-blanks
:
-b, --ignore-leading-blanks
ignore leading blanks
Por que não sort
tem opção --ignore-trailing-blanks
(ignorar espaços em branco)?
$ sort --version
sort (GNU coreutils) 8.32
Tenho um sistema embarcado com um chip ft200xd que faz conexão USB para i2c. Gostaria de observar os dados.
Eu tenho o driver que /dev/ttyFT200XD0
eu estava planejando usar strace, algo assim,
strace -r read=0
mas isso exigiu encontrar o descritor de arquivo, o que não consegui descobrir como fazer. Se eu tentar
# dmesg | grep -i FT200X
[ 16.916980] ft200xd 0-0022: Probing ft200xd_probe:407:
[ 16.945958] ft200xd 0-0022: Probed, id: 000000
mas infelizmente não vejo nada /proc/tty/driver
que possa ajudar.
Tenho o driver carregado.
/proc/tty/driver
Como posso encontrar o descritor de arquivo para uso com o strace ou devo usar um método diferente para visualizar os dados?
Obrigado por qualquer dica
Quero que o firefox
comando tenha a tecla Tab-completar padrão para que eu possa usá-lo para abrir facilmente qualquer arquivo/pasta na pasta atual, não apenas aqueles correspondentes @(?([xs])htm?(l)|pdf|txt)
(é uma expressão regular de /usr/share/bash-completion/completions/firefox
). Por exemplo, eu abro arquivos Markdown (ex.: Readme.md
) no Firefox porque tenho um plugin que os renderiza bem.
Há muitas perguntas sobre isso na rede Stack Exchange, e alguns sugerem, com razão complete -r firefox
, , mas isso parece funcionar apenas temporariamente. Alguns pseudo-bash:
$ ls
foo.txt Readme.md bar.adoc
$ firefox <TAB> # only completes foo.txt
$ complete -p firefox
complete -F _firefox firefox
$ complete -r firefox # try to disable it
$ complete -p firefox
bash: complete: firefox: no completion specification
$ firefox <TAB> # only completes foo.txt
$ complete -p firefox
complete -F _firefox firefox # it's baaaaack!
$ complete -r
$ firefox <TAB> # completes all 3 files
A última complete -r
opção funciona, mas não quero ser tão pesado. Quero manter as funções especiais completas para outros comandos.
Se eu não conseguir remover cirurgicamente a firefox
conclusão de tabulação personalizada do meu arquivo ~/.bashrc
, acho que a próxima coisa que tentarei será excluí-lo manualmente /usr/share/bash-completion/completions/firefox
(e alguns outros que mencionam o Firefox). Gostaria de evitar mexer nos arquivos do bash-completion
pacote, se possível.
Estou usando o Bash padrão (v5.1.16) que vem com o Ubuntu 22.04. Estou usando o gnome-terminal, caso seja necessário.
Parece que isso é algo que deveria ter sido respondido aqui antes, mas minha busca ainda não encontrou o caso exato.
Tenho um arquivo (na verdade, um arquivo de hosts) com uma linha de sinalização. Tenho alguns scripts que adicionam e removem linhas antes da linha de sinalização.
Mas há o risco de que o processo de remoção deixe linhas em branco criadas pelo processo de adição.
Então, eu gostaria de um método para remover quaisquer linhas em branco imediatamente antes da linha de sinalização no arquivo.
Parece que isso deveria ser possível com sed
, mas os exemplos online que encontrei não incluem esse caso (ironicamente, eles incluem o caso oposto - adicionar uma linha em branco antes de uma linha correspondente)
Existe uma maneira simples de fazer isso?
Não é necessário usar sed
, qualquer outra ferramenta padrão de manipulação de texto também serviria.
É preferível editar no local, mas se realmente necessário, você pode copiar para um arquivo temporário e depois copiar de volta.
Entrada de amostra (não é possível postar os dados precisos)
10.8.7.6 static-host1
10.8.7.7 static-host2
10.8.8.5 static-host3
10.8.8.6 static-host4
# Start of dynamic section
10.9.9.8 dynamic-group1-host1
10.9.9.9 dynamic-group1-host1
10.9.8.7 dynamic-group2-host1
10.9.8.8 dynamic-group2-host2
# End of dynamic section
10.10.11.12 static-host5
10.10.11.13 static-host6
10.10.11.17 static-host7
10.10.11.18 static-host8
Saída de amostra
10.8.7.6 static-host1
10.8.7.7 static-host2
10.8.8.5 static-host3
10.8.8.6 static-host4
# Start of dynamic section
10.9.9.8 dynamic-group1-host1
10.9.9.9 dynamic-group1-host1
10.9.8.7 dynamic-group2-host1
10.9.8.8 dynamic-group2-host2
# End of dynamic section
10.10.11.12 static-host5
10.10.11.13 static-host6
10.10.11.17 static-host7
10.10.11.18 static-host8
Seria razoável para qualquer solução assumir que a última linha antes dos espaços em branco serem removidos sempre começa com o mesmo padrão, normalmente um endereço RFC1918 (por exemplo, 10. ou 192.168.)
Quanto ao outro comentário, sim, linhas em branco são desejáveis para facilitar a leitura, e é por isso que meu script as adiciona entre as seções que ele adiciona. Ao remover uma seção, eu poderia remover "quaisquer linhas em branco antes da primeira linha da seção", mas isso se resume ao mesmo problema: remover uma ou mais linhas em branco antes de uma linha que corresponda a um padrão.
(espero que seja óbvio) não é aceitável simplesmente remover todas as linhas em branco do arquivo.
Estou pensando em comprar um laptop Linux, mas até agora só usei Macs e tenho uma pergunta de segurança relacionada a isso.
Com um Mac, o fabricante (Apple) oferece suporte tanto ao sistema operacional quanto ao hardware em conjunto. Portanto, em teoria, a Apple não apenas corrigiria bugs e vulnerabilidades encontrados no macOS, mas também corrigiria bugs/vulnerabilidades encontrados no hardware do MacBook, bem como quaisquer bugs/vulnerabilidades que surjam de interações entre o macOS e o hardware.
Se eu comprar um laptop e instalar o Linux nele, presumivelmente posso contar com o criador da minha distribuição Linux para corrigir bugs e vulnerabilidades no meu sistema operacional Linux. Mas quem (se houver alguém) corrigirá bugs e vulnerabilidades relacionados ao hardware do meu laptop?
Hoje, quando tento abrir o Discord, ele me diz que preciso atualizar para a versão 0.0.89. O problema é que já estou na versão 0.0.90. Estou bastante confiante disso, pois o cliente Discord para Linux exige que eu instale e baixe manualmente cada nova versão, e eu tenho o arquivo 0.0.90.
A saída discord --version
concorda com isso, mas notei uma mensagem um tanto estranha:
[Updates] You are living in the future! Come back time traveller!
Saída completa:
isikyus@Raeltar:~/Downloads$ discord --version
Discord 0.0.90
Starting app.
Starting updater.
4/15/2025, 9:38:46 PM GMT+10 [Modules] Modules initializing
4/15/2025, 9:38:46 PM GMT+10 [Modules] Distribution: remote
4/15/2025, 9:38:46 PM GMT+10 [Modules] Host updates: enabled
4/15/2025, 9:38:46 PM GMT+10 [Modules] Module updates: enabled
4/15/2025, 9:38:46 PM GMT+10 [Modules] Module install path: /home/isikyus/.config/discord/0.0.90/modules
4/15/2025, 9:38:46 PM GMT+10 [Modules] Module installed file path: /home/isikyus/.config/discord/0.0.90/modules/installed.json
4/15/2025, 9:38:46 PM GMT+10 [Modules] Module download path: /home/isikyus/.config/discord/0.0.90/modules/pending
splashScreen.initSplash(false)
CDM component API found
blackbox: 4/15/2025, 9:38:46 PM GMT+10 0
----------------------------------------------
CDM completed with status: cdm-ready-success
blackbox: 4/15/2025, 9:38:46 PM GMT+10 1 Discord starting: {"releaseChannel":"stable","version":"0.0.90"}, modulepath: /home/isikyus/.config/discord/0.0.90/modules
blackbox: 4/15/2025, 9:38:46 PM GMT+10 2 ✅ webContents.created web1 ""
blackbox: 4/15/2025, 9:38:46 PM GMT+10 3 ✅ window.created win1 "discord"
21:38:46.701 › DiscordSplash.signalReady
splashScreen: SPLASH_SCREEN_READY
splashScreen.webContentsSend: SPLASH_SCREEN_QUOTE SPLASH_SCREEN_QUOTE [ 'Hold Tight — Loading Discord' ]
4/15/2025, 9:38:46 PM GMT+10 [Modules] No updates to install
splashScreen: no-pending-updates
4/15/2025, 9:38:46 PM GMT+10 [Modules] Checking for host updates.
splashScreen: checking-for-updates
splashScreen.updateSplashState checking-for-updates checking-for-updates {}
splashScreen.webContentsSend: SPLASH_UPDATE_STATE SPLASH_UPDATE_STATE [ { status: 'checking-for-updates' } ]
21:38:46.751 › Slow network is detected. See https://www.chromestatus.com/feature/[SOME HEX STRING] for more details. Fallback font will be used while loading: file:///usr/share/discord/resources/app.asar/app_bootstrap/splash/[SOME HEX STRING].woff2
21:38:46.765 › DiscordSplash.onStateUpdate: {"status":"checking-for-updates"}
21:38:46.765 › Splash.onStateUpdate: {"status":"checking-for-updates"}
blackbox: 4/15/2025, 9:38:46 PM GMT+10 4 ✅ webContents.did-finish-load web1
[Updates] You are living in the future! Come back time traveller!
4/15/2025, 9:38:47 PM GMT+10 [Modules] Host update is available. Manual update required!
splashScreen: update-manually 0.0.89
splashScreen.updateSplashState update-manually update-manually { newVersion: '0.0.89' }
splashScreen.webContentsSend: SPLASH_UPDATE_STATE SPLASH_UPDATE_STATE [ { status: 'update-manually', newVersion: '0.0.89' } ]
splashScreen: update-check-finished true 1 true
21:38:47.114 › DiscordSplash.onStateUpdate: {"status":"update-manually","newVersion":"0.0.89"}
21:38:47.115 › Splash.onStateUpdate: {"status":"update-manually","newVersion":"0.0.89"}
21:38:47.117 › Slow network is detected. See https://www.chromestatus.com/feature/5636954674692096 for more details. Fallback font will be used while loading: file:///usr/share/discord/resources/app.asar/app_bootstrap/splash/[SOME HEX STRING].woff2
21:38:47.701 › Splash.updateCountdownSeconds: undefined
21:38:48.701 › Splash.updateCountdownSeconds: undefined
21:38:49.701 › Splash.updateCountdownSeconds: undefined
21:38:50.701 › Splash.updateCountdownSeconds: undefined
21:38:51.701 › Splash.updateCountdownSeconds: undefined
21:38:52.701 › Splash.updateCountdownSeconds: undefined
splashScreen: SPLASH_SCREEN_QUIT
blackbox: 4/15/2025, 9:38:52 PM GMT+10 5 before-quit
blackbox: 4/15/2025, 9:38:52 PM GMT+10 6 window.close win1
[SOME HEX STRING]
Os marcadores de posição são adicionados por mim na remota hipótese de as strings hexadecimais serem exclusivas da minha conta ou algo assim. Suspeito que não, mas todo cuidado é pouco.
Verifiquei https://discord.com/tags/changelog , mas a última publicação é de março. E a última publicação com notas de patch que consigo ver é https://discord.com/blog/discord-patch-notes-april-3-2025 . Tenho certeza de que teria notado se uma atualização tivesse sido lançada em 3 de abril.
Por que o Discord está me dizendo que preciso de uma versão anterior e é seguro fazer o downgrade?