Conceptos básicos de Linux y puntos de entrevistas de alta frecuencia

usuarios, grupos de usuarios, permisos

Linux es un sistema operativo multiusuario. Los usuarios generales se asignan a un grupo de usuarios al comienzo de la creación y disfrutan de permisos generales. Un sistema operativo tiene sólo un superusuario llamado root, que pertenece a un grupo raíz y tiene la máxima autoridad.
inserte la descripción de la imagen aquí

usuario

raíz

Muchos permisos avanzados, como useradd, chown y otros permisos avanzados, solo pueden ser utilizados por usuarios root. En este momento, si los usuarios comunes desean estos permisos avanzados, deben usar la palabra clave "sudo" para indicar que el comando se ejecuta como root .

Comandos para privilegios de root comunes

useradd + passwd Agregar usuario y cambiar contraseña

useradd -m user_name
passwd user_name
  1. -m significa crear un grupo de usuarios nombrado por nombre_usuario al crear un nombre_usuario común, el usuario es el usuario inicial del grupo y el usuario no puede abandonar este grupo e inicializar su directorio de inicio /home/nombredeusuario con el archivo en /etc/skel /
  2. ¡Debe haber un comando passwd! De lo contrario, el nuevo usuario no podrá utilizarse normalmente.

usuariodel eliminar usuario

userdel user_name
userdel user_name -t 

Sin -t, solo se eliminará el nombre de usuario y la carpeta del usuario correspondiente no se eliminará de /home. Con -t, la carpeta del usuario se eliminará al mismo tiempo.

usermod modifica la cuenta de un usuario

Es mejor no utilizar este comando, porque si se ha instalado algún software en el directorio de inicio, causará problemas de indexación de rutas de software. ! !

  • -l Cambiar el nombre del usuario. Cabe señalar que el nombre del directorio de inicio del usuario en /home no cambiará y debe modificarse manualmente.
  • -g modifica el grupo en el que se encuentra el usuario, por ejemplo usermod -g friends lion modifica el grupo del usuario lion como amigos.
  • -G permite al usuario agregar varios grupos a la vez, como usermod -G friends,foo,bar lion.
  • -a -G te permitirá salir del grupo original. Si no quieres hacer esto, debes agregar el parámetro -a, que significa agregar.

su cambiar a otro usuario

su user_name

grupo de usuario

Comandos para privilegios de root comunes

groupadd para crear un grupo, groupdel para eliminar un grupo, groups para ver el grupo del usuario

groupadd user_name
groupdel user_name
groups user_name

Nota:

  1. Todos los nombres de usuario y la información del grupo de usuarios se almacenan en el archivo /etc/passwd

    Formato:

    user_name:passwd:user_id:group_id:description:home_path:login_shell_path
    

    其中UID:0—raíz; 1~499–usuario del sistema; 500~65535—usuario general,¡El usuario del sistema no puede moverse! ! !

  2. El directorio de inicio del usuario root es /root/, y el directorio de inicio del usuario normal es /home/nombre de usuario/

  3. El archivo /etc/shadow guarda las contraseñas de inicio de sesión de todos los usuarios.

  4. Cómo comprobar el usuario y los permisos actuales

    El terminal shell comienza con # como superusuario, $ comienza con un usuario normal y usa whoami para devolver el nombre de usuario actual.

Permisos de archivos

Comandos privilegiados no root

Ver permisos de archivos

ls -l dir_path-or-file_path

-l enumera (en formato de una sola columna) el modo del archivo, incluido el número de enlace del archivo, el nombre del propietario, el nombre del grupo, el tamaño del archivo (en bytes), la información de tiempo y el nombre del archivo.

Por ejemplo, salida drwxr-xr-x 3 root root 17 May 6 00:14 .config, la interpretación de esta información es la siguiente:

  • drwxr-xr-x: tipo de archivo y permiso, el primer dígito es el campo de tipo de archivo (incluido d: directorio, -: archivo, l: archivo de enlace), los últimos 9 dígitos son el campo de permiso del archivo (cada 3 dígitos es un grupo, un total de 3 grupos, cada grupo representa los permisos de archivo para el propietario del archivo, el grupo al que pertenece y otras personas. Los 3 dígitos en un grupo de permisos son permisos r, w y x, lo que indica legible, escribible y ejecutable)
  • 3: Número de enlaces
  • raíz: propietario del archivo
  • raíz: el 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

Comandos para privilegios de root comunes:

chgrp modifica el grupo del archivo

cambiar de grupo~

chgrp bar file.txt 

Indica que el grupo del archivo file.txt se cambia a la barra de grupo

chown cambia el propietario del archivo

chown -R 用户名称:用户组名称 文件或目录
  • -R Establece recursivamente subdirectorios y subarchivos en la carpeta de destino

    Es decir, los permisos de todos los archivos y directorios bajo el subdirectorio se actualizan para este usuario y grupo de usuarios.

chmod cambia los permisos del propietario del archivo, grupo y otros

chmod -R 655 /mnt/sda/smm/dataset/ScanNet/
chmod -R o+rw /mnt/sda/smm/dataset/ScanNet/

655 indica que el permiso para modificar todos los archivos en la carpeta ScanNet es: propietario rw-, mismo grupo de usuarios rx, otros rx

o+rw significa que otras personas aumentan los permisos r y w

Descripción de parámetros:

  • Utilice letras para asignar permisos

    u: La abreviatura de usuario, que significa usuario, indicando el propietario.

    g: La abreviatura de grupo, el significado de grupo, significa usuarios del grupo.

    o: La abreviatura de other, que significa otros usuarios.

    a: La abreviatura de todos, que significa todos los usuarios.

    +: Signo más, que significa agregar permiso.

    - : Signo menos, que indica eliminación de permisos.

    =: El signo igual significa asignar permisos.

  • Determinar permisos usando números

    permisos número
    r 4
    w 2
    X 1

    Los permisos de un directorio son permisos sobre 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 y 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 Y la base de los permisos w, si un directorio no se puede convertir en un directorio de trabajo, no hay forma de leer la lista de archivos y modificar la lista de archivos

Edición y manipulación de archivos.

Buscar archivos en directorios, buscar contenidos de archivos en archivos

buscar: buscar archivos en un directorio

Buscar por nombre de archivo y ruta raíz

find -name "file.txt" --> 当前目录以及子目录下通过名称查找文件
find . -name "syslog" --> 当前目录以及子目录下通过名称查找文件
find /var/log -name "*syslog*" --> 查找包含syslog的文件 复制代码

Caracteres especiales que se pueden utilizar en expresiones regulares en ""

Buscar por tamaño de archivo

find /var -size +10M --> /var 目录下查找文件大小超过 10M 的文件

Buscar por archivo la hora del último acceso

find -name "*.txt" -atime -7  --> 近7天内访问过的.txt结尾的文件

Buscar solo directorios o archivos

find . -name "file" -type f  --> 只查找当前目录下的file文件find . -name "file" -type d  --> 只查找当前目录下的file目录复制代码

Acción Buscar resultados

find -name "*.txt" -printf "%p - %u" --> 找出所有后缀为txt的文件,并按照 %p - %u格式打印,其中%p=文件名,%u=文件所有者
find -name "*.jpg" -delete --> 删除当前目录以及子目录下所有.jpg为后缀的文件,不会有删除提示,因此要慎用
find -name "*.c" -exec chmod 600 {} ; --> 对每个.c结尾的文件,都进行 -exec 参数指定的操作,{} 会被查找到的文件替代,; 是必须的结尾
find -name "*.c" -ok chmod 600 {} ; --> 和上面的功能一直,会多一个确认提示复制代码

grep: coincide globalmente con una expresión regular en un archivo e imprime en el shell

grep -E [Pp]ath /etc/profile

Indica imprimir el contenido del archivo de /etc/profile siempre coincidiendo con la Ruta o la ruta al shell

Descripción de parámetros:

  • -E va seguido del contenido de la expresión regular incluida en "[]"

    * coincide con 0 o más caracteres

    ? coincide con cualquier carácter

    [lista] coincide con cualquier carácter de la lista

    [^list] coincide con cualquier carácter que no sea un carácter individual en la lista

    [c1-c2] coincide con cualquier carácter en c1-c2, como por ejemplo: [0-9]

    {string1,string2,…} coincide con uno de string1 o string2 (o más)

    {c1...c2} coincide con todos los caracteres en c1-c2, como {1...10}

  • -i ignora mayúsculas y minúsculas, grep -i ruta /etc/profile

  • -n mostrar número de línea, grep -n ruta /etc/profile

  • -v solo muestra aquellas líneas donde no está el texto de búsqueda, grep -v ruta /etc/profile

  • -r búsqueda recursiva, grep -r hola /etc. También hay un comando rgrep en Linux, que es equivalente a grep -r

Vinculación y eliminación de archivos

Comprenda cómo se almacenan los archivos de Linux antes de comprender los enlaces de archivos. El almacenamiento de un archivo de Linux incluye tres partes: nombre del archivo, contenido del archivo y permiso. Cada nombre de archivo está vinculado al contenido del archivo a través del identificador de inodo en la lista de nombres de archivo.

ln - establecer un enlace

Hay dos tipos de enlaces en Linux: enlaces físicos (enlaces físicos) y enlaces blandos (enlaces simbólicos).

inserte la descripción de la imagen aquí

  • Enlace físico (enlace de entidad)
ln file1 hard_ln1

Cree un enlace físico llamado hard_ln1 para vincular al inodo correspondiente al archivo1. Al eliminar el contenido del archivo correspondiente a hard_ln1, el contenido del archivo se eliminará solo cuando el número de referencia del inodo correspondiente sea 0

  • Enlace suave (enlace simbólico)
ln -s file1 soft_ln1

Cree un enlace suave llamado soft_ln1, enlace al archivo1, muestre el contenido del archivo1, pero de hecho el inodo del archivo2 es diferente del archivo1. Si eliminamos soft_ln1, el archivo1 no se verá afectado, pero si eliminamos el archivo1, soft_ln1 se convertirá en un enlace inactivo, porque el archivo señalado desapareció.

rm - eliminar un archivo

Eliminar archivos y directorios. Como no hay papelera de reciclaje en Linux, es muy difícil recuperarlos una vez eliminados, por lo que debes tener cuidado.

rm file_path/file_name

【Parámetros comunes】

  • -i Confirmar al usuario si desea eliminar;
  • -f eliminación forzada del archivo;
  • -r Elimina carpetas de forma recursiva, la famosa operación de eliminación rm -rf.

redirigir

redirección de entrada

A <B

Tome B como entrada del comando A y use el contenido en name.csv como entrada de cat de la siguiente manera, y el resultado de su operación es el mismo que el de cat name.csv

cat < name.csv

redirección de salida

Cubierto>, No cubierto>>

cut -d , -f 1 notes.csv > name.csv

El comando anterior significa cortar el archivo notes.csv mediante "," y redirigir la primera parte del resultado del corte al archivo name.csv. Si el archivo de salida no existe, se creará uno nuevo; si el archivo de salida ya existe, se sobrescribirá.

cut -d , -f 1 notes.csv >> name.csv

El comando anterior agregará el nombre a name.csv.

redirección de tuberías

A | B significa hacer que el resultado de la instrucción A sea el objetivo de la instrucción B:

grep log -Ir /var/log | cut -d : -f 1 | sort | uniq

El comando anterior significa buscar el texto /var/log en la carpeta de registro y luego usar el texto de registro encontrado como destino del comando de corte y usar cut para obtener la primera parte cortada como destino del comando uniq para deduplicación

Aviso:

  1. Los parámetros de grep indican
    • -r significa recursión, -I se usa para excluir binarios

Instalar usando un repositorio de software

El sufijo del paquete de software de la familia Red Hat es generalmente .rpm y el sufijo del paquete de software de la familia Debian es .deb.

yum es la herramienta de administración de paquetes predeterminada en CentOS, adecuada para la familia Red Hat.

apt es la herramienta de administración de paquetes predeterminada en Ubuntu, adecuada para la familia Debian.

Utilice Cmake para compilar el código fuente

Si desea utilizar software que no está en el almacén de yum, debe encontrar el código fuente del software usted mismo, compilar e instalar el código fuente para su uso.

Cmake es una herramienta de compilación avanzada que puede compilar código fuente en archivos binarios ejecutables. Los pasos de compilación específicos son los siguientes:

  1. Descarga el código fuente o escribe el tuyo propio

    Por ejemplo, un archivo hello.cpp con "¡hola palabra!" es el código fuente

  2. Escribe CMakeLists.txt

    Equivalente a un archivo de instrucciones, que indica a cmake que ejecute los comandos en CMakeLists.txt uno por uno

  3. Compile y genere archivos ejecutables con el comando cmake

  4. Ejecute el archivo ejecutable para verificar que el software se haya instalado correctamente

Comprender CMakeLists.txt

El siguiente es un CMakeLists.txt

#  CMakeLists.txt
# top-level CMake configuration file
cmake_minimum_required(VERSION 3.5)

project(CUT_PURSUIT_SEG)


#------------------------------------------------------------------------------
# internal cmake settings
#------------------------------------------------------------------------------
set(CMAKE_COLOR_MAKEFILE ON)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
set(CMAKE_MACOSX_RPATH ON)
include(FeatureSummary)

#------------------------------------------------------------------------------
# General settings
#------------------------------------------------------------------------------
set (CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -std=c++11")

#------------------------------------------------------------------------------
# actual library
#------------------------------------------------------------------------------
add_subdirectory(src)

"cmake_minimum_required" es la palabra clave de la instrucción, "()" es la variable pasada

A continuación, explique algunas palabras clave y parámetros de comando que deben dominarse.

Palabras clave de instrucción involucradas en CMakeLists.txt

PROYECTO

Se utiliza para especificar el nombre del proyecto y el idioma admitido. El siguiente ejemplo indica que el nombre del proyecto es HOLA y los lenguajes de compilación admitidos son C++ y JAVA.

PROJECT (HELLO CXX JAVA)

Aviso:

  • Esta palabra clave define implícitamente dos variables PROJECT_BINARY_DIR y PROJECT_SOURCE_DIR . El ejemplo define las variables HELLO_BINARY_DIR y HELLO_SOURCE_DIR.

COLOCAR

Se utiliza para mostrar la variable especificada, como se muestra en el siguiente ejemplo: 2 rutas de archivo de main.cpp y fun1.cpp se almacenan en el parámetro SRC_LSIT

SET (SRC_LSIT main.cpp fun1.cpp)

Aviso:

  • Si el archivo contiene caracteres especiales, deberá utilizar ""
  • Palabras clave de instrucción (variable 1, variable 2): las palabras clave de instrucción no distinguen entre mayúsculas y minúsculas, los parámetros y las variables sí distinguen entre mayúsculas y minúsculas.

MENSAJE

Se utiliza para especificar la salida de información personalizada a los usuarios finales , como se muestra en el siguiente ejemplo.

SATUS >> 在shell向用户输出前缀为 '--'的info, eg: '-- Generating done'
FATAL_ERROR >> 立即终止所有cmake过程
SEND_ERROR >> cmake过程产生错误, 过程被跳过

AGREGAR_EXECUTABLE

Se utiliza para especificar que se genere un archivo ejecutable para el usuario , lo que significa empaquetar todos los archivos incluidos en la variable SRC_LIST y generar el archivo ejecutable hello_exe.

ADD_EXECUTABLE(hello_exe ${SRC_LIST})

Aviso:

  • ${} significa tomar el valor de la variable en {}

AGREGAR_SUBDIRECTORIO

Se utiliza para especificar la ruta de la subcarpeta , agregar ~/proj/src/ al directorio del proyecto, compilar el archivo binario ".bin" generado y colocarlo en ~/proj/bin/.

 ADD_SUBDIRECTORY(src bin)

Compilar código fuente diseñado

Si solo desea mostrar "¡Hola palabra!" en la pantalla, puede ignorar por completo esta sección, pero si desea crear un proyecto a gran escala, como el desarrollo de un software de reconocimiento de voz, entonces es imprescindible diseñar el código fuente. ¡ten habilidad para ti!

Suponiendo que todos los archivos de su proyecto están en la carpeta ~/proj, el diseño sugerido de su carpeta es el siguiente:

proj
	bin/  编译好的可执行
	src/  存放proj的源代码
	  CMakeLists.txt  编写编译要执行的指令
	doc/  放工程文档
	CMakeLists.txt  一般用来把目录src/添加到cmake编译查询路径中
	READMD.md
	run_proj.sh  运行项目的脚本文件

Si ha completado todos los archivos del proyecto, simplemente empaquete la carpeta del proyecto para el cliente, después de que el cliente extraiga la carpeta del proyecto, ejecute el siguiente comando

cd proj
mkdir build && cd build
cmake .. -参数1= -参数2=  && make

proj/CMakeLists.txt se utiliza como entrada del comando cmake, y todos los resultados de la compilación make se colocarán en proj/build, formando la siguiente estructura de directorios

proj
	build/
        - CMakeCache.txt 
        - cmake_install.cmake 
        - CMakeFiles/
        - Makefile
	bin/  编译好的可执行
	src/  存放proj的源代码
	    - CMakeLists.txt  编写编译要执行的指令
	doc/  放工程文档
	CMakeLists.txt  一般用来把目录src/添加到cmake编译查询路径中
	READMD.md
	run_proj.sh  运行项目的脚本文件

Conexión SSH al servidor remoto

Supongamos que el servidor de intranet A y el servidor de extranet B

Establezca una conexión SSH e inicie sesión en el servidor sin contraseña

Al transmitir la clave pública ssh entre A y B, se puede realizar un inicio de sesión sin contraseña. Los pasos específicos son los siguientes:

  1. Generar clave en A

    Ingrese el siguiente comando en el shell de A para generar la clave pública y la clave privada de SSH

ssh-keygen

A continuación, el sistema le preguntará si desea utilizar la ruta predeterminada para generar y el principiante puede presionar "Entrar" hasta el final para completar la generación.

  1. A generará la clave pública para B

    Aún así ingrese el siguiente comando en el shell de A

ssh-copy-id [param] B_username@B_ip

Nota: el significado de algunos parámetros.

  • -i: la clave generada por la ruta no predeterminada

    por ejemplo: -i ~/.ssh/id_rsa.pub

  • -p: el puerto ssh de B no es 22

    por ejemplo: -p 3085

  1. Inicie sesión en el servidor B en A sin usar ssh
ssh B_username@B_ip

scp: copia archivos de forma segura entre diferentes servidores

Basado en la conexión SSH, se puede realizar la transmisión cifrada de archivos entre dos servidores. El siguiente comando puede realizar la transferencia de archivos del servidor A al servidor B.

scp -P B_port_num -r A_file-path B_username@B_ip:B_target_dir

Nota:

  1. parámetro scp
  • -P - el puerto del servidor de destino

    -P 3085

  • -r - carpeta de recursos

    -r ruta_directorio

  1. Si se informa el error "Permiso denegado", puede deberse a que la conexión ssh entre AB y AB no se ha establecido de antemano. Puede consultar la sección anterior para establecer una conexión SSH primero y luego scp para transferir archivos.

    Aún así ingrese el siguiente comando en el shell de A

ssh-copy-id [param] B_username@B_ip

Nota: el significado de algunos parámetros.

  • -i: la clave generada por la ruta no predeterminada

    por ejemplo: -i ~/.ssh/id_rsa.pub

  • -p: el puerto ssh de B no es 22

    por ejemplo: -p 3085

  1. Inicie sesión en el servidor B en A sin usar ssh
ssh B_username@B_ip

scp: copia archivos de forma segura entre diferentes servidores

Basado en la conexión SSH, se puede realizar la transmisión cifrada de archivos entre dos servidores. El siguiente comando puede realizar la transferencia de archivos del servidor A al servidor B.

scp -P B_port_num -r A_file-path B_username@B_ip:B_target_dir

Nota:

  1. parámetro scp
  • -P - el puerto del servidor de destino

    -P 3085

  • -r - carpeta de recursos

    -r ruta_directorio

  1. Si se informa el error "Permiso denegado", puede deberse a que la conexión ssh entre AB y AB no se ha establecido de antemano. Puede consultar la sección anterior para establecer una conexión SSH primero y luego scp para transferir archivos.

(actualizado continuamente)

Supongo que te gusta

Origin blog.csdn.net/weixin_45549370/article/details/124937854
Recomendado
Clasificación