por exemplo, se o pacote especifica
Depends: www-browser
Como o apt/dpkg decide qual pacote real será instalado?
Conforme mostrado aqui no guia de referência do debian aptitude , a organização padrão da lista de pacotes do aptitude é:
Aqui está agrupado por "instalado/não instalado". Como posso personalizar esta lista para agrupar pacotes por outros critérios, como "arquivo" (por exemplo, instável) ou ações pendentes ou outros critérios semelhantes?
Nota: eu sei que o aptitude pode fazer isso, só não consigo lembrar como fazer.
No diretório do meu computador /lib/systemd/system
, vejo um arquivo multiuser.target
- esse arquivo contém:
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
A linha: Requires: basic.target
que suponho significa "executar" o basic.target
arquivo.
Mas nesse mesmo /lib/systemd/system
diretório também há um multi-user.target.wants/
subdiretório. Ele contém mais arquivos de unidade:
/lib/systemd/system $tree multi-user.target.wants/
multi-user.target.wants/
├── dbus.service -> ../dbus.service
├── getty.target -> ../getty.target
├── systemd-ask-password-wall.path -> ../systemd-ask-password-wall.path
├── systemd-logind.service -> ../systemd-logind.service
├── systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service
└── systemd-user-sessions.service -> ../systemd-user-sessions.service
qual dessas unidades, ou seja, arquivo: basic.target
ou todas as unidades no subdiretório multi-user.wants.target
é executada quando multi-user.target
é o destino de inicialização padrão? é tudo o que foi dito acima? se sim, qual é a ordem?
Conceitualmente, penso em uma conexão TCP como tendo dois aspectos.
O aspecto da conexão do TCP é bem abordado em documentos na Web, os hosts negociam a conexão por meio de handshake de 3 vias, etc. ar morto"
Minha pergunta é, uma vez que esta conexão é estabelecida, como os dados são iniciados, por exemplo, uma transferência de arquivo? Imagino que se pareça com o remetente descrevendo o que vai enviar, ou seja, "Vou enviar para você .... e você saberá que a transferência foi concluída quando tiver um arquivo de X bytes ou receber um trailer de Eu". Como uma transferência de dados/arquivos TCP é iniciada?
Alguns programas de cópia de arquivos gostam rsync
e curl
têm a capacidade de retomar transferências/cópias com falha.
Observando que pode haver muitas causas dessas falhas, em alguns casos o programa pode fazer uma "limpeza" em alguns casos o programa não pode.
Quando esses programas são retomados, eles parecem apenas calcular o tamanho do arquivo/dados que foram transferidos com sucesso e apenas começam a ler o próximo byte da fonte e anexar ao fragmento do arquivo.
por exemplo, o tamanho do fragmento de arquivo que "chegou" ao destino é de 1378 bytes, então eles apenas começam a ler do byte 1379 no original e adicionam ao fragmento.
Minha pergunta é: sabendo que os bytes são compostos de bits e nem todos os arquivos têm seus dados segmentados em blocos limpos de tamanho de byte, como esses programas sabem que o ponto que escolheram para começar a adicionar dados está correto?
Ao escrever o arquivo de destino, ocorre algum tipo de buffer ou "transações" semelhantes aos bancos de dados SQL, no nível do programa, do kernel ou do sistema de arquivos, para garantir que apenas bytes limpos e bem formados cheguem ao dispositivo de bloco subjacente?
Ou os programas assumem que o byte mais recente seria potencialmente incompleto, então eles o excluem supondo que seja ruim, copiam novamente o byte e começam a anexar a partir daí?
sabendo que nem todos os dados são representados como bytes, essas suposições parecem incorretas.
Quando esses programas "retomam", como eles sabem que estão começando no lugar certo?
Recomendamos que, em scripts bash, não analisemos a saída de ls
A página da Web vinculada acima recomenda códigos como:
# Good!
for f in *; do
[[ -e $f ]] || continue
...
done
ou para preencher uma matriz com nomes de arquivos
myfiles=( ~/* )
Mas quando olho para esses exemplos e sei como os shells bourne lidam com strings sem aspas em geral, minha sensação é que, se eu usasse esse código em nomes de arquivos contendo espaços, o glob explodiria cada palavra separada por espaço nos arquivos. por exemplo, se eu tiver o seguinte diretório
$ ls -1
a file I downloaded from the net.pdf
apple.sh
hello world.txt
e eu corro isso
for file in *
do printf "%s\n" "$file"
done
Estou esperando um comportamento de string sem aspas. por exemplo
a
file
I
downloaded
from
the
net.pdf
apple
hello
world
Mas o que eu recebo é o comportamento correto
a file I downloaded from the net.pdf
apple
hello world
semelhante para matrizes
myfiles=( * )
declare -p myfiles
declare -a myfiles='([0]="a file I downloaded from the net.pdf" [1]="apple" [2]="hello world")'
Minha pergunta é por que isso?
É porque a expansão glob é feita após a divisão de palavras? (para que esses tipos de operações de arquivo produzam a saída correta?)