Criar um arquivo de texto no vi mudará meu computador?

9

Eu sei que o Linux é um sistema operacional construído em arquivos de texto. O que eu gostaria de fazer é criar um arquivo usando vitodos os vários comandos que aprendi. Dessa forma, eu poderia encontrar cada comando individual com muita facilidade usando o /in vi. Mas eu só quero fazer isso se não mudar a maneira como meu computador funciona. Isso seria uma boa ideia?

BJsgoodlife
fonte
12
Sim, ele terá um arquivo de texto mais em algum lugar. ;-) (Brincando) Realmente, um arquivo é um arquivo. É como perguntar se adicionar uma foto a uma pasta ou criar um novo documento do word mudará seu computador. Sim vai; você tem mais uma foto / documento lá. Seja como for, as respostas que você obteve estão corretas.
Rmano
Por que você acha que isso faria?
Braiam
2
Não sei o que você quer dizer com "um sistema operacional construído em arquivos de texto", mas o Linux não é realmente diferente do Windows, por exemplo, quando se trata de arquivos de texto. O Windows possui arquivos .ini e .bat, por exemplo, se é isso que você está pensando.
Hyde
Além disso, você acha que há algo de especial vi(em comparação com, digamos gedit) ou você apenas quis dizer "um editor de texto"?
Lister
11
@BJsgoodlife Alguns arquivos de texto controlam o sistema. Eles são colocados em lugares especiais e geralmente não podem ser modificados sem sudo.
cpast

Respostas:

34

Escrever um arquivo de texto não vai "mudar o funcionamento do seu computador".

Em particular, para fazer algo assim, você teria que fazer um dos

  • sobrescrever algum arquivo importante
  • escreva seu arquivo em um local protegido especial como um diretório * .d em / etc; você não terá permissão para fazer isso
  • marque o arquivo executável e coloque-o no seu caminho

Como você não fará explicitamente algo assim, não há com o que se preocupar. Em particular, a outra resposta vai a comprimentos desnecessários, sugerindo que seus arquivos de texto precisam começar com hashes em todas as linhas. Claro que não. Armazenar um arquivo de texto em algum lugar dentro de um diretório pessoal normal não fará nada.

thomasrutter
fonte
3
Sugeri colocar #para que nada de intencional fosse realizado por acaso. Eu acho que é sempre melhor estar do lado mais seguro.
heemayl
8
Eu acho que nem sempre é melhor estar do lado mais seguro. A segurança tem um custo e há um ponto em que o risco reduzido não vale mais o custo. Por exemplo, quando excede o valor da coisa que você está tentando manter em segurança (em contextos em que esse argumento faz sentido). Em Segurança da informação, você pode encontrar muitas respostas discutindo como a segurança adequada é uma desvantagem, e o único sistema completamente seguro também é completamente inútil; portanto, seria bobagem insistir em segurança perfeita em todos os casos.
David Z
9
Como uma questão um pouco separada, acho que o ponto mais importante a ser levantado (o que esta resposta faz e a outra não) é que a criação de um arquivo arbitrário não fará nada para mudar o sistema. Você só pode afetar o sistema criando um arquivo que outro processo está procurando ou executando o arquivo criado, se ele contiver o código que afeta o sistema - mas isso se enquadra no conselho geral de não executar comandos shell completamente desconhecidos , o que é inteligente, independentemente de você estar trabalhando com arquivos ou não.
21415 David Z
2
faz-me uma sandes. You won't have permission to do this. sudo me faz um sanduíche. Aye, aye, sir!
Lie Ryan
2
@heemayl Por que não fazer apenas a primeira linha do arquivo exit?
Random832
15

Você pode salvar todos os comandos que aprendeu em um arquivo, mas alguns pontos importantes a serem observados:

  • Não torne o arquivo executável
  • Nunca sourceo arquivo
  • A melhor maneira seria colocar um #no início de todos os comandos para comentar todos os comandos, para que não sejam executados acidentalmente. Dessa forma, você pode realmente procurar o comando necessário e também estaria livre de riscos. Você pode adicionar #no início de cada linha pelo seguinte comando:

    sed -i 's/^/#/' <file_name>

Edição: Eu dei o terceiro ponto como uma medida de segurança extrema, como "neon_overload" e "David Z" apontaram que colocar hashes em todas as linhas é muito extenso e, portanto, não é necessário, eu os ajudaria nesse contexto. Também como apontado por "random832", uma alternativa muito melhor ao meu terceiro ponto seria iniciar o arquivo exit, pois nenhum comando posterior será executado.

EDIT-2: "Rinzwind" mencionou dois pontos importantes:

  • Não substitua um arquivo existente

  • Armazene o arquivo no diretório inicial do usuário ( /home/$USER/).

heemail
fonte
4
put a # in the beginning of all the commands to comment out all the commands so they don't get executed accidentallyNão tenho certeza se isso deveria ser uma sugestão séria ou uma piada. Meu detector de sarcasmo falhou comigo hoje.
Lie Ryan
A palavra que você precisa colocar em importância é 'acidentalmente' .. o usuário pode acidentalmente manter o arquivo em algum lugar inseguro como executável .... aqui estou apenas sem correr riscos .. espero que você esteja claro agora ..
heemayl
4
Ele não poderia simplesmente colocar uma "saída" ou algo assim no início do arquivo, em vez de comentar todas as linhas?
o0 '.
Talvez ele quis dizer #! - isso define o intérprete como nulo para que não seja executado.
21715 Joshua
11
@BJsgoodlife, não #!- apenas exit; Dessa forma, você também estará protegido sh yourfile, contra o qual um shebang inválido não ajudará.
Charles Duffy
7

neon_overload tem uma resposta muito boa.

Expandirei um pouco uma certa faceta da sua pergunta - gostaria de fazer um comentário, mas não tenho reputação suficiente aqui.

O Linux, como sistema operacional, NÃO é muito baseado em arquivos de texto. Dito isto, eu posso ver de onde você é. Para um observador externo, há muita coisa acontecendo com a edição e o lançamento de arquivos "texto", especialmente em comparação com o Windows.

Isso tem vários motivos, alguns dos quais são:

  • Não há sistema de registro no Linux, como no Windows. Portanto, é comum que os aplicativos armazenem suas configurações em arquivos de texto, e você será instruído a editá-las, em vez de editar o registro como no Windows.
  • O Linux é amplamente utilizado como sistema de servidor, e muitos deles, que o usam em desktops, trabalham com sistemas de servidor. Ao contrário do Windows Server, os servidores Linux geralmente são executados sem uma interface gráfica. Portanto, espera-se que os produtos executados nos servidores Linux e, de fato, seus usuários e administradores funcionem sem uma interface gráfica. Os produtos (e recursos do sistema, que valem a pena dizer), que são esperados para serem executados no Windows, geralmente são mais centralizados na GUI (como, por exemplo, o MS SQL)
  • O sistema de script do Linux é um pouco mais comum e mais transparente que o Windows. Você veria scripts no Windows - mas eles seriam chamados algo.vbs ou outro.bat. Você não perceberia necessariamente que são arquivos de texto - mas, considerando o que está no meu segundo ponto, é muito mais comum no Linux procurar nos arquivos .sh.
  • Por fim, muitos usuários do Linux estão acostumados a trabalhar sem interface gráfica e, por muitas coisas, editarão os arquivos diretamente como fariam sem a GUI, em vez de se atrapalharem com as ferramentas gráficas. Sei que, quando quero fazer algo mais profundo no sistema, inicio o terminal e muitos dos meus colegas também.
Fabo.sk
fonte
"Não existe um sistema de registro no Linux", mas existe o dconf ( pt.wikipedia.org/wiki/Dconf ). Nem todos os sistemas que executam o kernel Linux o possuem, e nem todas as coisas que um sistema Windows configuraria no registro serão configuradas lá.
Daniel Landau
1

A resposta curta é que não, você não mudará seu computador criando um arquivo de texto no vi. No entanto, se você não tomar cuidado, criar esse primeiro arquivo de texto pode mudar sua vida . Aprender da maneira Unix pode ser uma prática profundamente gratificante.

hackerb9
fonte
0

vié um editor de texto ; portanto, se tudo o que você deseja é apenas armazenar alguns trechos de texto em um arquivo de texto e pesquisá-lo, você pode fazer tudo isso diretamente do terminal com os comandos internos.

  1. Escreva uma nota em um arquivo de texto (criará o arquivo se ele não existir):

    nota de eco com dados importantes >> info.txt

IMPORTANTE: Cuidado com as aspas simples e duplas e prefixe-as com barras, se você quiser que elas sejam incluídas.

  1. Pesquise no arquivo por algum texto (por exemplo important):

    grep --color -i important info.txt

Para evitar a digitação, --color -iisso deve ser um alias no seu ~/.bashrc.

Você também pode adicionar texto de várias linhas a arquivos de texto existentes ou não existentes:

cat >> info2.txt

digite ou cole o texto e, quando terminar, pressione CTR+Z

Quanto à alteração do sistema, não, não mudará a maneira como o sistema funciona, desde que você crie arquivos em sua própria pasta inicial e não os execute (você pode executar um arquivo mesmo que não seja executável, por exemplo, com bash myFile) . Além disso, certifique-se de usar os privilégios root apenas quando precisar deles.

E, finalmente, sua interpretação do sistema baseado em arquivos o enganou um pouco: a maioria dos sistemas operacionais possui arquivos que armazenam configurações importantes que afetam profundamente a maneira como o sistema opera, mas eles estão localizados em locais predefinidos e geralmente são protegidos contra modificações por usuários comuns.

É possível, no entanto, facilmente dar um tiro no pé, por exemplo, se como usuário comum você tiver uma pasta 'executável' local à qual você adicionou PATH, e se nessa pasta houver arquivos executáveis ​​com os mesmos nomes que os criados -em utilitários comuns ou palavras-chave Bash, tais como test, echo, cat, for, cut, etc.

ccpizza
fonte