Una introducción imprescindible al uso de sistemas Linux

Prefacio

Para facilitar la comprensión, este artículo comienza con operaciones y conceptos comunes. Aunque hemos intentado simplificarlo al máximo, todavía implica mucho contenido. En la entrevista, los puntos de conocimiento de Linux no son tan importantes en comparación con los puntos de conocimiento de la red y el sistema operativo, solo necesita concentrarse en dominar algunos principios y comandos. Para que a todos les resulte más fácil prepararse para la entrevista, aquí hay algunos puntos de conocimiento más importantes:

  • Puede simplemente usar cat, grep, cut y otros comandos para realizar algunas operaciones;
  • Principios relacionados con sistemas de archivos, conceptos como inodo y bloque, recuperación de datos;
  • Enlaces duros y enlaces blandos;
  • Relacionado con la gestión de procesos, procesos zombies y procesos huérfanos, SIGCHLD.

1. Operaciones y conceptos comunes

tecla de acceso directo

  • Pestaña: finalización de comando y nombre de archivo;
  • Ctrl+C: interrumpe el programa en ejecución;
  • Ctrl+D: Finalizar la entrada del teclado (Fin del archivo, EOF)

Pedir ayuda

1. --ayuda

Una introducción al uso básico y las opciones de los comandos.

2. hombre

Man es la abreviatura de manual, que muestra la información específica de la instrucción.

Al ejecutar man date, aparece FECHA (1), el número que contiene representa el tipo de instrucción. Los números de uso común y sus tipos son los siguientes:

nombre clave tipo
1 Instrucciones o archivos ejecutables que los usuarios pueden operar en el entorno shell
5 Archivo de configuración
8 Comandos administrativos disponibles para los administradores del sistema

3. información

info es similar a man, pero info divide el documento en páginas y se puede saltar cada página.

4. documento

/usr/share/doc almacena un conjunto completo de documentación para el software.

Cerrar

1. quien

Antes de cerrar, debe usar el comando who para verificar si hay otros usuarios en línea.

2. sincronizar

Para acelerar la lectura y escritura de archivos de disco, los datos del archivo ubicados en la memoria no se sincronizarán con el disco inmediatamente, por lo que se requiere una operación de sincronización antes de apagar.

3. apagado

# shutdown [-krhc] 时间 [信息]
-k : 不会关机,只是发送警告信息,通知所有在线的用户
-r : 将系统的服务停掉后就重新启动
-h : 将系统的服务停掉后就立即关机
-c : 取消已经在进行的 shutdown

CAMINO

La ruta al archivo ejecutable se puede declarar en la variable de entorno PATH, separada por:.

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin

sudo

sudo permite a los usuarios normales utilizar comandos ejecutables raíz, pero sólo los usuarios agregados en el archivo de configuración /etc/sudoers pueden utilizar este comando.

Herramientas de gestión de paquetes

RPM y DPKG son los dos tipos más comunes de herramientas de gestión de paquetes de software:

  • RPM, el nombre completo de Redhat Package Manager, fue desarrollado e implementado por primera vez por Red Hat Company, luego fue aceptado por el sistema operativo de código abierto GNU y se convirtió en un estándar de software establecido para muchos sistemas Linux. YUM se basa en RPM y tiene funciones de gestión de dependencias y actualización de software.
  • Compitiendo con RPM está la herramienta de administración de paquetes DEB DPKG basada en el sistema operativo Debian, que se llama Paquete Debian y tiene una función similar a RPM.

distribución

Una distribución de Linux es una versión integrada del kernel de Linux y varias aplicaciones de software.

Basado en herramientas de gestión de paquetes. Distribución comercial distribución comunitaria
RPM sombrero rojo Fedora/CentOS
DPKG ubuntu Debian

VIM tres modos


  • Modo de comando general (modo de comando): el modo predeterminado de VIM, que se puede usar para mover el cursor para ver el contenido;
  • Modo de edición (modo de inserción): presione "i" y otras teclas para ingresar y podrá editar el texto;
  • Modo final: ingrese después de presionar el botón ":", que se utiliza para operaciones como guardar y salir.

En el modo de línea de comandos, los siguientes comandos se utilizan para salir o guardar archivos.

Orden efecto
:v grabar en disco
:v! Fuerza la escritura en el disco cuando el archivo es de solo lectura. Si se puede escribir depende de los permisos del usuario sobre el archivo.
:q dejar
:q! Obligado a irse sin guardar
:wq Escribir en el disco y salir.
:wq! Forzar la escritura en el disco y luego salir

ÑU

El Proyecto GNU, traducido como Proyecto Genuino, tiene como objetivo crear un sistema operativo completamente libre llamado GNU, y su software de contenido está completamente liberado bajo la GPL. El nombre completo de GPL es Licencia Pública General GNU, que incluye los siguientes contenidos:

  • Libertad para ejecutar este programa para cualquier propósito;
  • libertad de reproducción;
  • La libertad de mejorar este programa y de publicar las mejoras públicamente.

Acuerdo de código abierto

2. disco

interfaz de disco

1. IDE

El nombre completo de IDE (ATA) es Accesorio de tecnología avanzada. La velocidad máxima de la interfaz es de 133 MB/s. Debido a que el rendimiento antiinterferencias del cable del puerto paralelo es demasiado pobre y el cable ocupa mucho espacio, lo que no favorece la La disipación de calor interna de la computadora, ha sido reemplazada gradualmente por SATA.


2.SATA

El nombre completo de SATA es Serial ATA, que es una interfaz ATA que utiliza un puerto serie, tiene una fuerte antiinterferencia, tiene requisitos mucho más bajos para la longitud del cable de datos que ATA y admite funciones intercambiables en caliente y otras funciones. La velocidad de la interfaz de SATA-II es de 300 MB/s, mientras que el estándar SATA-III puede alcanzar una velocidad de transferencia de 600 MB/s. Los cables de datos SATA también son mucho más delgados que los ATA, lo que favorece la circulación del aire en el chasis y facilita la organización de los cables.


3.SCSI

El nombre completo de SCSI es Small Computer System Interface (Small Computer System Interface). Los discos duros SCSI se utilizan ampliamente en estaciones de trabajo, computadoras personales y servidores, por lo que se utilizan tecnologías más avanzadas, como una alta velocidad de disco de 15000 rpm y el Tasa de ocupación de la CPU durante la transmisión Menor, pero el precio unitario también es más caro que el de los discos duros ATA y SATA de la misma capacidad.


4.SAS

SAS (Serial Attached SCSI) es una nueva generación de tecnología SCSI que, al igual que los discos duros SATA, adopta la tecnología en serie para obtener mayores velocidades de transmisión, que pueden alcanzar los 6 Gb/s. Además, se mejora el espacio interno del sistema al reducir las líneas de conexión.


Nombre del archivo de disco

Cada pieza de hardware en Linux se trata como un archivo, incluidos los discos. Los discos reciben nombres según el tipo de interfaz del disco. Los nombres de archivos de disco comunes son los siguientes:

  • Disco IDE: /dev/hd[anuncio]
  • Disco SATA/SCSI/SAS: /dev/sd[ap]

La determinación del número de serie después del nombre del archivo está relacionada con el orden en que el sistema detecta los discos y no tiene nada que ver con la posición de la ranura en la que se insertan los discos.

3. Partición

Tabla de particiones

Hay dos formatos principales de tablas de particiones de disco, uno es la tabla de particiones MBR más restrictiva y el otro es la tabla de particiones GPT más nueva y menos restrictiva.

1.MBR

En el MBR, el primer sector es el más importante. Contiene el registro de arranque maestro (MBR) y la tabla de particiones. El registro de arranque maestro ocupa 446 bytes y la tabla de particiones ocupa 64 bytes.

La tabla de particiones tiene solo 64 bytes y solo puede almacenar hasta 4 particiones, que son la partición primaria (Primaria) y la partición extendida (Extendida). Solo hay una partición extendida, que utiliza otros sectores para registrar tablas de particiones adicionales, por lo que se pueden dividir más particiones mediante particiones extendidas, estas particiones se denominan particiones lógicas.

Linux también trata las particiones como archivos. El método de denominación de los archivos de partición es: nombre de archivo de disco + número, como /dev/sda1. Tenga en cuenta que la numeración de las particiones lógicas comienza desde 5.

2. GPT

Un sector es la unidad de almacenamiento más pequeña de un disco. El tamaño del sector de los discos antiguos suele ser de 512 bytes, mientras que los discos más recientes admiten 4k. Para ser compatible con todos los discos, GPT utiliza direcciones de bloque lógico (Logical Block Address, LBA) en sectores definidos. El tamaño predeterminado de LBA es 512 bytes.

El primer bloque de GPT registra el registro de arranque principal (MBR), seguido de 33 bloques para registrar información de la partición, y los últimos 33 bloques se utilizan para hacer una copia de seguridad de la información de la partición. El primero de estos 33 bloques es el registro de encabezado GPT. Esta parte registra la ubicación y el tamaño de la tabla de particiones en sí y la ubicación de la partición de respaldo. También coloca el código de verificación (CRC32) de la tabla de particiones. El sistema operativo puede utilice este código de verificación para determinar si el GPT es correcto. Si hay un error, puede usar la partición de respaldo para restaurarlo.

GPT no tiene el concepto de particiones extendidas, todas son particiones primarias, cada LBA se puede dividir en 4 particiones, por lo que se pueden dividir un total de 4 * 32 = 128 particiones.

MBR no admite discos duros de más de 2,2 TB, mientras que GPT admite hasta 2,33 TB = 8 ZB.


Programa de detección de encendido

1. BIOS

BIOS (Sistema básico de entrada/salida), que es un firmware (software integrado en el hardware), el programa BIOS se almacena en una memoria de solo lectura que no perderá su contenido después de un corte de energía.


BIOS es el primer programa ejecutado por la computadora cuando se inicia. Este programa conoce el disco que se puede iniciar y lee el registro de inicio principal (MBR) del primer sector del disco. El registro de inicio principal (MBR) realiza el inicio Management., este programa de administración de arranque cargará los archivos principales del sistema operativo.

El administrador de arranque en el Registro de arranque principal (MBR) proporciona las siguientes funciones: menús, carga de archivos principales y reenvío a otros administradores de arranque. La función de transferencia se puede utilizar para lograr un arranque múltiple. Solo necesita instalar el programa de administración de arranque de otro sistema operativo en el sector de arranque de otra partición. Al iniciar el programa de administración de arranque, puede elegir iniciar el sistema operativo actual o transferir a través del menú Proporcionar otros programas de administración de arranque para iniciar otro sistema operativo.

En la siguiente figura, el programa de administración de arranque en el registro de arranque principal (MBR) del primer sector proporciona dos menús: M1 y M2. M1 apunta al sistema operativo Windows y M2 apunta a los sectores de arranque de otras particiones, que contienen Otro programa de administración de arranque proporciona un menú que apunta a Linux.


Para instalar el arranque múltiple, lo mejor es instalar primero Windows y luego Linux. Debido a que el registro de arranque principal (MBR) se sobrescribirá al instalar Windows, Linux puede optar por instalar el programa de administración de arranque en el registro de arranque principal (MBR) o en el sector de arranque de otras particiones, y puede configurar el menú del programa de administración de arranque. .

2.UEFI

BIOS no puede leer la tabla de particiones GPT, pero UEFI sí.

4. Sistema de archivos

Particiones y sistemas de archivos.

Formatear una partición es crear un sistema de archivos en la partición. Por lo general, una partición solo se puede formatear con un sistema de archivos, pero tecnologías como las matrices de discos pueden formatear una partición con múltiples sistemas de archivos.

composición

Los componentes más importantes son los siguientes:

  • inodo: un archivo ocupa un inodo, registra los atributos del archivo y registra el número de bloque donde se encuentra el contenido del archivo;
  • bloque: registra el contenido del archivo. Cuando el archivo es demasiado grande, ocupará varios bloques.

Además, también incluye:

  • superbloque: registra la información general del sistema de archivos, incluida la cantidad total, el uso y la cantidad restante de inodos y bloques, así como el formato y la información relacionada del sistema de archivos;
  • Mapa de bits de bloque: un mapa de bits que registra si se utiliza el bloque.

lectura de archivos

Para el sistema de archivos Ext2, cuando desee leer el contenido de un archivo, primero busque todos los bloques donde se encuentra el contenido del archivo en el inodo y luego lea el contenido de todos los bloques.


Para el sistema de archivos FAT, no tiene inodo y cada bloque almacena el número del siguiente bloque.


fragmentación del disco

Significa que el bloque donde se encuentra el contenido de un archivo está demasiado disperso, lo que hace que el cabezal del disco se mueva demasiado, lo que reduce el rendimiento de lectura y escritura del disco.

bloquear

Los tamaños de bloque admitidos en el sistema de archivos Ext2 son 1 K, 2 K y 4 K. Los diferentes tamaños limitan el tamaño máximo de un solo archivo y del sistema de archivos.

tamaño 1 KB 2 KB 4 KB
archivo único más grande 16 GB 256GB 2TB
Sistema de archivos máximo 2TB 8TB 16TB

Un bloque solo puede ser utilizado por un archivo y las partes no utilizadas se desperdician directamente. Por lo tanto, si necesita almacenar una gran cantidad de archivos pequeños, lo mejor es elegir un bloque más pequeño.

inodo

El inodo contiene específicamente la siguiente información:

  • Permisos (lectura/escritura/ejecución);
  • Propietario y grupo (propietario/grupo);
  • capacidad;
  • Hora de establecimiento o cambio de estatus (ctime);
  • Hora de la última lectura (atime);
  • Hora de la última modificación (mtime);
  • Banderas que definen las características del archivo, como SetUID...;
  • El puntero al contenido real del archivo.

El inodo tiene las siguientes características:

  • El tamaño de cada inodo se fija en 128 bytes (los nuevos ext4 y xfs se pueden configurar en 256 bytes);
  • Cada archivo solo ocupa un inodo.

El inodo registra el número de bloque donde se encuentra el contenido del archivo, pero cada bloque es muy pequeño: un archivo grande requiere cientos de miles de bloques. Un inodo tiene un tamaño limitado y no puede hacer referencia directa a tantos números de bloque. Por lo tanto, se introdujeron referencias indirectas, dobles indirectas y triples indirectas. Las referencias indirectas permiten que el bloque de referencia registrado por el inodo registre información de referencia.


Tabla de contenido

Cuando se crea un directorio, se asignan un inodo y al menos un bloque. El contenido registrado por bloque es el número de inodo y el nombre de archivo de todos los archivos en el directorio.

Se puede ver que el inodo del archivo en sí no registra el nombre del archivo, el nombre del archivo se registra en el directorio, por lo que operaciones como agregar archivos, eliminar archivos y cambiar nombres de archivos están relacionadas con el permiso de escritura del directorio.

registro

Si hay un corte de energía repentino, se producirá un error en el sistema de archivos. Por ejemplo, el mapa de bits del bloque solo se modificó antes del corte de energía, pero los datos en realidad no se escribieron en el bloque.

El sistema de archivos ext3/ext4 introduce una función de registro, que se puede utilizar para reparar el sistema de archivos.

montar

El montaje utiliza un directorio como punto de entrada al sistema de archivos, es decir, después de ingresar al directorio, se pueden leer los datos del sistema de archivos.

Configuración del directorio

Para mantener la coherencia en la estructura de directorios de diferentes distribuciones de Linux, el Estándar de jerarquía del sistema de archivos (FHS) especifica la estructura de directorios de Linux. Los tres directorios más básicos son los siguientes:

  • / (raíz, directorio raíz)
  • /usr (recurso de software Unix): todo el software predeterminado del sistema se instalará en este directorio;
  • /var (variable): almacena archivos de datos durante la ejecución del sistema o programa.

5. Documentos

propiedades de archivo

Hay tres tipos de usuarios: propietarios de archivos, grupos y otros. Diferentes usuarios tienen diferentes permisos de archivos.

Cuando usa ls para ver un archivo, se mostrará la información sobre el archivo. Por ejemplo drwxr-xr-x 3 root root 17 May 6 00:14 .config, la explicación de esta información es la siguiente:

  • drwxr-xr-x: tipo de archivo y permisos, el primer dígito es el campo de tipo de archivo y los últimos 9 dígitos son el campo de permisos de archivo
  • 3: Número de enlaces
  • raíz: propietario del archivo
  • raíz: grupo al que pertenece
  • 17: Tamaño del archivo
  • 6 de mayo 00:14: hora en la que se modificó el archivo por última vez
  • .config: nombre del archivo

Los tipos de archivos comunes y sus significados son:

  • d: directorio
  • -:documento
  • l: archivo de enlace

En el campo de permiso de archivo de 9 dígitos, cada 3 dígitos están en un grupo y hay 3 grupos en total. Cada grupo representa los permisos de archivo para el propietario del archivo, el grupo al que pertenece y otras personas. Los tres dígitos en un conjunto de permisos son permisos r, w y x, lo que indica legible, escribible y ejecutable.

Hay tres tipos de tiempos de archivos:

  • hora de modificación (mtime): el archivo se actualizará cuando se actualice su contenido;
  • hora de estado (ctime): el estado (permisos, atributos) del archivo se actualizará cuando se actualice;
  • tiempo de acceso (atime): Se actualiza cuando se lee el archivo.

Operaciones básicas sobre archivos y directorios.

1. yo

Enumere la información de un archivo o directorio. La información del directorio son los archivos que contiene.

# ls [-aAdfFhilnrRSt] file|dir
-a :列出全部的文件
-d :仅列出目录本身
-l :以长数据串行列出,包含文件的属性与权限等等数据

2. discos compactos

Cambiar el directorio actual.

cd [相对路径或绝对路径]

3.mkdir

Crea un directorio.

# mkdir [-mp] 目录名称
-m :配置目录权限
-p :递归创建目录

4. es rm

Eliminar el directorio. El directorio debe estar vacío.

rmdir [-p] 目录名称
-p :递归删除目录

5. toque

Actualice la hora del archivo o cree un archivo nuevo.

# touch [-acdmt] filename
-a : 更新 atime
-c : 更新 ctime,若该文件不存在则不建立新文件
-m : 更新 mtime
-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date="日期或时间"
-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]

6. CP

Copie el archivo. Si hay más de dos archivos de origen, el archivo de destino debe ser un directorio.

cp [-adfilprsu] source destination
-a :相当于 -dr --preserve=all
-d :若来源文件为链接文件,则复制链接文件属性而非文件本身
-i :若目标文件已经存在时,在覆盖前会先询问
-p :连同文件的属性一起复制过去
-r :递归复制
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了

7. habitación

Borrar archivos.

# rm [-fir] 文件或目录
-r :递归删除

8. mv

Mover archivos.

# mv [-fiu] source destination
# mv [options] source1 source2 source3 .... directory
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖

Modificar permisos

Un conjunto de permisos se puede representar mediante números. En este momento, los tres bits de un conjunto de permisos se consideran bits de un número binario. El peso de cada bit de izquierda a derecha es 4, 2 y 1, es decir. es decir, el peso digital correspondiente a cada permiso, los valores son r: 4, w: 2, x: 1.

# chmod [-R] xyz dirname/filename

Ejemplo: cambie los permisos del archivo .bashrc a -rwxr-xr–.

# chmod 754 .bashrc

También puede utilizar símbolos para establecer permisos.

# chmod [ugoa]  [+-=] [rwx] dirname/filename
- u:拥有者
- g:所属群组
- o:其他人
- a:所有人
- +:添加权限
- -:移除权限
- =:设定权限

Ejemplo: agregue permisos de escritura para todos los usuarios en el archivo .bashrc.

# chmod a+w .bashrc

Permisos predeterminados

  • Permisos de archivo predeterminados: el archivo no tiene permisos ejecutables de forma predeterminada, por lo que es 666, que es -rw-rw-rw-.
  • Permisos predeterminados del directorio: el directorio debe ser accesible, es decir, debe tener permisos ejecutables, por eso es 777, que es drwxrwxrwx.

Puede configurar o ver los permisos predeterminados a través de umask, generalmente expresado en forma de máscara. Por ejemplo, 002 significa que los permisos de otros usuarios han sido eliminados por un permiso de 2, que es el permiso de escritura. Por lo tanto, al crear un archivo nuevo, los permisos predeterminados son -rw-rw.-r–.

permisos de directorio

Los nombres de archivos no se almacenan en el contenido de un archivo, sino en el directorio en el que se encuentra el archivo. Por lo tanto, tener el permiso w en el archivo no puede modificar el nombre del archivo.

Los directorios almacenan listas de archivos y los permisos de un directorio son los permisos en su lista de archivos. Por lo tanto, el permiso r del directorio significa que se puede leer la lista de archivos; el permiso w significa que la lista de archivos se puede modificar, específicamente, agregar, eliminar archivos y modificar el nombre del archivo; el permiso x puede hacer que el directorio sea un directorio de trabajo, y el permiso x es r Según los permisos w, si un directorio no se puede convertir en un directorio de trabajo, no habrá forma de leer la lista de archivos y modificarla.

Enlace


# ln [-sf] source_filename dist_filename
-s :默认是实体链接,加 -s 为符号链接
-f :如果目标文件存在时,先删除目标文件

1. Enlace de entidad

Cree una entrada en el directorio para registrar el nombre del archivo y el número de inodo. Este inodo es el inodo del archivo fuente.

Elimine cualquier entrada y el archivo seguirá existiendo, siempre que el número de referencias no sea cero.

Existen las siguientes restricciones: no puede abarcar sistemas de archivos y no puede vincular directorios.

# ln /etc/crontab .
# ll -i /etc/crontab crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab

2. Enlaces simbólicos

El archivo de enlace simbólico guarda la ruta absoluta del archivo fuente y se ubicará en el archivo fuente al leerlo, lo que puede entenderse como un acceso directo a Windows.

Cuando se elimina el archivo fuente, el archivo vinculado no se puede abrir.

Debido a que la ruta está registrada, se puede establecer un enlace simbólico para el directorio.

# ll -i /etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab

Obtener contenido del archivo

1. gato

Obtenga el contenido del archivo.

# cat [-AbEnTv] filename
-n :打印出行号,连同空白行也会有行号,-b 不会

2. tac

Es la operación inversa de cat, la impresión comienza desde la última línea.

3 más

A diferencia de cat, puede ver el contenido del archivo página por página, lo que es más adecuado para ver archivos grandes.

4. menos

Similar a más, pero con la función añadida de pasar páginas hacia adelante.

5. cabeza

Obtenga las primeras líneas del archivo.

# head [-n number] filename
-n :后面接数字,代表显示几行的意思

6. cola

Es la operación inversa a head, obteniendo solo las siguientes líneas.

7. de

Muestra archivos binarios en formato de caracteres o hexadecimal.

Búsqueda de comandos y archivos

1. cual

Búsqueda de comandos.

# which [-a] command
-a :将所有指令列出,而不是只列第一个

2. ¿dónde está?

Búsqueda de archivos. Es más rápido porque sólo busca en unos pocos directorios específicos.

# whereis [-bmsu] dirname/filename

3. localizar

Búsqueda de archivos. Puede buscar mediante palabras clave o expresiones regulares.

localizar utiliza la base de datos /var/lib/mlocate/ para buscar. Se almacena en la memoria y se actualiza una vez al día, por lo que no puede utilizar la localización para buscar archivos recién creados. Puede utilizar actualizadob para actualizar la base de datos inmediatamente.

# locate [-ir] keyword
-r:正则表达式

4. encontrar

Búsqueda de archivos. Puede buscar utilizando las propiedades y permisos del archivo.

# find [basedir] [option]
example: find . -name "shadow*"

① Opciones relacionadas con el tiempo

-mtime  n :列出在 n 天前的那一天修改过内容的文件
-mtime +n :列出在 n 天之前 (不含 n 天本身) 修改过内容的文件
-mtime -n :列出在 n 天之内 (含 n 天本身) 修改过内容的文件
-newer file : 列出比 file 更新的文件

Los rangos de tiempo indicados para +4, 4 y -4 son los siguientes:


② Opciones relacionadas con el propietario y el grupo del archivo

-uid n
-gid n
-user name
-group name
-nouser :搜索拥有者不存在 /etc/passwd 的文件
-nogroup:搜索所属群组不存在于 /etc/group 的文件

③ Opciones relacionadas con permisos y nombres de archivos

-name filename
-size [+-]SIZE:搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k
-type TYPE
-perm mode  :搜索权限等于 mode 的文件
-perm -mode :搜索权限包含 mode 的文件
-perm /mode :搜索权限包含任一 mode 的文件

6. Compresión y embalaje

Nombre del archivo comprimido

Hay muchos nombres de archivos comprimidos en Linux, los más comunes son los siguientes:

nombre de la extensión Compresor
*.Z comprimir
*.cremallera cremallera
*.gz zip
*.bz2 bzip2
*.xz xz
*.alquitrán Los datos empaquetados por el programa tar no están comprimidos.
*.tar.gz Archivos empaquetados por el programa tar y comprimidos por gzip
*.tar.bz2 Archivos empaquetados por el programa tar y comprimidos por bzip2
*.tar.xz Archivos empaquetados por el programa tar y comprimidos por xz

Instrucciones de compresión

1. zip

gzip es el comando de compresión más utilizado en Linux y puede descomprimir archivos comprimidos mediante compress, zip y gzip.

Después de la compresión gzip, el archivo fuente ya no existe.

Hay 9 niveles de compresión diferentes disponibles.

Puede utilizar zcat, zmore y zless para leer el contenido de archivos comprimidos.

$ gzip [-cdtv#] filename
-c :将压缩的数据输出到屏幕上
-d :解压缩
-t :检验压缩文件是否出错
-v :显示压缩比等信息
-# : # 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6

2. bzip2

Proporciona una relación de compresión más alta que gzip.

Ver comandos: bzcat, bzmore, bzless, bzgrep.

$ bzip2 [-cdkzv#] filename
-k :保留源文件

3. xz

Proporciona una mejor relación de compresión que bzip2.

Se puede ver que las relaciones de compresión de gzip, bzip2 y xz se optimizan constantemente. Sin embargo, cabe señalar que cuanto mayor sea la relación de compresión, mayor será el tiempo de compresión.

Ver comandos: xzcat, xzmore, xzless, xzgrep.

$ xz [-dtlkc#] filename

Embalar

El comando de compresión solo puede comprimir un archivo, mientras que el paquete puede empaquetar varios archivos en un archivo grande. tar no solo se puede usar para empaquetar, sino que también puede usar gzip, bzip2, xz para comprimir los archivos empaquetados.

$ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename...  ==打包压缩
$ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件]              ==查看
$ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录]    ==解压缩
-z :使用 zip;
-j :使用 bzip2;
-J :使用 xz;
-c :新建打包文件;
-t :查看打包文件里面有哪些文件;
-x :解打包或解压缩的功能;
-v :在压缩/解压缩的过程中,显示正在处理的文件名;
-f : filename:要处理的文件;
-C 目录 : 在特定目录解压缩。
Uso Orden
Empacar y comprimir tar -jcv -f filename.tar.bz2 El nombre del archivo o directorio que se va a comprimir
Controlar tar -jtv -f nombre de archivo.tar.bz2
abrir la cremallera tar -jxv -f nombre de archivo.tar.bz2 -C Directorio para descomprimir

7. Golpe

Puede solicitar que el kernel proporcione servicios a través de Shell, y Bash es un tipo de Shell.

característica

  • Historial de comandos: registra los comandos utilizados
  • Finalización de comandos y archivos: tecla de método abreviado: pestaña
  • Alias ​​con nombre: por ejemplo, ll es un alias para ls -al
  • scripts de shell
  • Comodín: por ejemplo, ls -l /usr/bin/X* enumera todos los archivos que comienzan con X en /usr/bin

Manipulación de variables

Para asignar un valor a una variable directamente use =.

Para acceder a una variable, necesita agregar $ antes de la variable, o puede usar el formulario ${};

Variables de salida usando el comando echo.

$ x=abc
$ echo $x
$ echo ${x}

Si hay espacios en el contenido de la variable, se deben utilizar comillas dobles o comillas simples.

  • Los caracteres especiales entre comillas dobles pueden conservar sus características originales. Por ejemplo, x="lang es $LANG", entonces el valor de x es lang es zh_TW.UTF-8;
  • Los caracteres especiales entre comillas simples son los propios caracteres especiales. Por ejemplo, x='lang is $LANG', entonces el valor de x is lang es $LANG.

Puede utilizar `instrucción` o $(instrucción) para asignar el resultado de la ejecución de la instrucción a una variable. Por ejemplo, versión=$(uname -r), el valor de la versión es 4.15.0-22-generic.

Puede usar el comando de exportación para convertir variables personalizadas en variables de entorno. Las variables de entorno se pueden usar en subprogramas. Los llamados subprogramas son sub-Bash generados por el Bash actual.

Las variables de Bash se pueden declarar como matrices y números enteros. Tenga en cuenta que los tipos numéricos no tienen números de punto flotante. Si no se declara, el valor predeterminado es el tipo cadena. Las variables se declaran usando el comando declarar:

$ declare [-aixr] variable
-a : 定义为数组类型
-i : 定义为整数类型
-x : 定义为环境变量
-r : 定义为 readonly 类型

Utilice [ ] para indexar una matriz:

$ array[1]=a
$ array[2]=b
$ echo ${array[1]}

orden de búsqueda de instrucciones

  • Ejecute instrucciones con rutas absolutas o relativas, como /bin/ls o ./ls;
  • Busque la instrucción por alias y ejecútela;
  • Ejecutado por las instrucciones integradas de Bash;
  • Se ejecuta la primera instrucción encontrada en el orden de las rutas de búsqueda especificadas por la variable $PATH.

Redirección del flujo de datos

La redirección se refiere al uso de archivos en lugar de entrada estándar, salida estándar y salida de error estándar.

1 código operador
Entrada estándar (stdin) 0 < 或 <<
Salida estándar (stdout) 1 > o >>
Salida de error estándar (stderr) 2 2> o 2>>

Entre ellos, una flecha indica la redirección de forma sobrescrita, mientras que dos flechas indican la redirección de forma anexada.

La salida estándar innecesaria y la salida de error estándar se pueden redirigir a /dev/null, lo que equivale a tirarlos a la papelera.

Si necesita redirigir la salida estándar y la salida de error estándar a un archivo al mismo tiempo, debe convertir una salida en otra salida. Por ejemplo, 2>&1 significa convertir la salida de error estándar en salida estándar.

$ find /home -name .bashrc > list 2>&1

8. Instrucciones de canalización

管道是将一个命令的标准输出作为另一个命令的标准输入,在数据需要经过多个步骤的处理之后才能得到我们想要的内容时就可以使用管道。

在命令之间使用 | 分隔各个管道命令。

$ ls -al /etc | less

提取指令

cut 对数据进行切分,取出想要的部分。

切分过程一行一行地进行。

$ cut
-d :分隔符
-f :经过 -d 分隔后,使用 -f n 取出第 n 个区间
-c :以字符为单位取出区间

示例 1:last 显示登入者的信息,取出用户名。

$ last
root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in
root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 (06:33)
root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16)

$ last | cut -d ' ' -f 1

示例 2:将 export 输出的信息,取出第 12 字符以后的所有字符串。

$ export
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/home/dmtsai"
declare -x HOSTNAME="study.centos.vbird"
.....(其他省略).....

$ export | cut -c 12-

排序指令

sort 用于排序。

$ sort [-fbMnrtuk] [file or stdin]
-f :忽略大小写
-b :忽略最前面的空格
-M :以月份的名字来排序,例如 JAN,DEC
-n :使用数字
-r :反向排序
-u :相当于 unique,重复的内容只出现一次
-t :分隔符,默认为 tab
-k :指定排序的区间

示例:/etc/passwd 文件内容以 : 来分隔,要求以第三列进行排序。

$ cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash
alex:x:1001:1002::/home/alex:/bin/bash
arod:x:1002:1003::/home/arod:/bin/bash

uniq 可以将重复的数据只取一个。

$ uniq [-ic]
-i :忽略大小写
-c :进行计数

示例:取得每个人的登录总次数

$ last | cut -d ' ' -f 1 | sort | uniq -c
1
6 (unknown
47 dmtsai
4 reboot
7 root
1 wtmp

双向输出重定向

输出重定向会将输出内容重定向到文件中,而 tee 不仅能够完成这个功能,还能保留屏幕上的输出。也就是说,使用 tee 指令,一个输出会同时传送到文件和屏幕上。

$ tee [-a] file

字符转换指令

tr 用来删除一行中的字符,或者对字符进行替换。

$ tr [-ds] SET1 ...
-d : 删除行中 SET1 这个字符串

示例,将 last 输出的信息所有小写转换为大写。

$ last | tr '[a-z]' '[A-Z]'

col 将 tab 字符转为空格字符。

$ col [-xb]
-x : 将 tab 键转换成对等的空格键

expand 将 tab 转换一定数量的空格,默认是 8 个。

$ expand [-t] file
-t :tab 转为空格的数量

join 将有相同数据的那一行合并在一起。

$ join [-ti12] file1 file2
-t :分隔符,默认为空格
-i :忽略大小写的差异
-1 :第一个文件所用的比较字段
-2 :第二个文件所用的比较字段

paste 直接将两行粘贴在一起。

$ paste [-d] file1 file2
-d :分隔符,默认为 tab

分区指令

split 将一个文件划分成多个文件。

$ split [-bl] file PREFIX
-b :以大小来进行分区,可加单位,例如 b, k, m 等
-l :以行数来进行分区。
- PREFIX :分区文件的前导名称

九、正则表达式

grep

g/re/p(globally search a regular expression and print),使用正则表示式进行全局查找并打印。

$ grep [-acinv] [--color=auto] 搜寻字符串 filename
-c : 统计匹配到行的个数
-i : 忽略大小写
-n : 输出行号
-v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行
--color=auto :找到的关键字加颜色显示

示例:把含有 the 字符串的行提取出来(注意默认会有 --color=auto 选项,因此以下内容在 Linux 中有颜色显示 the 字符串)

$ grep -n 'the' regular_express.txt
8:I can't finish the test.
12:the symbol '*' is represented as start.
15:You are the best is mean you are the no. 1.
16:The world Happy is the same with "glad".
18:google is the best tools for search keyword

示例:正则表达式 a{m,n} 用来匹配字符 a m~n 次,这里需要将 { 和 } 进行转义,因为它们在 shell 是有特殊意义的。

$ grep -n 'a\{2,5\}' regular_express.txt

printf

用于格式化输出。它不属于管道命令,在给 printf 传数据时需要使用 $( ) 形式。

$ printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt)
    DmTsai    80    60    92    77.33
     VBird    75    55    80    70.00
       Ken    60    90    70    73.33

awk

是由 Alfred Aho,Peter Weinberger 和 Brian Kernighan 创造,awk 这个名字就是这三个创始人名字的首字母。

awk 每次处理一行,处理的最小单位是字段,每个字段的命名方式为:$n,n 为字段号,从 1 开始,$0 表示一整行。

示例:取出最近五个登录用户的用户名和 IP。首先用 last -n 5 取出用最近五个登录用户的所有信息,可以看到用户名和 IP 分别在第 1 列和第 3 列,我们用 $1 和 $3 就能取出这两个字段,然后用 print 进行打印。

$ last -n 5
dmtsai pts/0 192.168.1.100 Tue Jul 14 17:32 still logged in
dmtsai pts/0 192.168.1.100 Thu Jul 9 23:36 - 02:58 (03:22)
dmtsai pts/0 192.168.1.100 Thu Jul 9 17:23 - 23:36 (06:12)
dmtsai pts/0 192.168.1.100 Thu Jul 9 08:02 - 08:17 (00:14)
dmtsai tty1 Fri May 29 11:55 - 12:11 (00:15)
$ last -n 5 | awk '{print $1 "\t" $3}'

可以根据字段的某些条件进行匹配,例如匹配字段小于某个值的那一行数据。

$ awk '条件类型 1 {动作 1} 条件类型 2 {动作 2} ...' filename

示例:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。

$ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
root 0
bin 1
daemon 2

awk 变量:

变量名称 代表意义
NF 每一行拥有的字段总数
NR 目前所处理的是第几行数据
FS 目前的分隔字符,默认是空格键

示例:显示正在处理的行号以及每一行有多少字段

$ last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}'
dmtsai lines: 1 columns: 10
dmtsai lines: 2 columns: 10
dmtsai lines: 3 columns: 10
dmtsai lines: 4 columns: 10
dmtsai lines: 5 columns: 9

十、进程管理

查看进程

1. ps

查看某个时间点的进程信息。

示例:查看自己的进程

# ps -l

示例:查看系统所有进程

# ps aux

示例:查看特定的进程

# ps aux | grep threadx

2. pstree

查看进程树。

示例:查看所有进程树

# pstree -A

3. top

实时显示进程信息。

示例:两秒钟刷新一次

# top -d 2

4. netstat

查看占用端口的进程

示例:查看特定端口的进程

# netstat -anp | grep port

进程状态

状态 说明
R running or runnable (on run queue)
正在执行或者可执行,此时进程位于执行队列中。
D uninterruptible sleep (usually I/O)
不可中断阻塞,通常为 IO 阻塞。
S interruptible sleep (waiting for an event to complete)
可中断阻塞,此时进程正在等待某个事件完成。
Z zombie (terminated but not reaped by its parent)
僵死,进程已经终止但是尚未被其父进程获取信息。
T stopped (either by a job control signal or because it is being traced)
结束,进程既可以被作业控制信号结束,也可能是正在被追踪。


SIGCHLD

当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中:

  • 得到 SIGCHLD 信号;
  • waitpid() 或者 wait() 调用会返回。

其中子进程发送的 SIGCHLD 信号包含了子进程的信息,比如进程 ID、进程状态、进程使用 CPU 的时间等。

在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程信息,父进程通过 wait() 和 waitpid() 来获得一个已经退出的子进程的信息。


wait()

pid_t wait(int *status)

父进程调用 wait() 会一直阻塞,直到收到一个子进程退出的 SIGCHLD 信号,之后 wait() 函数会销毁子进程并返回。

如果成功,返回被收集的子进程的进程 ID;如果调用进程没有子进程,调用就会失败,此时返回 -1,同时 errno 被置为 ECHILD。

参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL。

waitpid()

pid_t waitpid(pid_t pid, int *status, int options)

作用和 wait() 完全相同,但是多了两个可由用户控制的参数 pid 和 options。

pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号。如果 pid=-1 时,那么和 wait() 作用相同,都是关心所有子进程退出的 SIGCHLD 信号。

options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也就是说它会立即返回,父进程可以继续执行其它任务。

孤儿进程

一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。

孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。

由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。

僵尸进程

一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。

僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。

系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。

要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。

参考资料

Supongo que te gusta

Origin blog.csdn.net/cljdsc/article/details/133049907
Recomendado
Clasificación