MIT2020 Cram School- (1) Shell

Dirección del curso: https://missing.csail.mit.edu/

Resumen del curso

Según los informes, el propósito del curso es ayudar a los estudiantes a comprender todos los temas importantes para convertirse en un científico y desarrollador de datos, pero el contenido específico no es lo que los estudiantes suelen aprender en el aula. Este curso es muy práctico y se centra en la práctica. El curso incluye una introducción práctica a varias herramientas: estas herramientas aparecen con frecuencia durante el proceso de desarrollo, como la línea de comandos, git, etc.

El curso comienza en enero de este año y es principalmente para estudiantes del MIT, pero los materiales del curso se abrirán al público a través de video. Puede encontrar la información de texto y video correspondiente a través de la dirección del curso anterior.

Que es Shell

Las computadoras de hoy tienen varias interfaces para emitir comandos; varias interfaces gráficas de usuario, interfaces de voz e incluso AR / VR están en todas partes. Estos son buenos para el 80% de los casos de uso, pero generalmente están fundamentalmente limitados en lo que se le permite hacer: no puede presionar un botón inexistente o emitir un comando de voz sin programación. Para aprovechar al máximo las herramientas proporcionadas por su computadora, necesitamos Shell.

Casi todas las plataformas que puedes usar tienen un shell u otro. Aunque pueden diferir en detalles, sus núcleos son más o menos los mismos: le permiten ejecutar programas, proporcionar entradas y verificar salidas de manera semiestructurada.

En esta lección, una vez más nos centraremos en Bourne Again SHell, o "BASH" para abreviar. Este es uno de los shells más utilizados, y su sintaxis es similar a la que se ve en muchos otros shells.

Utilizar Shell

Cuando inicie el terminal, verá un mensaje, que generalmente se parece un poco a esto:

missing:~$ 

Esta es la interfaz de texto principal del shell. Le dice que está en la máquina missing, su "directorio de trabajo actual", o dónde se encuentra ahora, es ~(abreviatura de inicio). $ Te dice que no eres el usuario root (más sobre esto más adelante). En este indicador, puede escribir un comando y luego el shell interpreta el comando. El comando más básico es ejecutar el programa:

missing:~$ date
Fri 10 Jan 2020 11:49:31 AM EST
missing:~$ 

Aquí, ejecutamos el programa de fecha, que imprime la fecha y hora actuales. Entonces el shell nos pide que ejecutemos otro comando. También podemos ejecutar comandos con parámetros:

missing:~$ echo hello
hello

En este ejemplo, le decimos al shell que ejecute el programa echo con el parámetro hello. El programa de eco solo imprime sus parámetros. El shell analiza el comando dividiéndolo en espacios en blanco, y luego ejecuta el programa indicado por la primera palabra, proporcionando cada palabra posterior como un parámetro al que el programa puede acceder. Si desea proporcionar un parámetro que contenga espacios u otros caracteres especiales (por ejemplo, un directorio llamado "Mis fotos"), puede usar o ( “My Photos”) para citar el parámetro, o puede usar \( My\ Photos) para escapar de los caracteres relevantes.

Pero, ¿cómo sabe el shell cómo encontrar la fecha o el programa de eco? Bueno, el shell es un entorno de programación, al igual que Python o Ruby, por lo que tiene variables, condiciones, bucles y funciones. Cuando ejecuta un comando en un shell, en realidad está escribiendo un pequeño fragmento de código que el shell interpreta. Si se requiere que el shell ejecute un comando que no coincide con una de sus palabras clave de programación, se referirá a una $PATHvariable de entorno llamada , que enumera los directorios del programa que el shell debe buscar para un comando dado:

missing:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
missing:~$ which echo
/bin/echo
missing:~$ /bin/echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Cuando ejecutamos el comando echo, el shell ve que debe ejecutar el programa echo, y luego busca un archivo con ese nombre en la lista $PATHde directorios separados. Cuando lo encuentre, lo ejecutará. ¿Qué programa podemos usar para averiguar el archivo ejecutado para un nombre de programa dado? También podemos omitir $ PATH por completo proporcionando la ruta del archivo que se ejecutará.

Navegar en Shell

La ruta en el shell es una lista delimitada de directorios; en Linux y macOS está /separado, en Windows está \separado. En Linux y macOS, la ruta /es la "raíz" del sistema de archivos, y todos los directorios y archivos se encuentran debajo del sistema, mientras que en Windows, cada partición de disco tiene una raíz (por ejemplo, C: \). Por lo general, suponemos que está utilizando el sistema de archivos Linux en esta clase. En una /ruta de llamada al comienzo de la ruta absoluta. Cualquier otra ruta es una ruta relativa. La ruta relativa es relativa al directorio de trabajo actual, podemos usar el comando pwd para ver el directorio y usar el comando cd para cambiarlo.

missing:~$ pwd
/home/missing
missing:~$ cd /home
missing:/home$ pwd
/home
missing:/home$ cd ..
missing:/$ pwd
/
missing:/$ cd ./home
missing:/home$ pwd
/home
missing:/home$ cd missing
missing:~$ pwd
/home/missing
missing:~$ ../../bin/echo hello
hello

Tenga en cuenta que el indicador de shell nos permite saber cuál es el directorio de trabajo actual. Puede configurar el aviso para mostrarle información útil que cubriremos en futuras lecciones.

En términos generales, cuando ejecutamos un programa, se ejecutará en el directorio actual a menos que especifiquemos lo contrario. Por ejemplo, generalmente buscará archivos allí y, si es necesario, creará nuevos archivos allí.

Para ver el contenido de un directorio dado, use el comando ls:

missing:~$ ls
missing:~$ cd ..
missing:/home$ ls
missing
missing:/home$ cd ..
missing:/$ ls
bin
boot
dev
etc
home

A menos que se proporcione un directorio como primer parámetro, ls imprimirá el contenido del directorio actual. La mayoría de los comandos aceptan indicadores y opciones (indicadores) que comienzan con-para modificar su comportamiento. Por lo general, ejecutar con el indicador -h o --help (/? En Windows) imprimirá un texto de ayuda que le indicará los indicadores y las opciones disponibles.

missing:~$ ls -l /home
drwxr-xr-x 1 missing  users  4096 Jun 15  2019 missing

Esto nos proporcionará más información sobre cada archivo o directorio. Primero, el comienzo de la línea dnos dice missingque es un directorio. Luego siga tres conjuntos de tres caracteres ( rwx). Estos indican qué permisos tienen el propietario del archivo (faltante), el grupo (usuario) y todos los demás sobre los elementos relevantes. -Indica que el sujeto dado no tiene el permiso otorgado. Arriba, solo el propietario puede modificar ( w) el directorio perdido (es decir, agregar / eliminar archivos). Para ingresar a un directorio, el usuario debe tener xpermiso de "búsqueda" ( indicado) en el directorio (y su directorio padre) . Para enumerar su contenido, el usuario debe tener permiso de lectura (r) para el directorio. Para los archivos, los permisos son los que esperaba. Tenga en cuenta que casi todos los archivos en / bin tienen permisos x establecidos para el último grupo "todos los demás" para que cualquiera pueda ejecutar estos programas.

En este punto, necesita conocer algunos otros procedimientos convenientes: mv(cambiar el nombre / mover el archivo), cp(copiar el archivo) y mkdir(crear un nuevo directorio).

Si desea obtener más información sobre los parámetros del programa, la entrada, la salida o cómo funciona normalmente, puede probar el programa man. Acepta el nombre del programa como parámetro y le muestra su página de manual. Presione Q para salir.

missing:~$ man ls

Procedimiento de conexión

En el shell, los programas tienen dos "flujos" principales asociados con ellos: su flujo de entrada y flujo de salida. Cuando el programa intenta leer la entrada, la lee de la secuencia de entrada, y cuando imprime algo, la imprime en la secuencia de salida. Por lo general, la entrada y la salida del programa son su terminal. Es decir, el teclado se usa como entrada y la pantalla se usa como salida. Sin embargo, ¡también podemos volver a conectar estas transmisiones!

La forma más simple de redirección es <filey >file. Le permiten volver a conectar las secuencias de entrada y salida del programa al archivo por separado:

缺少:~$echo hello>hello.txt

缺少:~$cat hello.txt

你好

缺少:~$cat<hello.txt

你好

缺少:~$cat<hello.txt>hello2.txt

缺少:~$cat hello2.txt

你好

También puede usar >>adjuntar a archivo. Lo más destacado de esta redirección de entrada / salida es el uso de tuberías. |Los operadores le permiten "vincular" programas para que la salida de un programa sea la entrada de otro programa:

缺少:~$ls-l/|尾部-n1

drwxr-xr-x 1根4096 2019年6月20日var

缺少:~$curl--head--silent google.com | grep--ignore case content length | cut--delimiter=''-f2

219个

Herramienta de gran alcance

En la mayoría de los sistemas tipo Unix, un usuario es especial: el usuario "raíz". Es posible que lo haya visto en la lista de archivos anterior. El usuario root supera (casi) todas las restricciones de acceso y puede crear, leer, actualizar y eliminar cualquier archivo en el sistema. Sin embargo, generalmente no inicia sesión en el sistema como usuario root, porque es fácil interrumpir algo accidentalmente. En su lugar, utilizará el comando sudo. Como su nombre lo indica, le permite "hacer" algo "como su" (denominado "superusuario" o "root"). Cuando encuentra un error de permiso denegado, generalmente es porque necesita realizar ciertas acciones como usuario root.

Una cosa que debe hacerse para convertirse en usuario root es escribir en el sistema de archivos sysfs instalado en / sys. sysfs expone muchos parámetros del kernel como archivos, por lo que puede reconfigurar dinámicamente el kernel sin necesidad de herramientas especiales. Por ejemplo, el brillo de la pantalla de su computadora portátil se muestra a través de un archivo llamado brillo bajo

/sys/class/backlight

Al escribir valores en este archivo, podemos cambiar el brillo de la pantalla. Su primera reacción puede ser hacer lo siguiente:

$ sudo find -L /sys/class/backlight -maxdepth 2 -name '*brightness*'
/sys/class/backlight/thinkpad_screen/brightness
$ cd /sys/class/backlight/thinkpad_screen
$ sudo echo 3 > brightness
An error occurred while redirecting file 'brightness'
open: Permission denied

Este error puede sorprender a las personas. ¡Después de todo, usamos sudo para ejecutar comandos! Las operaciones como |, >y <son realizadas por el shell, no por un solo programa. Eco y amigos no lo saben |. Simplemente leen desde la entrada y escriben en la salida, pase lo que pase. En el caso anterior, el shell (autenticado como el usuario) intentó abrir el archivo de brillo para escribir antes de configurarlo en la salida de sudo echo, pero como el shell no se ejecuta como root, no puede hacerlo. Usando este conocimiento, podemos resolver los siguientes problemas:

$ echo 3 | sudo tee brightness

Dado que el programa tee es un programa que abre el archivo / sys para escribir, y se ejecuta como usuario root, todos los permisos pueden funcionar. Puede controlar varias cosas interesantes y útiles a través de / sys, como el estado de varios indicadores del sistema (su ruta puede ser diferente):

$ echo 1 | sudo tee /sys/class/leds/input6::scrolllock/brightness

Practica

Verifique la temperatura de la CPU a través del comando de shell: cd / sys / class / thermal / thermal_zone0 /
Ejecute el archivo temporal La
información de temperatura de la CPU se encuentra en este directorio y es de solo lectura. El parámetro de temperatura obtenido debe dividirse por 1000 en grados Celsius.

Publicado 28 artículos originales · ganado elogios 2 · Vistas 3259

Supongo que te gusta

Origin blog.csdn.net/Maestro_T/article/details/104315259
Recomendado
Clasificación