AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 411811
Accepted
Bagas Sanjaya
Bagas Sanjaya
Asked: 2017-12-20 05:48:21 +0800 CST2017-12-20 05:48:21 +0800 CST 2017-12-20 05:48:21 +0800 CST

Por que o Linux usa LF como caractere de nova linha?

  • 772

Tanto quanto eu sei, cada sistema operacional tem uma maneira diferente de marcar o caractere de fim de linha (EOL). Sistemas operacionais comerciais usam retorno de carro para EOL (retorno de carro e alimentação de linha no Windows, retorno de carro somente no Mac). O Linux, por outro lado, usa apenas alimentação de linha para EOL.

Por que o Linux não usa o retorno de carro para EOL (e apenas alimentação de linha)?

files history
  • 4 4 respostas
  • 24496 Views

4 respostas

  • Voted
  1. Best Answer
    jlliagre
    2017-12-20T07:11:24+08:002017-12-20T07:11:24+08:00

    O Windows usa CRLFporque herdou do MS-DOS.

    O MS-DOS usa CRLFporque foi inspirado no CP/M que já usava CRLF.

    O CP/M e muitos sistemas operacionais dos anos 80 e anteriores eram usados CRLF​​porque era a maneira de terminar uma linha impressa em um teletipo (voltar ao início da linha e pular para a próxima linha, como as máquinas de escrever comuns). Isso simplificou a impressão de um arquivo porque havia menos ou nenhum pré-processamento necessário. Também havia requisitos mecânicos que impediam que um único personagem fosse utilizável. Pode ser necessário algum tempo para permitir que o carro retorne e o cilindro gire.

    Gnu/Linux usa LFporque é um clone do Unix . 1

    O Unix usou um único caractere, LF, desde o início para economizar espaço e padronizar até um final de linha canônico, usar dois caracteres era ineficiente e ambíguo. Essa escolha foi herdada da Multics, que a usava já em 1964. Memória, armazenamento, potência da CPU e largura de banda eram muito escassos, então valeu a pena economizar um byte por linha. Quando um arquivo era impresso, o driver estava convertendo a alimentação de linha (nova linha) nos caracteres de controle exigidos pelo dispositivo de destino.

    LFfoi preferido CRporque o último ainda tinha um uso específico. Ao reposicionar o caractere impresso no início da mesma linha, permitia sobrepor os caracteres já digitados.

    A Apple inicialmente decidiu também usar um único caractere, mas por algum motivo escolheu o outro: CR. Quando mudou para uma interface BSD, mudou para LF.

    Essas escolhas não têm nada a ver com o fato de um sistema operacional ser comercial ou não.

    1 Esta é a resposta à sua pergunta.

    • 343
  2. user32929
    2017-12-21T03:03:40+08:002017-12-21T03:03:40+08:00

    O artigo da wikipedia sobre "Newline" traça a escolha de NL como um terminador de linha (ou separador) para Multics em 1964; infelizmente, o artigo tem poucas citações de fontes, mas não há razão para duvidar que isso esteja correto. Há dois benefícios óbvios nessa escolha em relação ao CR-LF: economia de espaço e independência do dispositivo.

    A principal alternativa, CR-LF, origina-se nos códigos de controle usados ​​para mover fisicamente o carro de papel em uma máquina de teletipo, onde CR retornaria o carro à sua posição inicial e LF giraria o rolo de papel para mover a posição de impressão para baixo. linha. Os dois caracteres de controle aparecem no código ITA2 que data de 1924 e que aparentemente ainda está em uso (ver Wikipedia); aparentemente ITA2 os tirou da variante Murray do código Baudot que data de 1901.

    Para os leitores mais jovens, vale a pena notar que na tradição do mainframe não havia nenhum caractere de nova linha; em vez disso, um arquivo era uma sequência de registros que tinham comprimento fixo (geralmente 80 caracteres, com base em cartões perfurados) ou comprimento variável; registros de comprimento variável eram normalmente armazenados com uma contagem de caracteres no início de cada registro. Se você tiver um arquivo de mainframe que consiste em uma sequência de registros de comprimento variável, cada um contendo conteúdo binário arbitrário, convertê-lo sem perdas em um arquivo de estilo UNIX pode ser uma conversão complicada.

    O Linux, é claro, foi apenas uma reimplementação do Unix, e o Unix tomou muitas de suas decisões de design do Multics, então parece que a decisão-chave foi tomada em 1964.

    • 17
  3. Walter Mitty
    2017-12-22T10:48:09+08:002017-12-22T10:48:09+08:00

    Outras respostas traçaram a cadeia de herança até a década de 1960 e teletipos. Mas aqui está um aspecto que eles não cobriram.

    Na época dos teletipos, havia momentos em que era desejável fazer algo chamado overstriking. O overstriking às vezes era usado para ocultar uma senha, porque apagá-la simplesmente não era possível. Outras vezes, overstriking foi feito para obter um símbolo que não estava na fonte. Por exemplo, a letra O e uma barra produzem um novo símbolo.
    O overstriking foi obtido colocando um retorno de carro sem alimentação de linha, embora o backspace às vezes fosse usado. Por esse motivo, o pessoal do unix decidiu contra o retorno de carro como separador de linha e optou pelo avanço de linha. Isso também funcionou bem para a leitura de textos produzidos usando a convenção CRLF. O CR é engolido e o LF se torna o separador.

    • 13
  4. R.. GitHub STOP HELPING ICE
    2017-12-20T20:43:20+08:002017-12-20T20:43:20+08:00

    Embora você possa traduzir a questão histórica em uma questão sobre a linguagem C, a razão pela qual o Linux e todos os sistemas em conformidade com POSIX ou POSIX-ish devem usar LF(ou pelo menos qualquer que seja o '\n'caractere C) como a nova linha é uma consequência da interseção dos requisitos de C e POSIX. Enquanto C permite que "arquivos de texto" e "arquivos binários" sejam diferentes (na verdade, arquivos de texto podem ser baseados em registros consistindo em uma sequência de registros de linha, além de coisas menos exóticas como ter '\n'traduzido de/para CR/ LFcomo no DOS/Windows ), o POSIX exige que o modo texto e binário se comportem da mesma forma. Esta é em grande parte a razão pela qual as ferramentas de linha de comando comocatsão poderosos/úteis; eles seriam muito menos se trabalhassem apenas com binário, ou apenas com texto, mas não ambos.

    • 7

relate perguntas

  • Remova arquivos com os menores sufixos de nome de arquivo

  • Listar arquivos classificados de acordo com a linha de conteúdo específica

  • Como saber antecipadamente se um .zip tem um diretório pai dentro

  • Como encontrar tipos de arquivos específicos e tar-los?

  • du/df e ls relatando diferentes usos de disco

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve