返回

Linux Basics Introduction

Linux基础介绍。


操作系统简介

了解操作系统:操作计算机就是操作硬件(CPU,内存,硬盘等),而各类硬件只能识别机器语言。为了方便操作硬件,我们在硬件的基础上安装的各种操作系统。

操作系统的分类

  1. 桌面操作系统
    1. Windows:用户群体大
    2. macOS:适合开发人员
    3. Linux:应用软件少
  2. 服务器操作系统
    1. Linux:安全,稳定,免费,占有率高
    2. Windows Server:付费,只有率低
  3. 嵌入式操作系统
    1. Linux
  4. 移动设备操作系统
    1. iOS
    2. Android(基于Linux)

Linux的内核版和发行版

Linux的内核版本只有一个,而发行版都是基于内核版本开发的,发行版包含了各种应用软件。

常见的发行版有:Ubuntu(乌班图),Redhat,Debian,CentOS等。


Linux操作系统目录结构

【大致了解即可:】

  • /:根目录,一般根目录只存放目录,在Linux下有且只有一个根目录所有的东西都是从这里开始的
  • /home系统存放用户的家目录新增用户账号时,用户的家目录都存放在此目录下。用用户名作为目录名存放。
    • ~表示当前用户的家目录
  • /bin, /usr/bin: 可执行二进制文件的目录,如常用的命令ls,tar,mv,cat等。
    • /sbin: 存放系统管理员相关的可执行二进制文件。存放系统二进制文件
    • /usr/bin(user commands for applications)后期安装的一些软件。
    • /usr/sbin(super user commands for applications)超级用户的一些管理程序。如useradd等。
  • /boot: 放置Linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub
  • /dev: 存放linux系统下的设备文件,访问该目录下的某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt/cdrom
  • /etc: 系统配置文件存放的目录不建议在此目录下存放可执行文件,重要的配置文件如:
    • /etc/inittab
    • /etc/fstab
    • /etc/init.d
    • /etc/X11
    • /etc/sysconfig
    • /etc/xinetd.d
  • /lib, /usr/lib, /usr/local/lib: 系统使用的函数的目录,程序在执行的过程中,需要调用一些额外的参数时需要函数库的协助。
  • /lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下。
  • /mnt, /media: 光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,也可以选择任意位置进行挂载。挂载目录
  • /opt给主机额外安装软件所的存放目录
  • /proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,都是些比较重要的文件。
    • /proc/cpuinfo, /proc/interrupts, /proc/dma, /proc/ioports, /proc/net/*等。
  • /sys: 类似于/proc, 也是一个伪文件系统,提供关于系统信息的虚拟目录。
  • /root: 系统管理员root的家目录
  • /srv: 存储系统服务数据的地方。
  • /tmp: 存储临时文件的地方。
  • /usr: 存储用户可用的程序和只读的文件
  • /var: 存储系统运行时产生的可变数据。如日志文件、邮件、系统数据库等。
  • /run: 存储系统运行时产生的临时文件。如运行中的进程和服务的状态信息。

ps:系统目录了解,只需要知道常见的目录进行


Linux命令基础*

终端命令格式

不仅是在终端中运行的命令,命令格式大多数情况下都是通用的。

终端命令格式:

1
command [-options] [parameter]
  • command: 命令名,相应功能的命令名,如lsmv
  • []: 表示可选的。
  • options: 选项,对命令进行控制,可以省略。
    • 可以多开选项组合使用,只有一个减号。称之为短选项。
    • 还有长选项,两个减号。对应命令就比较长。
  • parameter:传给命令的参数,可以是零个,一个或者多个。

放大或缩小终端字体

  • 放大终端字体:ctrl-shift-=:相当于ctrl-+
    • 注意:部分终端不需要shift
  • 缩写终端字体:ctrl--

自动补全

  • 自动补全: 在敲出文件/目录/命令/的前几个字母之后,按下tab键,如果没有歧义,会自动补全,有歧义会显示歧义的内容。
  • 曾经使用过的命令:使用上下键可以自由切换在终端中使用过的命令。
  • ctrl-c: 可以退出使用。多数情况下,退出都可以使用ctrl-c

查看命令帮助信息

  • command --help: 显示命令command的帮助信息。

    • 短选项-h只有部分命令可用,一般推荐使用长选项–help
  • man command:查看命令command的使用手册(manual:使用手册):

    • 是由Linux提供的手册,包含了大部分命令,选项的详细说明

    • 常用操作键

      • 空格键:显示手册页的下一屏

      • enter:滚动手册页的下一行

      • b:回滚一屏

      • f:前滚一屏

      • q:退出

      • /word: 搜索word字符串

      • h:查看man命令帮助信息。

ps:我们要知道上面两种查看命令帮助信息的方式,对于查询结果看不懂没关系,我们只需要学习常用命令及常用选项的使用即可,学会之后可以尝试阅读。对于不知道的命令、选项可以借助网络搜索。

学习技巧

学习技巧:

  • 不需要死记硬背,对于常用命令,用得多了,自然就记住了。
  • 不要尝试一次学会所有的命令,有些命令是非常不常用的,临时遇到,临时查询就可以了。

Linux下文件和目录的特点

  • Linux文件或目录名称最长可以有256个字符。
  • .开头的文件或目录是自动隐藏的,需要使用-a参数才能显示。
  • .表示当前目录。
  • ..表示上一级目录。

计算机中文件大小的表示方式

单位英文含义
字节B(byte)在计算机中作为一个数字单元,一般为8位二进制数
K(Kibibyte)1KiB=1024B:千字节
M(Mebibyte)1MiB=1024KiB:百万字节
千兆G(Gigabyte)1GiB=1024MiB:十亿字节,千兆字节
T(Terabyte)1TiB=1024GiB:万亿字节,太字节

注意

  • 计算机中不同单位之间转换是8的倍数。如:100Mib = 12.5 MiB。也就是我们说的100兆,实际速率有12.5兆字节。
  • 相同单位之间,计算机中是1024倍,现实生活中是1000倍。
    • 为了区分,所以计算机中单位通常多个i。
    • 所以我们购买的硬盘容量在计算机中往往偏小。

ps:更多内容请网络搜索。

相对路径和绝对路径

  • 相对路径:在输入路径时,不是以/或者~开头的路径,表示相对当前目录所在的目录位置。如: ../python表示上一级目录中的python文件或目录。
  • 绝对路径:在输入路径时,最前面是以/或者~开头的路径,表示从根目录或者家目录开始的具体目录位置。如:/home/centos/python或者~/python

通配符的使用

【了解】

通配符含义
*表示任意个字符
?表示任意一个字符,只有一个
[]表示可以匹配字符组中的任意一个
[abc]匹配a,b,c中的任意一个
[a-f]匹配a到f范围内的任意一个

网卡和IP地址

  • 网卡:网卡是一个专门负责网络通讯的硬件设备。
  • IP地址是设置在网卡上的地址信息。
  • 理解:电脑就是手机,网卡就是SIM卡,IP地址就是电话号码。
  • 有了IP地址电脑才能连接到其他电脑,也就是连接互联网。
  • 一台计算机中可以会有一个物理网卡和多个虚拟网卡,在Linux中物理网卡的名字通常以ensXX表示。
  • 127.0.0.1被称之为本地回环或者回环地址,一般用来测试本机网卡是否正常
  • 网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个数据包,根据返回的数据包以及时间,我们可以确定目标主机的存在。
  • 在Linux中,想要终止一个终端程序的执行,绝大多数都可以ctrl+c

SSH基础

  • 在Linux中SSH是非常常用的工具,通过ssh客户端我们可以远程连接到运行了ssh服务器(sshd)的机器上。
    • SSH软件架构是客户端、服务端模式。客户端就是ssh,服务端是sshd。
  • ssh客户端是一种使用secure shell(ssh)协议连接到远程计算机的软件程序。登录远程服务器
  • ssh是目前可靠,专为远程登录会话和其他网络服务提供安全性的协议加密通信
  • 通过ssh协议:数据传输是加密的,可以防止信息泄露,数据传输是压缩的,可以提高传输速度
  • 利用ssh协议,可以有效防止远程管理过程中的信息泄露
  • 通过ssh协议,可以对所有传输的数据进行加密,也能防止DNS欺骗和IP欺骗
  • ssh的另一项优点是传输的数据可以是经过压缩的,所以可以加快传输的速度

SSH的安装

  • 对于不同的Linux开发板有的安装了ssh和sshd,而有的没有。没有的就需要自己安装。

    • 注意:是服务器安装服务端sshd,客户端安装ssh。连接那台服务器就需要安装sshd,用那台电脑连接就需要安装ssh客户端。
  • 查看sshd状态:service ssh status,如果提示ssh:unrecognized service,说明没有安装服务端,则需要安装sshd。

    • sshd服务端的安装:sudo apt install openssh-server
    • 可以再次输入service ssh status查看是否安装成功。
    • 打开sshd服务:service ssh start
    • 终止sshd服务:service ssh stop
    • 重启sshd服务:service ssh restart
    • 开机自启sshd服务:sudo systemctl enable ssh
  • 查看是否安装ssh:whereis ssh,如果提示ssh:,说明没有安装ssh客户端。

    • ssh客户端的安装:sudo apt install openssh-client
    • 登录远程服务器ssh username@hostname
  • 注意

    • 以上操作系统是Ubuntu、Debian。如果是Centos、RedHat,安装的ssh客户端是openssh-clients,服务端的服务名是sshd。其他的没有区别。
    • Windows上如果没有安装ssh客户端,可以打开搜索添加可选功能,安装ssh客户端。它是系统自带的,也可以安装服务端sshd。
    • macOS也自带ssh客户端。也自带服务端,不过服务端默认是关闭的,需要手动开启。在共享设置中开启。
  • 推荐文章SSH Introduction

PS:更多内容请自行网络搜索。

域名基础

域名(Domain Name)是互联网中用于标识一个网站或服务的友好名称。它提供了一种便捷的方式,让用户可以通过简单的字符序列(如www.example.com)而不是难记的IP地址来访问网站。是IP地址的别名,方便用户记忆。以下是关于域名的详细介绍:

域名的基本概念

  • 域名:是互联网上用于标识一个网站、服务器或网络资源的名字。一个域名由一串字母和数字组成,并按照层级结构排列
  • IP地址:域名的背后是一个或多个IP地址,它们用于在网络中标识具体的计算机或服务器。**域名系统(DNS)**负责将域名解析为相应的IP地址。
  • URL(统一资源定位符):URL是访问特定资源(如网页、文件等)的完整路径,它包含域名、协议(如HTTP/HTTPS)、路径等信息。例如,https://www.example.com/index.html

域名的层级结构

域名采用分层结构,从右到左依次为顶级域名(TLD)、二级域名(SLD)以及子域名等:

    • 通用顶级域名(gTLD):如 .com.net.org
    • 国家或地区顶级域名(ccTLD):如 .cn(中国)、.uk(英国)、.jp(日本)。
    • 新顶级域名(nTLD):如 .xyz.app.tech
  • 二级域名(SLD)Second-level domain:它位于TLD的左侧,通常由用户自行选择或注册。例如,在 www.example.com 中,example 就是二级域名。www是它的子域名。
  • 子域名(Subdomain):子域名是二级域名之下的扩展部分。例如,在 blog.example.com 中,blog 就是 example.com 的一个子域名。

域名的分类

【仅供参考】

按层级分类

顶级域名(Top-Level Domain, TLD):这是域名结构中最右边的部分,通常分为以下几类:

  • 通用顶级域名(Generic Top-Level Domains, gTLDs):这些域名类型不受地域限制,适用于全球范围。常见的有:
    • .com:最常用的顶级域名,适用于商业机构和个人。
    • .net:最初为网络服务提供商保留,但现已广泛使用。
    • .org:主要用于非营利组织和非政府组织。
    • .info:用于信息网站。
    • .biz:用于商业网站。
    • .name:用于个人或家庭。
    • .gov:仅限政府机构使用(通常为美国政府)。
    • .edu:仅限教育机构使用(主要为美国的教育机构)。
  • 国家或地区顶级域名(Country Code Top-Level Domains, ccTLDs):这些域名专门为各个国家或地区分配,通常由两个字母组成。例如:
    • .cn:中国
    • .uk:英国
    • .de:德国
    • .jp:日本
    • .fr:法国
    • .us:美国
  • 新通用顶级域名(New Generic Top-Level Domains, nTLDs):这些域名是近年来ICANN推出的新类别,提供更多细分的选择,如:
    • .app:应用程序相关的网站。
    • .tech:技术或科技领域的网站。
    • .store:在线商店。
    • .xyz:通用性强,适用于各种类型的网站。
    • .online:在线服务或互联网相关内容。
    • .club:适用于俱乐部或社群。
按用途分类
  • 个人域名:主要用于个人博客、个人简历等。例如,yourname.com
  • 企业域名:用于企业官网、电子商务网站等,通常使用.com.biz域名。
  • 政府域名:专用于政府机构,通常使用.gov或各国的ccTLD,例如gov.uk
  • 教育域名:用于教育机构,通常使用.edu,例如harvard.edu
  • 组织域名:适用于非营利组织、非政府组织等,通常使用.org,例如redcross.org
按地域分类
  • 国际域名:这些域名可以被全球使用,如.com.org.net
  • 地区性域名:这些域名与特定国家或地区相关,使用对应的ccTLD,如:
    • .cn:中国
    • .uk:英国
    • .ca:加拿大
    • .au:澳大利亚
按语种分类

国际化域名(Internationalized Domain Name, IDN)允许使用非ASCII字符(如中文、阿拉伯文、俄文等)注册域名。这使得非英语国家的用户可以使用自己的语言作为域名的一部分。例如,中国.com

域名可分为英文域名、中文域名、日文域名等。中文域名允许使用汉字进行注册,为使用中文的用户提供了更便捷的上网方式。

……

域名系统(DNS)

  • DNS的功能:域名系统(DNS, Domain Name System)是互联网的“电话簿”它将域名解析为相应的IP地址,帮助用户找到他们要访问的服务器。
  • DNS服务器:DNS服务器负责处理域名解析请求。通常包括根DNS服务器、顶级域名服务器、权威DNS服务器等。
    • 根DNS服务器:管理顶级域名的根节点,如.com.org的指向。
    • 顶级域名服务器:管理某个TLD下所有二级域名的解析。
    • 权威DNS服务器:提供特定域名的实际IP地址解析。

域名注册与管理

域名注册机构(Registrar):域名注册机构是授权的公司或组织,提供域名注册服务。常见的域名注册机构有GoDaddy、Namecheap、阿里云等。

域名注册步骤

  1. 选择域名:确定要注册的域名(如example.com)。
  2. 查询可用性:检查域名是否已被注册,如果没有,则可以继续注册。
  3. 选择注册商:选择一个域名注册机构进行注册。
  4. 支付费用:大多数域名注册需要按年收费,费用视TLD类型和注册年限而定。
  5. 域名解析设置:注册成功后,需要设置DNS记录,将域名指向对应的服务器IP地址。

DNS记录类型

在域名管理中,常见的DNS记录类型包括:

  • A记录:将域名指向一个IPv4地址。
  • AAAA记录:将域名指向一个IPv6地址。
  • CNAME记录:将一个域名指向另一个域名。相对于取别名。
  • MX记录:用于指定处理电子邮件的服务器(邮件交换记录)。
  • TXT记录:存储任意文本信息,常用于验证域名所有权和设置电子邮件安全机制(如SPF、DKIM等)。
  • NS记录:指定负责解析该域名的DNS服务器。

域名解析过程

当用户在浏览器中输入一个域名时,解析过程如下:

  1. 本地缓存查询:浏览器和操作系统首先检查本地是否缓存了该域名的IP地址。
  2. DNS递归查询:如果本地没有缓存,系统会向递归DNS服务器发送查询请求。
  3. 根DNS查询:递归DNS服务器向根DNS服务器查询该域名所属的TLD服务器地址。
  4. TLD服务器查询:递归DNS服务器向TLD服务器查询该域名的权威DNS服务器地址。
  5. 权威DNS查询:最终,递归DNS服务器向权威DNS服务器查询到该域名的IP地址,并返回给用户。

域名的安全性

  • 域名劫持:攻击者通过劫持DNS解析过程,将合法域名指向恶意网站。
  • 域名仿冒:攻击者注册与目标域名非常相似的域名,欺骗用户(如gooogle.com)。
  • DNSSEC:DNSSEC(Domain Name System Security Extensions)是DNS的安全扩展,它通过数字签名验证DNS数据的真实性,防止域名劫持。

域名的过期与续费

  • 域名过期:域名注册有时限,通常为1年到10年。若到期未续费,域名将被标记为“过期”,可能会被其他人注册。
    • 一旦域名过期,一定要及时处理。要不然可能会出现官网跳yellow的情况。
  • 赎回期:在域名过期后的短时间内(通常是30天到45天),域名进入赎回期,原注册者可以以较高费用赎回域名。
  • 删除期:赎回期结束后,域名进入删除期,最终会被删除并重新开放注册。

域名的法律与争议

  • 域名抢注:抢注指在他人注册商标或品牌之前,恶意注册与其相同或相似的域名,从而获利或损害对方利益。抢注行为通常会引发法律纠纷。
  • 域名争议解决政策(UDRP):这是ICANN制定的一套解决域名争议的政策,用于处理恶意注册和使用域名的纠纷。

域名的应用与趋势

  • 品牌保护:企业通常会注册多个相关域名(如品牌名、商标名等)以保护品牌。
  • 数字资产:优质域名具有很高的商业价值,短、易记或与热门关键词相关的域名常被视为数字资产,可能以高价交易。
  • 新顶级域名的兴起:随着互联网的发展,越来越多的nTLD被引入,如.tech.shop等,给企业和个人提供了更多选择。

常见的域名工具和服务

  • WHOIS查询:用于查询域名的注册信息,包括注册人、注册商、注册日期等。
  • DNS查询工具:用于检查域名的DNS记录,了解域名解析是否正确。
  • 域名生成器:帮助用户根据关键字生成可用的域名建议。
  • SSL证书:在域名上配置SSL证书可以启用HTTPS,确保网站通信的安全性。

端口基础

端口(Port)在计算机网络中是用于标识特定进程或网络服务的逻辑终端。它是IP地址的一部分,用于在传输层(通常是传输控制协议 TCP 或用户数据报协议 UDP)上区分不同的网络应用程序。以下是关于端口的详细介绍:

端口的基本概念

端口号:每个端口都有一个独特的数字标识,称为端口号。端口号的范围是0到65535,共计65536个可能的端口。

IP地址与端口:一个IP地址可以通过不同的端口号与多个应用程序通信。IP地址定位到具体的设备,端口号则用于确定设备上的具体应用程序。

端口号的分类

端口号根据用途和范围可以分为以下三类

  • 知名端口(Well-Known Ports)、公认端口保留端口:范围是0-1023。这些端口号通常被分配给系统或特定的网络服务。由于这些端口的重要性,通常不建议用户自行修改或占用这些端口。例如:
    • HTTP:80(用于网页浏览)
    • HTTPS:443(用于安全网页浏览)
    • FTP:21(用于文件传输)
    • SSH:22(用于安全远程登录)
      • ssh服务器的默认端口号是22,如果是默认端口号,在连接的时候,可以省略。
    • Telnet:23(用于不安全的远程登录)
    • SMTP:25(用于发送邮件)
    • DNS:53(用于域名解析)
    • POP3:110(用于接收邮件)
    • IMAP:143(用于管理邮件)
  • 注册端口(Registered Ports):范围是1024-49151。这些端口号通常分配给用户进程或特定的应用程序服务。这些端口较为松散地绑定于一些服务,但并非特定于某一种服务。许多服务可能会绑定在这些端口上,并且这些端口也用于许多其他目的。用户或应用程序可以根据需要自定义这些端口,但应确保不会与已有的服务或应用程序产生冲突。例如:
    • MySQL数据库:3306
    • PostgreSQL数据库:5432
  • 动态/私有端口(Dynamic/Private Ports):范围是49152-65535。这些端口号通常分配给临时或私有的客户端进程,通常在客户端与服务器通信时动态分配。理论上不应为常用服务所分配。

端口的工作原理

在网络通信中,IP地址用于标识一台主机,而端口号用于标识主机上的具体服务或应用程序。当一个应用程序在主机上运行时,它通常会监听特定的端口以等待客户端连接。

例如,当你在浏览器中输入一个URL时,浏览器将会发出一个HTTP请求。这个请求会被发送到目标服务器的IP地址和端口80(默认的HTTP端口),服务器上的应用程序(例如Apache或Nginx)监听这个端口并处理请求,然后将响应返回给浏览器。

端口的安全性建议

  • 仅开放必要的端口:减少开放的端口数量可以降低攻击面。
  • 使用防火墙:防火墙是保护端口安全的第一道防线。
  • 监控和日志记录:监控端口的使用情况并保持详细的日志记录,有助于发现潜在的安全问题。
  • 使用加密协议:如尽量使用HTTPS代替HTTP,以保护数据传输的安全性。

PS:更多内容请网络搜索。

用户和权限的基本概念

  • 用户是Linux系统工作中重要的一环,用户管理包括用户与组的管理。

  • 在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且不同账号对于不同的系统资源拥有不同的使用权限。

  • 在Linux中,可以指定每一个用户针对不同的文件或目录的不同权限。

  • 对文件/目录的权限包括:

    权限英文缩写数字代号
    readr4
    writew2
    执行excutex1

  • 为了方便用户管理,提出了组的概念。
  • 在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限。

ls -l扩展

ls -l :可以查看当前目录下文件/目录的详细信息,从左到右依次是:

示意图:示意图

用空格进行分隔:

1
2
3
4
localhost demo $ ls -lh
total 20K
-rw-r--r--. 2 root root 19K May  8 22:49 hard
lrwxrwxrwx. 1 root root  18 May  8 23:46 soft -> /root/test/abc.txt
  1. 权限

    • 第一个字母d表示目录,-表示文件,l表示软连接。
    • 接着三位数表示:当前用户权限,就是拥有者,r:可读,w:可写,x:可执行
    • 接着三位数表示:组权限,在Linux中,很多时候,会出现组名和用户名相同的情况,后续会介绍。
    • 接着三位数表示:其他用户权限。
  2. 硬链接数

    • 通俗的来讲,就是有多少种方式,可以访问到这个文件/目录

    • 访问方式:

      1. 绝对路径

      2. cd ..

      目录看有多少个子目录通过cd .. 访问。

      能通过这两种访问方式访问的硬链接数+1。

      所以通常不包含子目录的硬链接数是2。注意是不包含子目录,但可以包含文件。

      参考:Linux Common Commands#ln

    • 一般文件都是1,因为只能通过路径访问。

      • 但是可以通过创建硬链接来改变硬链接数
      • 硬链接不能对目录创建
  3. 拥有者:数字后面的字符

  4. 所属组:所属组的名称,在Linux中,很多时候,会出现组名和用户名相同的情况,后续会介绍。

  5. 文件大小

    • 可通过-h选项,以人类能读懂的方式显示。
  6. 最后修改时间

  7. 文件/目录名称

  8. 有的带箭头的是软连接。

    • 硬链接不会显示。但在有的shell中会高亮。

超级用户

  • Linux系统中root账号通常用于系统的维护和管理,对操作系统的所有资源具有所有访问权限
  • 在大多数版本的Linux中,都不推荐直接使用root账号登录系统
  • 在Linux安装的过程中,系统会自动创建一个用户账号,而这个默认的用户就称之为”标准用户“。
  • sudo
    1. su是substitute user 的缩写,中文翻译为替代用户,表示使用另一个用户的身份
    2. sudo 命令用来以其他用户执行命令预设的用户为root。就是以管理员身份运行命令。
    3. 用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码
    4. 若未经过授权的用户企图使用sudo,则会发出警告邮件给管理员

passwd文件

  • passwd文件是存放用户信息的文件,属于系统配置文件,因此存放于/etc/passwd
  • 存放形式:由6个分号组成的7个信息,分别是:
    1. 用户名
    2. 密码(x:表示加密的密码)
    3. UID(用户标识)
    4. GID(组标识)
    5. 用户全名或本地账号(如果没有指定就用用户名)
    6. 家目录
    7. 登录使用的Shell(就是登录之后,使用的终端命令窗口,大多是Linux发现版默认是/bin/bash

Linux常用基础命令*

  1. ls: 查看当前文件夹下的内容(list):

    • -a:显示当前文件夹下的所有内容,包括隐藏内容。
    • -l:显示文件、目录的详细信息。
    • -h:配合-l使用以人类读懂的方式显示文件大小。
    • 可以配合通配符查看文件或目录:
      • ls *.txt: 查看所txt文件。
  2. pwd: 查看当前所在的文件夹(print wrok directory)。

  3. cd [目录名]切换目录(change directory):

    • cd:切换到当前用户的主目录(/home/用户目录)。
    • cd ~:切换到当前用户的主目录(/home/用户目录)。
    • cd .: 切换到当前目录,保存当前目录不变。
    • cd ..:切换到上一级目录。
    • cd -:可以来回切换最近两次的工作目录。
  4. touch [文件名]新键文件(touch):

    • 如果文件不存在,新键文件。
    • 如果目标存在,可以修改文件或目录的最后访问时间和修改时间
  5. mkdir [目录名]创建目录(make derectoy):

    • -p:可以递归创建多个目录如:mkdir -p a/b/c
  6. rm [文件名]永久删除指定的文件名(remove):

    • -f: 强制删除文件,忽略文件不存在时的提示
    • -r加入这个选项可以递归删除文件夹
  7. clear: 清屏(clear):

    • 与快捷键ctrl-l等效。
  8. tree [目录名]查看文件,目录的树形图,不指定目录为当前目录

    • 通常Linux的发行版,不会自带tree命令,需要使用对应的包管理器安装tree
    • -d:只显示目录。
    • -f:显示完整路径。
    • -a:显示隐藏文件。
    • -L 2:限制目录深度。
    • -h:以人类读懂的方式显示文件大小。
    • -P "*.txt":仅显示匹配模式的文件或目录。
    • -I "*.log":排除匹配模式的文件或目录。
    • -t:按文件修改时间排序。
    • --help:查看帮助信息。
  9. cp 源文件 目标文件复制文件(copy):

    • -i:覆盖文件前提示。
    • -r: 递归复制文件夹。
  10. mv 源文件 目标文件移动文件或者目录(move)还可以重命名

    • -i: 覆盖文件前提示。
  11. cat 文件名查看文件内容,创建文件,文件合并,追加文件内容等功能(concatenate连接):

    • 当查看文件内容时,会一次性显示所有文件内容,适合查看文件内容较少的:
      • -b:对输出的非空行编号。
      • -n:对输出的所有行编号。
      • Linux中还有一个nl命令和cat -b的效果等价。
  12. more 文件名分屏显示文件内容,每次只显示一页内容,适合查看文件内容较多的(more):

    • 操作键:
      • 空格键:显示下一屏
      • enter:滚动下一行
      • b:回滚一屏
      • f:前滚一屏
      • q:退出
      • /word: 搜索word字符串
      • h:查看命令帮助信息。
  13. 其他

    • echo 文字内容:在终端中回显文字内容,通常和重定向联合使用。
    • 重定向Linux允许将命令执行结果重定向到一个文件,就是将显示到终端的内容输出或者追加到指定文件中:
      1. >: 一个大于号表示输出,会覆盖文件原有的内容。
      2. >>:两个大于号表示追加,会将内容追加到已有文件的末尾。
    • |:管道。第一个命令|第二个命令第一个命令的输出通过管道作为第二个命令的输入
      1. 常用管道命令的有:
        1. more:分屏显示内容。
        2. grep:在命令执行结果的基础上查询指定的文本。
  14. grep keyword只显示包含关键字的行。过滤作用:

    • -n:显示匹配行及行号。
    • -v:显示不包含匹配文本的所有行(相当于取反)。
    • -i:忽略大小写匹配。
    • 模式查找:就是正则表达式:
      1. ^a: 搜索以a开头的行。
      2. b$: 搜索以b结尾的行。
    • 如: 搜索本机IP地址:ip address|grep inet
  15. shutdown [选项] [时间]安全的关机/重启:不指定选项和参数表示默认一分钟之后关机,远程维护服务器最好不要关闭系统,而应该重新启动系统:

    • -r默认一分钟之后重启reboot立即重启,
    • -c: 取消之前指定的关机计划
    • -t 时间单位秒:表示多少秒只后执行计划。
    • 时间:
      1. now现在
      2. +数字:表示10分钟之后执行计划。
        • 如+10:表示十分钟之后执行计划。
      3. 具体时间:表示几点执行计划。

Linux基础进阶*

查看或配置网卡信息

【了解】很复杂😂

  • ifconfing: 查看计算机当前的网卡配置信息。目前现代大多数Linux发行版已经弃用或未安装该命令。用ip命令取代。
    1. ifconfig:查看网卡配置信息。可用用ip addr替代。addr是address的缩写,还可以直接缩写为ip a
    2. ifconfig|grep inet: 查看网卡对于的IP地址。可用ip addr|grep inet替代。
  • ping ip地址或域名检测目标主机是否连接正常,数值越大,速度越慢。
  • ping 127.0.0.1:检测本地网卡工作是否正常。

远程登录和复制文件

  • ssh客户端的简单使用

    1. 远程登录:ssh [-p port] username@hostnameusername: 是远程机器上的用户名,如果不指定的话默认为当前本地主机登录的用户。 hostname:是远程机器的地址,可以是IP/域名,或者是后面会提到的别名port:是ssh server监听的端口号,如果不指定,就为默认值22

    2. 使用exit可以退出当前用户的登录。或者快捷键ctrl-d

    3. ssh这个终端命令只能在Linux或者Unix(macOS)系统下使用。因为通常自带ssh客户端。

      如果在Windows系统中,可以安装putty或者xshell客户端软件使用即可,二者对个人均免费,建议搜索官网安装 putty: https://www.chiark.greenend.org.uk/~sgtatham/putty/

      xshell: www.xshell.com

      补充:现代的Windows版本一般也自动ssh客户端,如何没有,可以搜索添加可选功能进行安装。

    4. ssh服务器的端口号可能不是22,如果遇到这种情况就需要使用-p选项,指定正确的端口号,否则无法正常连接到服务器。

  • 远程复制文件scp,不需要登录到远程计算机:

    1. scp:就是secure copy,是ssh客户端提供的一个工具,用来进行远程拷贝文件的命令。

    2. 它的地址格式与ssh基本相同,需要注意的是,在指定端口是用的是大写的-P,而不是小写的p

      -p是包留原文件或目录的元信息,如修改时间,访问时间等。

    3. -P: 若远程ssh服务器的端口号不是22,需要使用大写字母-P选项来指定端口号。

    4. -r: 递归复制目录

    5. 将客户端文件复制到服务器:scp [-P port] 源文件 user@remote:目标地址

    6. 将服务器文件复制到客户端:scp p[-P port] user@remote:源文件 目标地址

    7. 只要安装了ssh客户端(由openssh提供),就能使用scp命令。

    8. sftp:在文件传输时,使用的FTP服务而不是ssh服务,因此端口号为21。【了解】

chmod基本使用

【重要】

chmod可以修改用户、组、其他用户对文件、目录的权限。权限决定了谁可以读取、写入或执行文件或目录。chmod 允许你通过各种方式设置文件权限,包括符号模式数字模式。下面是对 chmod 使用的详细介绍:

文件权限基础

文件或目录的权限由三部分组成:

  1. 用户(User, u):文件的所有者。
  2. 组(Group, g):与文件所有者属于同一组的用户。
  3. 其用户(Others, o):除了所有者和组外的其他用户。

每个部分都包含三种权限:

  • 读取(Read, r):可以读取文件的内容或列出目录的内容。
  • 写入(Write, w):可以修改文件的内容或在目录中创建、删除文件。
  • 执行(Execute, x):可以执行文件(如果它是一个脚本或程序),或进入目录。

默认情况下,新键的文件或目录:

  • 拥有者:文件或目录wrx
  • 主组(所属组):目录rx,文件r
  • 其他用户:目录rx,文件r

符号模式

chmod 的符号模式允许你使用符号表示权限的更改。符号模式由三个部分组成:

  • 用户类别u(用户),g(组),o(其他),a(所有)。
  • 操作符+(添加权限),-(移除权限),=(设置精确权限,用,分隔,没有权限就是等号)。
  • 权限r(读取),w(写入),x(执行)。
  • 注意:
    • +w-w只能给当前用户添加、移除可写权限。是为了安全,如果别的有w权限,有警告提示。
      • 如果要所有:a+wa-w
    • +r-r+x-x能够给所有用户添加、移除对应权限。

示例:

  • 给文件添加执行权限:chmod +x filename。这将对所有用户类别(用户、组、其他)添加执行权限。
  • 给文件的所有者添加写权限:chmod u+w filename
  • 移除其他用户的读取权限:chmod o-r filename
  • 设置文件的权限为所有者可以读写,组可以读,其他人没有权限:chmod u=wr,g=r,o= filename

数字模式

chmod 的数字模式通过使用八进制数表示权限。每种权限的八进制表示如下:

  • r(读取) = 4
  • w(写入) = 2
  • x(执行) = 1
  • 没有任何权限用0表示
  • 补充:目录需要x权限才能打开,有r权限才能读取文件内容。

每个部分(用户、组、其他)的权限值相加后,形成一个三位数的八进制数,例如:

  • 7(4 + 2 + 1)= 读、写、执行权限
  • 6(4 + 2 + 0)= 读、写权限
  • 5(4 + 0 + 1)= 读、执行权限
  • 4(4 + 0 + 0)= 只读权限
  • 没有任何权限用0表示

示例:

  • 设置文件的权限为所有者可以读写执行,组和其他用户只能读取:chmod 744 filename
  • 设置文件的权限为所有用户类别可以读写执行:chmod 777 filename
  • 设置文件的权限为所有者可以读写,组和其他用户没有任何权限:chmod 600 filename

递归更改目录权限

  • 使用 -R 选项可以递归地更改目录及其子目录中所有文件、目录的权限。如果没有只能修改指定目录权限,里面的文件或目录权限无法修改。递归修改文件、目录权限。
  • 将目录及其所有子文件和子目录的权限设置为 755chmod -R 755 directoryName

特殊权限位

【了解】

在 Linux 和 Unix 中,还有一些特殊权限位,可以用 chmod 设置:

  • SUID(Set User ID, u+s:执行文件时,以文件所有者的权限运行,而不是执行者的权限
  • SGID(Set Group ID, g+s目录下新创建的文件继承目录的组权限,而不是创建者的默认组
  • 粘滞位(Sticky Bit, o+t只允许文件的所有者或root用户删除文件,常用于公共目录(如 /tmp)。

小结

chmod 是一个功能强大的工具,可以灵活地控制文件和目录的权限。通过理解符号模式和数字模式,以及如何使用特殊权限位,你可以精确地控制谁可以访问和操作系统中的文件和目录。

组管理基础

【了解】

在 Linux 系统中,用户和组的管理是系统安全和权限控制的重要组成部分。组(Group)是用户的集合用于简化权限管理。同一个组的成员可以共享对文件和目录的访问权限。下面详细介绍与 Linux 组管理相关的知识:

组的概念

  • 组(Group):组是多个用户的集合,便于对文件和资源进行权限管理。组可以有一个或多个用户,一个用户也可以属于多个组

  • 主组(Primary Group):用户的主组是默认关联的组,每个用户在登录时默认隶属于主组。如果没有特殊指定默认主组与用户名同名

  • 附加组(Supplementary Group):用户除主组外,还可以属于其他多个附加组。

组的相关文件

  • /etc/group:这个文件包含了系统中所有组的信息,包括组名、组ID(GID)、组成员等。每一行表示一个组,格式如下:组名:密码占位符:组ID:组成员列表
    • 例如:developers:x:1001:alice,bob
  • /etc/passwd:虽然这个文件主要存储用户信息,但它也包含了用户的主组信息。在这个文件的每一行中,第 4 个字段代表用户的主组 ID(GID)。前面有介绍。

组的基本管理命令

​ 以下是管理 Linux 组的常用命令(注意:创建组、删除组的终端命令都需要通过管理员权限sudo执行):

  • 创建组

    使用 groupadd 命令可以创建一个新组:sudo groupadd groupname。GID随机。

    可以通过 -g 选项指定组的 GID(组ID已存在会报错):sudo groupadd -g 1050 groupname

  • 删除组

    使用 groupdel 命令可以删除一个组:sudo groupdel groupname

  • 修改组

    使用 groupmod 命令可以修改组的属性,比如组名或 GID。

    修改组名sudo groupmod -n newgroupname oldgroupname

    修改 GIDsudo groupmod -g 1051 groupname

  • 查看组信息

    使用 getent group 命令可以查看特定组的信息getent group groupname。多个组用空格分隔。

    ​ 这个命令也可以查看特定用户信息:getent psswd username。多个组用空格分隔。

    ​ 没有指定组或者用户名默认查询全部

    这个命令从 /etc/group 文件或组数据库中提取信息。

    查看所有组信息:cat /etc/group

  • 将用户添加到组

    使用 usermod 命令可以将用户添加到一个或多个组:

    1
    
    sudo usermod -aG groupname username
    

    其中 -aG 表示将用户追加到附加组,而不从其他组中移除。如果不加 -a 选项,用户将被移除所有其他组,且只属于指定的组。

    注意:设置了用户的附件组之后,需要重新登录才能生效

  • 查看用户的组

    使用 groups 命令可以查看某个用户所属的所有组groups username

    如果不指定用户名,则显示当前用户的所属的所有组

    使用 id 命令也可以查看用户的 UID、GID 和所属的组:id username

文件和目录的组权限管理

​ 在 Linux 中,文件和目录的权限由三部分组成:所有者权限、组权限和其他用户权限。文件或目录的组权限决定了所属组的用户可以执行哪些操作。

​ 使用 chgrp 命令可以更改文件或目录的所属组:sudo chgrp groupname filename/dictionaryName

​ 使用 -R 选项可以递归地更改目录及其内容的所属组:sudo chgrp -R groupname directoryname

设置默认组权限

​ 在某些情况下,文件或目录可能需要继承特定的组权限。使用 SGID(Set Group ID) 位可以确保目录中新创建的文件或子目录自动继承父目录的组属性:sudo chmod g+s directoryname

特殊组

​ Linux 系统中有一些特殊的组,具有系统特定的功能:

  • root:超级用户组,拥有系统的完全访问权限
  • wheel:在某些 Linux 发行版中,wheel 组的成员可以使用 sudo 提权。
  • sudosudo 组的成员可以使用 sudo 命令获得临时的超级用户权限。

组管理的实际应用场景

  • 多用户协作

    在开发环境中,不同的用户可能需要协作处理同一项目。例如,项目文件可以分配给一个开发组,组中的所有成员都可以访问和修改这些文件。通过将用户添加到项目组,并使用组权限管理文件访问,可以轻松实现多用户协作。

  • 限制访问

    使用组可以限制对特定资源的访问。例如,系统中可能存在一些敏感信息文件,只有特定的组成员可以访问。通过将文件的组权限设置为只读或只执行,可以控制哪些用户可以查看或修改这些文件。

小结

​ 在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限。Linux 组管理是系统管理中的一项重要技能。通过创建和管理组,以及配置文件和目录的组权限,可以有效地控制多用户环境中的资源访问。这种机制不仅简化了权限管理,还提高了系统的安全性和可维护性。

用户管理基础*

Linux 用户管理是系统管理的重要组成部分,涉及创建、修改、删除用户及管理用户权限和环境等操作。掌握用户管理知识对于维护系统安全和确保正确的资源访问非常关键。以下是有关 Linux 用户管理的详细介绍。

用户的概念

  • 用户(User):在 Linux 中,用户是能够登录系统并执行操作的实体。每个用户都有一个唯一的用户 ID(UID)和用户名

  • 超级用户(Superuser)root 用户是系统的超级用户,**拥有最高权限,能够执行所有系统操作。**对所有文件、目录拥有完全的访问权限。

  • 普通用户(Regular User):普通用户的权限受限,通常只能访问和修改自己拥有的文件和资源

用户相关的文件

  • /etc/passwd:该文件存储所有用户的基本信息。每个用户的信息在一行中表示,字段以冒号分隔。格式如下:

    1
    
    用户名:密码占位符:用户ID:组ID:描述:主目录:Shell
    

    例如:

    1
    
    alice:x:1001:1001:Alice:/home/alice:/bin/bash
    
  • /etc/shadow:该文件存储用户的加密密码及密码相关的安全信息。为了安全起见,只有超级用户可以访问该文件。格式如下:

    1
    
    用户名:加密密码:上次修改日期:最小天数:最大天数:警告天数:不活动天数:过期日期:保留字段
    

    如何加密密码为!!表示密码暂未设置。

  • /etc/group:该文件存储系统中的组信息,每个组的信息包括组名、组ID(GID)和组成员。【前面有介绍】

  • 以上文件都可以使用getent命令配合文件名获取特定用户的相关信息,如果没有指定用户,将获取全部。

用户的基本管理命令

注意:创建用户、删除用户、修改其他用户密码的终端命令都需要通过管理员权限sudo执行。

创建新用户

使用 useradd 命令可以创建新用户sudo useradd username。,新键用户之后,用户信息会保存在/etc/passwd文件中

常用的选项包括:

  • -m:自动创建用户的主目录。

    • -d:指定用户的主目录位置。
    • 创建用户时,如果忘记添加-m选项自动创建新用户的家目录,最简单的方法就是删除用户,重新创建。
  • -s:指定用户的默认 shell。

  • -g:指定用户的主组。默认与用户名同名。

    • 创建用户时,如果不指定所属组系统会默认创建一个和用户名同名的组名(主组)。
  • -G:指定用户的附加组。

例如,创建一个名为 bob 的用户,自动创建主目录并指定 shell 为 /bin/bash

1
sudo useradd -m -s /bin/bash bob

一般默认shell都为/bin/bash

注意

  • 默认使用useradd添加的用户是没有权限使用sudo以root身份执行命令的,可以使用以下命令,将用户添加到sudo附加组中:usermod -aG sudo 用户名
  • 如果没有sudo组,可以使用wheel组,一般在Centos、RedHat之类的主机使用wheel组。
  • 也没有wheel组,可以手动创建sudo组。
    • 创建sudo组,并将用户添加到该组中,并保证 /etc/sudoers 中有%sudo ALL=(ALL:ALL) ALL内容即可。
    • 编辑sudoers文件可以使用visudo命令。
设置用户密码
  • 使用 passwd 命令可以为用户设置或更改密码:sudo passwd username。输入新密码并确认即可。
  • 直接使用,修改当前登录用户密码。
    • 如果是普通用户,直接用passwd可以修改自己的账户密码。
  • 不需要输入旧密码😂。
  • 只有设置用户密码之后我们才能够登录或者远程连接到该用户。
  • 注意区分
    • /etc/passwd是用于保存用户信息的文件,没有可执行的权限。
    • /usr/bin/passwd是用于修改用户密码的程序,有可执行的权限,因此可以用来修改密码。
修改用户

使用 usermod 命令可以修改现有用户的属性:sudo usermod [选项] username

常用选项包括:

  • -l:修改用户名。
  • -d:更改主目录。
  • -m:在更改主目录时移动用户的文件到新主目录。
  • -s:更改用户的默认 shell。
  • -g:更改用户的主组。
  • -G:更改用户的附加组。
  • -aG:将用户添加到附加组而不移除其他组。

例如,将 bob 用户添加到 developers 组中:

1
sudo usermod -aG developers bob
删除用户

使用 userdel 命令可以删除用户:sudo userdel username。不会删除该用户的家目录。

常用选项包括:

  • -r:删除用户的主目录及其所有文件。

例如,删除 bob 用户并删除其主目录:

1
sudo userdel -r bob
查看用户信息
  • id 命令:显示用户的 UID、GID 以及所属的组:id username
    • 省略用户名为当前登录用户。
  • finger 命令:显示用户的详细信息(需安装 finger 软件包):finger username
  • 以下三个命令,如果没有指定用户名,与直接访问对应文件一样:
    • getent passwd username 命令:从 /etc/passwd 文件或用户数据库中提取用户信息。
    • getent group username 命令:从 /etc/group 文件或用户数据库中提取用户组信息。
    • getent shadow username 命令:从 /etc/shadow 文件或用户数据库中提取用户密码信息。
  • who :查看当前所有登录的用户列表,最后面表示的是IP地址,0或空表示远程主机。
  • whoami:查看当前登录用户的用户名。
更改文件所有者
  • 使用 chown 命令可以更改文件或目录的所有者:sudo chown ownername filename
  • 也可以同时更改文件的所属组:sudo chown ownername:groupname filename
  • 使用 -R 选项可以递归更改目录及其内容的所有者:sudo chown -R ownername:groupname directoryname
更改文件权限

参考chmod基本使用

用户的环境配置*

用户主目录

/home/username:每个用户都有一个主目录,用于存放用户的个人文件和配置文件。用户主目录通常位于 /home 目录下,超级用户 root 的主目录是 /root

用户配置文件

用户的环境配置文件通常位于其主目录中,包括:

  1. .bashrc:是一个非登录Bash shell 的配置文件,在每次打开新的非登录 shell 时被执行。非登录 shell 通常是在已经登录的用户下打开的新终端或使用命令如 bash 启动的新 shell。

    • 这个文件常用于设置别名环境变量函数shell 提示符(PS1)、**路径(PATH)**等。示例:

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      
      # 设置命令别名
      alias ll='ls -alF'
      alias la='ls -A'
      
      # 设置环境变量
      export PATH=$PATH:/usr/local/mybin
      
      # 自定义提示符
      PS1='[\u@\h \W]\$ '
      
      # 设置用户语言环境
      export LANG=en_US.UTF-8
      
  2. .bash_profile:是一个登录Bash shell 的配置文件,专门用于登录 shell。登录 shell 是指用户通过登录(如 SSH 登录或在控制台输入用户名和密码)进入系统时的 shell。

    • .bash_profile 通常会包含对其他配置文件的引用,例如 .bashrc

    • **意思就是登录bash shell的配置文件会引用非登录bash shell的配置文件。**示例:

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      
      # 设置环境变量
      export PATH=$PATH:/usr/local/myapp/bin
      
      # 让 .bash_profile 也加载 .bashrc 的配置
      if [ -f ~/.bashrc ]; then
          . ~/.bashrc
      fi
      
      # 启动应用程序
      myapp &
      
  3. .profile :是一个与 .bash_profile 类似的配置文件,但它是通用登录shell配置文件。它不仅适用于 Bash,还适用于其他兼容 POSIX 的 shell(如 Dash)。

    • .bash_profile 不存在时,Bash 登录 shell 会读取 .profile

    • 当然这个登录shell的配置文件也会读取非登录bash shell 的配置文件.bashrc

  4. 以上三个shell 的配置文件都可以用于设置别名环境变量函数shell 提示符(PS1)、**路径(PATH)**等。

    • 如果使用的是bash shell,一般只需要配置.bashrc即可。
    • 如果是zsh shell,一般配置.zshrc
    • 因为登录shell都会加载非登录shell的配置文件。更通用。
  5. .bash_logout:是一个在用户退出登录bash shell 时执行的配置文件

    • 这个文件通常用于清理用户环境、记录日志或执行一些退出时需要的命令。

    • 在用户注销或退出登录bash shell时执行。适用于执行一些退出时需要的操作,如删除临时文件、打印退出信息等。

    • 示例:

      1
      2
      3
      4
      5
      6
      7
      8
      
      # 清除屏幕
      clear
      
      # 删除临时文件
      rm -rf /tmp/mytempfiles
      
      # 记录用户退出时间
      echo "User logged out at $(date)" >> ~/.logout_log
      
  6. .bash_aliases 是一个通常用于存放用户定义的别名的配置文件。

    • 一般情况下,这个文件并不会自动创建,但用户可以在 .bashrc 中引用它,用来集中管理别名。也不常用

    • 主要用于组织和管理大量别名,便于在 .bashrc 中引用。

    • 通过将别名从 .bashrc 中抽离到 .bash_aliases,可以使 .bashrc 更加整洁易读。

    • 示例:

      1
      2
      3
      4
      5
      6
      7
      8
      
      # 在 .bashrc 中引用 .bash_aliases
      if [ -f ~/.bash_aliases ]; then
          . ~/.bash_aliases
      fi
      
      # 在 .bash_aliases 中定义别名
      alias ll='ls -alF'
      alias gs='git status'
      
  7. 以下两个配置文件属于全局配置文件,适用于系统上所有用户:

    • /etc/bashrc:类似于用户的 .bashrc,用于全局非登录 shell配置,对所有用户生效。

      • 注意这个文件名与使用的shell有关系,上面是bash,如何是zsh,则是zshrc
    • /etc/profile:用于设置全局环境变量和启动命令,在所有用户的登录 shell 中执行全局登录shell配置文件。

    • 注意:以上两个文件默认不会相互加载。让登录shell加载非登录shell需要额外配置:

      1
      2
      3
      
      if [ -f /etc/bashrc ]; then
          . /etc/bashrc
      fi
      
    • 全局配置示例:

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      
      # /etc/profile 示例
      export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      
      # 设置全局 umask
      umask 022
      
      # /etc/bashrc 示例
      # 禁用 Ctrl-S/Ctrl-Q 流控制
      stty -ixon
      
      # 设置全局别名
      alias ls='ls --color=auto'
      
  8. 配置文件的加载顺序:

    • 登录 shell:当用户通过登录方式进入系统(如通过 SSH、控制台登录)时,Bash 会按照以下顺序加载配置文件:
      1. /etc/profile
      2. ~/.bash_profile (如果不存在则加载 ~/.profile
      3. ~/.bashrc (通常通过 ~/.bash_profile~/.profile引用)
      4. ~/.bash_logout(退出时加载)
    • 非登录 shell:当用户在已登录的环境中启动一个新的终端或 Bash shell 时Bash 会按照以下顺序加载配置文件:
      1. /etc/bashrc
      2. ~/.bashrc
  9. 以上文件区别总结:

    • .bashrc 用于非登录 shell,每次打开新终端时执行,适合定义别名、函数和 shell 提示符等。

    • .bash_profile.profile 用于登录 shell,适合定义用户环境变量和启动命令。.bash_profile 是 Bash 专用的,而 .profile 则是通用的,适用于其他 POSIX shell。

    • .bash_logout 在退出登录 shell 时执行,适合清理环境和记录日志。

    • /etc/profile/etc/bash.bashrc 是全局配置文件,适用于系统上所有用户的登录和非登录 shell。

小结

通过合理配置这些文件,用户可以定制适合自己需求的工作环境,同时也可以确保在不同的登录方式和 shell 环境下,系统行为的一致性。

用户配额管理: ?

【了解】用户配额管理用于限制用户可以使用的磁盘空间和文件数量。

启用磁盘配额

首先需要安装配额管理工具并启用磁盘配额功能:

  1. 编辑 /etc/fstab 文件,为相应的文件系统添加 usrquota 和/或 grpquota 选项。例如:

    1
    
    /dev/sda1  /home  ext4  defaults,usrquota,grpquota  0  2
    
  2. 重新挂载文件系统

    1
    
    sudo mount -o remount /home
    
  3. 初始化配额数据库

    1
    
    sudo quotacheck -cum /home
    
  4. 启动配额服务

    1
    
    sudo quotaon /home
    
配置用户配额

使用 edquota 命令可以为用户配置配额:

1
sudo edquota username

编辑配额信息,通常包括软限制(Soft Limit)和硬限制(Hard Limit)两部分:

  • 软限制:用户达到软限制后,仍然可以继续使用磁盘,但会收到警告。
  • 硬限制:用户达到硬限制后,将无法再使用更多的磁盘空间。

特殊用户和系统用户

在 Linux 系统中,除了普通用户和超级用户外,还有一些特殊用户和系统用户。这些用户通常用于运行系统服务和守护进程,并不允许正常登录。

  • 系统用户:系统用户通常拥有较低的 UID(如 0-999),它们用于管理系统进程和服务。
  • 伪用户:一些伪用户如 nobodydaemon 用于运行没有专门账户的系统进程。

用户管理的实际应用场景

  • 多用户环境中的协作

    在企业环境中,不同用户可能需要协作完成任务。通过创建用户组并赋予特定权限,可以确保团队成员可以访问和操作相关文件,而其他人无法访问。

  • 系统安全性

    通过严格管理用户账户,分配合适的权限,并定期检查和更新密码策略,可以提高系统的安全性,防止未经授权的访问。

小结

Linux 用户管理是系统管理的核心内容之一。通过熟练掌握用户创建、修改、删除、权限管理、配额管理等操作,系统管理员可以有效控制多用户环境中的资源访问,保障系统安全性和稳定性。


Linux常用基础进阶命令

  1. which 命令可以查看执行命令所在位置。包括别名。

    • 可能出现cd命令找不到:因为cd这个终端命令是内置在系统内核中的,没有独立的文件,因此使用which无法找到cd命令的位置。
  2. whereis 命令可以参考命令所在的所有位置。不包括别名。

  3. 切换用户

    • su - username切换指定用户,并切换至家目录,说明:-可以切换到用户的家目录,否则保持位置不变

    • exit:退出当前登录用户,如果没有退出shell,突出shell可以使用快捷键ctrl-d

    • su 不指定用户名,可以切换到root用户,但是不推荐使用,因为不安全 。

  4. stat [选项] 文件名查看文件或目录详细信息

    • 包括文件的大小、权限、所有者、修改时间等。最重要的是能够查看文件或目录的访问时间(atime)、修改时间(mtime)、更改时间(ctime)。

    • 运行 stat 命令后,输出信息可能包括以下内容:

      • File: 文件名称。

      • Size: 文件大小(以字节为单位)。

      • Blocks: 文件占用的块数。

      • IO Block: 每次文件 I/O 操作的块大小。

      • File type: 文件类型(如普通文件、目录、符号链接等)。

      • Device: 文件所在的设备号。

      • Inode: 文件的 inode 号。

      • Links: 文件的硬链接数。

      • Access: 文件的权限(包括八进制表示)。

      • Uid: 文件所有者的用户 ID 及用户名。

      • Gid: 文件所属组的组 ID 及组名。

      • Access: 文件的最后访问时间。

      • Modify: 文件的最后修改时间。

      • Change: 文件的 inode 信息最后改变的时间。

      • Birth: 文件的创建时间(注意:并非所有文件系统都支持这个信息)。

    • 常用选项

      • -L:当文件是一个符号链接时,显示链接所指向的目标文件的信息,而不是符号链接本身的信息。

      • -f:显示文件系统的信息,而不是单个文件的信息。

        显示文件系统的信息:stat -f /。这会显示根文件系统的信息,包括块大小、空闲块数等。

      • -c:自定义输出格式,通过格式化字符串显示特定的信息。

        • 使用 -c--format 选项可以自定义输出格式。常用的格式化占位符包括:

          • %n:文件名。
          • %s:文件大小。
          • %f:十六进制的文件模式。
          • %F:文件类型。
          • %h:硬链接数。
          • %u:所有者的用户 ID。
          • %U:所有者的用户名。
          • %g:组 ID。
          • %G:组名。
          • %x:最后访问时间。
          • %y:最后修改时间。
          • %z:最后改变时间。

          stat -c '%n %s %y' example.txt:输出文件名、文件大小和最后修改时间,使用自定义格式。

      • -t:以简洁格式输出信息,信息以单行显示。

      • touch 文件或目录:可以修改文件或目录的最后修改时间或最后访问时间。

        • 使用-t 时间选项可以指定时间:touch -t 202408201435.22 filename:这将时间戳设定为 2024-08-20 14:35:22
        • 时间表示:use [[CC]YY]MMDDhhmm[.ss] instead of current time。
  5. 系统相关简单命令:

    本节内容主要是为了方便通过远程终端维护服务器时,查看服务器上当前系统日期和时间磁盘空间占用情况程序执行情况。这些终端命令基本上都是查询命令,通过这些命令对系统资源的使用情况有个了解。开始:

    1. 日期和时间

      Linux 系统中的日期和时间管理是非常重要的,涉及到系统日志、计划任务、文件时间戳等多个方面。下面将详细介绍 Linux 中与日期和时间相关的主要知识点:

      在 Linux 中,时间分为系统时间(system time又叫Local time)和硬件时间(hardware time又叫RTC time:Real Time Clock、BIOS时间)。系统时间是操作系统维护的当前时间,而硬件时间由计算机的硬件时钟维护。

      注意系统关机或重启之后,系统时间会被硬件时间覆盖

      • 查看和设置系统时间

        • date显示当前时间和日期

          使用 + 后跟格式字符串,可以以自定义格式显示日期和时间date +"%Y-%m-%d %H:%M:%S"。这个格式可以改写成:**date +"%F %T"**格式都为为:2024-08-20 21:54:42

          %F:格式化为完整的日期,格式为 YYYY-MM-DD

          %T:格式化为完整的时间,格式为 HH:MM:SS

          %x:日期表示 (如 08/20/2024)

          %X:时间表示 (如 08:55:12)

          **date +“%x %X”**格式为:08/20/2024 09:49:47 PM

          常见的格式化参数:%Y:年%m:月%d:日%H:时%M:分%S:秒

        • 设置系统时间: 需要使用管理员权限来设置时间。例如,设置为 2024-08-20 14:35:22

          1
          
          sudo date -s "2024-08-20 14:35:22"
          

          注意不推荐使用该命令修改系统时间,后面会介绍。

      • 查看和设置硬件时间

        • 显示硬件时间hwclock

          输出类似于:Tue 20 Aug 2024 10:46:51 PM CST -0.821040 seconds

        • 将系统时间写入硬件时间sudo hwclock --systohc

          短选项是-w

        • 将硬件时间写入系统时间:sudo hwclock --hctosys

          短选项是-s

      • 时区管理

        时区决定了系统显示的时间与 UTC 时间的差值。

        实际上Linux时间还有一个时间,叫做UTC时间(Universal Time Coordinated协调世界时间):

        系统时间=UTC时间+时区的偏移量

        • 查看当前时区:使用 date 命令查看时区:date +'%Z %z'。输出类似于:CST +0800

          %Z:时区名称 (如 UTC, CST)

          %z:时区偏移 (如 +0800)

          命令timedatectldatehwclock的输出也会包括当前时区的信息。

        • 补充timedatectl

          timedatectl 是一个在 Linux 系统上用于管理时间和日期的命令行工具

          查看当前时间和日期

          • 命令:timedatectl
          • 输出信息包括系统当前的本地时间(系统时间)、UTC 时间RTC时间、时区、系统时钟是否同步,以及是否启用了 NTP。

          设置系统时间和日期

          • 命令:timedatectl set-time <时间>
          • 示例:timedatectl set-time "2024-08-20 12:34:56"
          • 可以手动设置系统的时间和日期。
          • 手动设置日期时间,推荐使用这种方式。使用date -s不会将UTC时间与RTC时间同步,会造成关机或重启之后,时间修改失效的问题:因为该命令只修改了UTC时间,重启之后,RTC时间会覆盖UTC时间,造成系统时间未成功修改。解决该问题:使用该命名之后,还需要将系统时间写入硬件时间hwclock -w所以推荐使用timedatectl set-time <时间>手动修改时间,它会同步UTC时间与RTC时间。
        • 设置时区:设置时区通常需要管理员权限。

          • 命令:timedatectl set-timezone <时区名称>

          • 示例:timedatectl set-timezone Asia/Shanghai

            可以将系统时区设置为指定的时区名称。

          • 查看可用的时区

            • 命令:timedatectl list-timezones
            • 列出所有可用的时区,可以通过管道符 | 配合 grep 命令筛选特定时区。
          • 手动设置时区: 可以通过创建或链接 /etc/localtime 文件到特定时区文件来设置时区:

            1
            
            sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
            
      • 时间同步:时间同步确保系统UTC时间与全球标准UTC时间保持一致。同步硬件时间:hwclock -w.

        1. ntp 服务

          ntp(Network Time Protocol)用于同步网络上的时间。一般需要安装。

        2. 安装 ntp

          1
          2
          
          sudo apt install ntp   # Ubuntu/Debian
          sudo yum install ntp        # CentOS/Fedora
          
        3. 启动ntp服务

          1
          2
          3
          
          sudo systemctl start ntpd # 启动
          sudo systemctl enable ntpd # 开机自启
          service ntpd status # 查看ntp服务状态
          

          启用或禁用 NTP 同步

          • 启用 NTP 同步:timedatectl set-ntp true
          • 禁用 NTP 同步:timedatectl set-ntp false
          • NTP 同步用于自动从时间服务器获取时间。

          完成以上操作之后,就会自动同步网络时间。

          启动 ntpd 服务后,时间同步会自动进行,但初始同步可能需要一些时间,并且ntpd会采取渐进方式调整时钟。为了确保系统时间尽快同步,可以手动强制同步一次。

          强制立即同步时间:sudo ntpd -gq

          • -g 选项允许在第一次同步时忽略时间偏差的大小。
          • -q 选项使 ntpd 在同步完成后立即退出,而不继续作为守护进程运行。
        4. 检查同步状态:ntpq -p。会显示与哪些 NTP 服务器同步及其状态。 * 号表示正在使用的服务器。

  1. cal:calendar查看日历,-y选项可以查看一年的日历
  1. 磁盘信息

    1. df -h :disk free显示磁盘剩余空间
    2. du -h [目录名]:disk usage显示目录下的文件大小,省略目录名为当前目录
    3. -h 选项以人性化的方式显示文件大小
  2. 进程信息

    1. 所谓进程,通俗地说就是当前正在执行的一个程序
      1. top:动态显示运行中的进程并且排序,要退出键盘输入q
      2. ps aux:process status查看进程的详细状况
        1. ps默认只会显示当前用户通过终端启动的应用程序,另外这个命令的选项没有减号-
        2. a:显示终端上的所有进程,包括其他用户的进程
        3. u:显示进程的详细状态
        4. x:显示没有控制终端的进程
        5. 注意:使用kill命令时,最好只终止当前用户开启的进程,而不要终止root身份开启的进程,否则可能导致系统崩溃
      3. kill [-9] 进程代号PID:终止指定代号的进程,-9选项表示强行终止
  3. 其他命令

    1. 查找文件
      1. find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件
      2. find [路径] -name “*.py”:查找指定路径下扩展名是.py的文件,包括子目录
      3. 如果省略路径,表示在当前目录下查找
      4. 之前学习的通配符,在使用find命令时同时可用
      5. 有关find的高级使用,后面慢慢了解,匹配选项有多种模式,-name以名字搜索,后面会介绍更多
      6. 搜索包含1的文件或目录:find -name “1
      7. 搜索以.txt为扩展名的文件:find -name “*.txt”
      8. 搜索以1开头的文件或目录:find -name “1*”
    2. 软连接
      1. ln -s 被链接的源文件 链接文件:建立文件的软链接,用通俗的方式讲类似于windows下的快捷方式
      2. 没有-s选项建立的是一个硬链接文件
      3. 两个文件占用相同大小的磁盘空间,工作中几乎不会建立文件的硬链接
      4. 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用
    3. 硬链接(知道)
      1. 在使用ln创建链接时,如果没有-s选项,会创建一个硬链接,而不是软链接
      2. 软链接的过程:软链接文件名》软链接文件数据》文件名》文件数据
      3. 硬链接的过程:文件名》文件数据,硬链接》文件数据
      4. 在Linux中,文件名和文件的数据是分开存储的
      5. 在Linux中,只有文件的硬链接数==0才会被删除
      6. 使用ls -l可以查看一个文件的硬链接的数量
      7. 在日常工作中,几乎不会建立文件的硬链接,知道即可
    4. 打包压缩
      1. 打包压缩是日常工作中备份文件的一种方式
      2. 在不同的操作系统中,常用的打包压缩方式是不同的
        1. Windows常用rar
        2. Mac常用zip
        3. Linux常用tar.gz
      3. 打包/解包
        1. tar是Linux中常用的备份工具,此命令可以把一系列文件打包到一个大文件中,也可以把一个打包的大文件恢复成一系列文件
        2. tar的命令格式如下:
          1. 打包文件:tar -cvf 打包的文件名.tar 被打包的文件/路径多个用空格隔开 不负责压缩
          2. 解包文件:tar -xvf 打包的文件名.tar
          3. -c:生成档案文件,创建打包文件
          4. -x:解开档案文件
          5. -v:列出归档的详细过程,显示进度
          6. -f:指定档案文件的名称,f后面一定是.tar文件,所以必须放选项最后
          7. f选项必须放在最后,其他选项顺序可以随意
      4. 压缩/解压缩
        1. tar与gzip命令结合可以实现文件的打包和压缩
        2. tar只负责打包文件,但不压缩
        3. 用gzip压缩tar打包后的文件,其扩展名一般用xxx.tar.gz
        4. 在Linux中,最常见的压缩文件格式就是xxx.tar.gz
        5. 在tar命令中有一个选项-z可以调用gzip,从而可以方便的实现压缩和解压缩的功能
        6. 压缩文件:tar -zcvf 打包的文件名.tar.gz 被压缩的文件/路径…
        7. 解压缩文件:tar -zxvf 打包的文件名.tar.gz
        8. 解压缩到指定路径:tar -zxvf 打包的文件名.tar.gz -C 目标路径
        9. -C:解压缩到指定目录,注意:要解压缩的目录必须存在
        10. 另外一种Linux中常见的压缩格式bzip2(two)
          1. tar与bzip2命令结合可以实现文件的打包和压缩(用法和gzip一样)
          2. tar只负责打包文件,但不压缩
          3. 用bzip2压缩tar打包后的文件,其扩展名一般用xxx.tar.bz2
          4. 在tar命令中有一个选项-j可以调用bzip2,从而可以方便的实现压缩和解压缩的功能
          5. 压缩文件:tar -jcvf 打包的文件名.tar.bz2 被压缩的文件/路径…
          6. 解压缩文件:tar -jxvf 打包的文件名.tar.bz2
          7. -C:同样适用
  4. 软件安装

    1. 通过apt安装/卸载/更新软件
    2. apt是advanced packaging tool,是Linux下的一款安装包管理工具
    3. 可以在终端中方便的安装/卸载/更新软件
    4. 安装软件:sudo apt install 安装的软件名软件包 安装命令其实不需要记,如果软件没有安装,终端会提示你安装
    5. 卸载软件:sudo apt remove 软件名
    6. 更新已安装的包:sudo apt upgrade,这种升级,如果软件包有相依性的问题,此软件包就不会被升级
    7. 更新已安装的包:sudo apt dist-upgrade,如果软件包有相依性的问题,会移除旧版,直接安装新版本
    8. 所以通常dist-upgrade会被认为是有点风险的升级
    9. 检查更新:apt update:注意:我们每次在执行更新操作之前都应该检查更新,在执行upgrade,如果没有执行update就没有获取到更新包的信息,那么upgrade就无效了
    10. apt可以看作apt-get和apt-cache命令的子集,apt和apt-get功能一样,都是安装软件包,没有区别,但apt更方便使用
    11. 如:sudo apt install sl:一个小火车提示
    12. 一个比较漂亮的查看当前进程排名的软件:sudo apt install htop
  5. 配置软件源

    1. 如果希望在Linux中安装软件,更加快速,可以通过设置镜像源,选择一个访问网速更快的服务器,来提供软件的下载/安装服务
    2. 提示:更换服务器之后,需要一个相对比较长时间的更新过程,需要耐心等待,更新完成后,在安装软件都会从新设置的服务器下载软件
    3. 所谓镜像源,就是所有服务器的内容都是相同的(镜像),但是根据所在位置不同,国内服务器通常速度会更快一些,因为Linux的服务器默认是国外
    4. 步骤
      1. 备份原先镜像源:sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
      2. 输入sudo vim /etc/apt/sources.list命令进入源地址文件
      3. 按“i”进入插入模式
      4. 将原来的下载源注释调,在前面加一个#号
      5. 复制镜像源(其中一个)
        1. #aliyun 阿里云: deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
        2. #ustc 中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
        3. #tsinghua 清华 deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free deb-src http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
        4. #浙大源 deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
      6. Esc退出插入模式
      7. 输入“:wq”保存退出
      8. 复制:在kali终端下,使用鼠标选中内容,就可以完成复制
      9. 粘贴:移动光标到需要粘贴的位置,按下鼠标中间的滚轮,就可以粘贴
      10. deb代表软件的位置
      11. deb-src代表软件的源代码的位置
  6. 您可以使用以下命令来查询 Linux 发行版:

    • lsb_release -a:该命令适用于所有 Linux 系统,会显示出完整的版本信息,包括 Linux 系统的名称,如 Debian、Ubuntu、CentOS 等,和对应的版本号,以及该版本的代号。
    • uname -a:该命令可以查看当前操作系统的内核信息。
    • cat /proc/version:该命令可以查看当前操作系统的版本信息。
    • cat /etc/*-release:该命令可以查看当前操作系统的发行版信息。