¿Crear un archivo de texto en vi cambiará mi computadora?

9

Sé que Linux es un sistema operativo basado en archivos de texto. Lo que me gustaría hacer es crear un archivo utilizando vitodos los diversos comandos que he aprendido. De esa manera podría encontrar cada comando individual muy fácilmente usando el comando /in vi. Pero solo quiero hacer esto si no cambia la forma en que funciona mi computadora. ¿Sería una buena idea?

BJsgoodlife
fuente
12
Sí, tendrá un archivo de texto más en alguna parte. ;-) (Bromas) Realmente, un archivo es un archivo. Es como preguntar si agregar una foto a una carpeta o crear un nuevo documento de Word cambiará su computadora. Sí lo hará Tienes una foto / documento más allí. Lo que sea, las respuestas que obtuvo son en su mayoría correctas.
Rmano
¿Por qué crees que lo haría?
Braiam
2
No estoy seguro de lo que quiere decir con "un sistema operativo basado en archivos de texto", pero Linux no es realmente diferente de, por ejemplo, Windows, cuando se trata de archivos de texto. Windows tiene archivos .ini y .bat, por ejemplo, si eso es lo que está pensando.
hyde
Además, ¿crees que hay algo especial vi(en comparación con, por ejemplo gedit) o simplemente te refieres a "un editor de texto"?
Sr. Lister
1
@BJsgoodlife Algunos archivos de texto controlan el sistema. Se colocan en lugares especiales y generalmente no se pueden modificar sin ellos sudo.
cpast

Respuestas:

34

Escribir un archivo de texto no va a "cambiar la forma en que funciona su computadora".

En particular, para hacer algo así, tendrías que hacer uno de

  • sobrescribir algún archivo importante
  • escriba su archivo en una ubicación protegida especial como un directorio * .d en / etc; no tendrás permiso para hacer esto
  • marque el archivo ejecutable y póngalo en su ruta

Como no vas a hacer explícitamente algo como esto, no hay nada de qué preocuparse. En particular, la otra respuesta va a longitudes innecesarias al sugerir que sus archivos de texto deben comenzar con hashes en cada línea. Por supuesto que no. Simplemente almacenar un archivo de texto en algún lugar dentro de un directorio de inicio normal no va a hacer nada.

thomasrutter
fuente
3
Sugerí poner #para que nada accidental se realice por casualidad. Creo que siempre es mejor estar del lado más seguro.
heemayl
8
Creo que no siempre es mejor estar del lado más seguro. La seguridad tiene un costo, y hay un punto en el que el riesgo reducido ya no vale la pena. Por ejemplo, cuando excede el valor de lo que está tratando de mantener a salvo (en contextos donde este argumento tiene sentido). En Seguridad de la información puede encontrar muchas respuestas que discuten cómo la seguridad adecuada es una compensación, y el único sistema completamente seguro también es completamente inútil, por lo que sería una tontería insistir en una seguridad perfecta en todos los casos.
David Z
99
Como un tema un tanto separado, creo que el punto más importante a mencionar (que esta respuesta hace y la otra no) es que crear un archivo arbitrario no hará nada para cambiar el sistema. Solo puede afectar el sistema creando un archivo que esté buscando algún otro proceso, o ejecutando el archivo que crea, si contiene el código que afecta al sistema, pero eso cae bajo el consejo general de no ejecutar comandos de shell completamente desconocidos , que es inteligente tanto si trabaja con archivos como si no.
David Z
2
Hazme un sándwich. You won't have permission to do this. sudo hazme un sandwich Aye, aye, sir!
Mentira Ryan
2
@heemayl ¿por qué no simplemente hacer la primera línea en el archivo exit?
Random832
15

Puede guardar todos los comandos que ha aprendido en un archivo, pero algunos puntos importantes a tener en cuenta:

  • No haga que el archivo sea ejecutable
  • Nunca sourceel archivo
  • La mejor manera sería poner un #al principio de todos los comandos para comentar todos los comandos para que no se ejecuten accidentalmente. De esta manera, puede buscar el comando que necesita y también estaría libre de riesgos. Puede agregar #al comienzo de cada línea con el siguiente comando:

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

EDITAR: He dado el tercer punto como una medida de seguridad extrema, ya que "neon_overload" y "David Z" señalaron que poner hashes en todas las líneas es demasiado extenso y, por lo tanto, no es necesario, lo apoyaría en este contexto. Además, como lo señala "random832", una alternativa mucho mejor a mi tercer punto sería comenzar con el archivo exit, ya que no se ejecutarán comandos posteriores.

EDIT-2: "Rinzwind" ha mencionado dos puntos importantes:

  • No sobrescriba un archivo existente

  • Almacene el archivo en el directorio de inicio del usuario ( /home/$USER/).

heemayl
fuente
44
put a # in the beginning of all the commands to comment out all the commands so they don't get executed accidentallyNo estoy muy seguro de si eso se supone que es una sugerencia seria o una broma. Mi detector de sarcasmo me falló hoy.
Mentira Ryan
La palabra a la que debe darle importancia es 'accidentalmente' ... el usuario puede mantener accidentalmente el archivo en un lugar inseguro como ejecutable ... aquí no me estoy arriesgando ... espero que esté claro ahora ...
heemayl
44
¿No podría simplemente poner una "salida" o algo así al comienzo del archivo, en lugar de comentar cada línea?
o0 '.
¡Quizás quiso decir #! - eso establece el intérprete en nulo para que no se ejecute.
Joshua
1
@BJsgoodlife, no #!, solo exit; de esa manera también estás protegido sh yourfile, contra lo cual un shebang inválido no te ayudará.
Charles Duffy
7

neon_overload tiene una muy buena respuesta.

Extenderé un poco sobre cierta faceta de su pregunta. Haría de esto un comentario, pero no tengo suficiente reputación aquí.

Linux, como sistema operativo, NO está basado en archivos de texto. Dicho esto, puedo ver de dónde vienes. Para un observador externo, hay una buena parte de la edición y el lanzamiento de archivos de "texto", especialmente en comparación con Windows.

Esto tiene varias razones, algunas de las cuales son:

  • No hay un sistema de registro en Linux, como en Windows. Por lo tanto, es común que las aplicaciones almacenen su configuración en archivos de texto, y se le indicará que las edite, en lugar de editar el registro como en Windows.
  • Linux es muy utilizado como sistema de servidor, y muchos de los que lo usan en equipos de escritorio trabajan con sistemas de servidor. A diferencia de Windows Server, los servidores de Linux generalmente se ejecutan sin una interfaz gráfica. Por lo tanto, se espera que los productos que se ejecutan en servidores Linux y, de hecho, sus usuarios y administradores, funcionen sin una interfaz gráfica. Los productos (y las características del sistema, vale la pena decir) que solo se espera que se ejecuten en Windows generalmente están más centrados en la GUI (como, por ejemplo, MS SQL)
  • El sistema de secuencias de comandos de Linux es algo más común y más transparente que Windows. Vería scripts en Windows, pero se llamarían something.vbs u another.bat. No necesariamente se daría cuenta de que son archivos de texto, pero, teniendo en cuenta lo que hay en mi segundo punto, es mucho más común en Linux espiar archivos .sh.
  • Por último, muchos usuarios de Linux están acostumbrados a trabajar sin interfaz gráfica y, para muchas cosas, editarán los archivos directamente como lo harían sin GUI, en lugar de buscar herramientas gráficas. Sé que cuando quiero hacer algo más profundo en el sistema, solo inicio el terminal, y muchos de mis colegas también.
Fabo.sk
fuente
"No hay un sistema de registro en Linux", pero hay dconf ( en.wikipedia.org/wiki/Dconf ). No todos los sistemas que ejecutan el kernel de Linux lo tendrán, y no todas las cosas que un sistema de Windows configuraría en el registro se configurarán allí.
Daniel Landau
1

La respuesta corta es, no, no cambiará su computadora creando un archivo de texto en vi. Sin embargo, si no tiene cuidado, crear ese primer archivo de texto podría cambiar su vida . Aprender a la manera de Unix puede ser una práctica muy gratificante.

hackerb9
fuente
0

vies un editor de texto , por lo tanto, si todo lo que desea es almacenar algunos fragmentos de texto en un archivo de texto y buscarlo, puede hacerlo todo directamente desde la terminal con los comandos integrados.

  1. Escriba una nota en un archivo de texto (creará el archivo si no existiera):

    echo echo con datos importantes >> info.txt

IMPORTANTE: tenga cuidado con las comillas simples y dobles, y prefijelas con barras inclinadas si desea incluirlas.

  1. Busque en el archivo algún texto (por ejemplo important):

    grep --color -i info.txt importante

Para evitar escribir, --color -idebe tener un alias en su ~/.bashrc.

También puede agregar texto multilínea a archivos de texto existentes o no existentes:

cat >> info2.txt

luego escriba o pegue el texto, y cuando haya terminado, presione CTR+Z

En cuanto a cambiar el sistema, no, no cambiará la forma en que funciona su sistema siempre que cree archivos en su propia carpeta de inicio y no los ejecute (puede ejecutar un archivo incluso si no es ejecutable, por ejemplo, con bash myFile) . También asegúrese de usar los privilegios de root estrictamente cuando los necesite.

Y finalmente, su interpretación del sistema basado en archivos lo ha confundido un poco: la mayoría de los sistemas operativos tienen archivos que almacenan configuraciones importantes que afectan profundamente la forma en que opera el sistema, pero están ubicados en ubicaciones predefinidas y, por lo general, están protegidos de modificaciones por parte de los usuarios habituales.

Sin embargo, es posible dispararse fácilmente en el pie, por ejemplo, si como usuario normal tiene una carpeta local 'ejecutable' a la que agregó PATH, y si en esa carpeta tiene archivos ejecutables que tienen los mismos nombres que los compilados -en utilidades comunes o palabras clave golpe, tales como test, echo, cat, for, cut, etc.

ccpizza
fuente