linux学习-linux系统及编程基础笔记(代码片段)

吹灭读书灯一身都是月 吹灭读书灯一身都是月     2023-02-14     325

关键词:

useradd zhangsan

passwd zhangsan

visudo往/etc/sudoers文件中添加zhangsan

#visudo 找到如下的行 root ALL=(ALL) ALL

往该行下面添加zhangsan zhangsan ALL=(ALL) ALL

2.2 Linux的基本结构

一些根文件系统中较为重要的二级目录:

①/boot: 存放系统引导时所需的文件,包括Linux内核以及引导装载程序(boot loader)等。

②/bin(binary): 存放可执行程序。

③/dev(device): 存放设备文件和特殊文件。

④/etc: 存放系统配置文件。

⑤/home: 普通用户的主目录所在位置。

⑥/lib: 存放基本共享库文件和内核模块。

⑦/mnt(mount): 用于为需要挂载的文件系统提供挂载点。

⑧/proc(process): 存放与内核和进程有关的信息。

⑨/root: 根用户的主目录

⑩/tmp(temporary): 存放临时性文件

⑪/usr(user): 存放可共享的只读数据文件

⑫/var(variable): 存放各类数据文件

2.2.3 基本shell命令

1、文件管理命令

  1. ls(list)命令

    列出目录的内容,包括文件和子目录的名称

    • -a:列出所有文件,包括“.”开头的隐含文件

    • -d:将目录按照文件显示

    • -F:加上文件类型指示符号,其中 * 表示可执行普通文件,“/”表示目录,“@”表示符号链接,“|”管道,“=”套接字

    • -R:用于递归列出子目录中的内容(大写)

    • -l:以列表形式列出详细信息

  2. pwd(print working directory)命令

    显示当前工作目录

  3. cd (change directory)命令

  4. stat命令

    获取某个文件的基本信息

  5. touch命令(示例2.6)

    更新一个文件的访问和修改时间,如果没有对应文件则新建该文件

  6. mkdir(make directories)命令

    • -m对目录设置存取权限
    • -p:若所建目录的上层目录不存在,则一并建立
    mkdir -p ./parentdest/test # 如果parentdest没有,一并建立
    
  7. mv(move)命令(示例2.7)

    移动文件或目录;更改文件或目录的名称

    • -i 或 --interactive:覆盖前确认
    • -f:若目标文件或目录已存在,直接覆盖
    • -n:不覆盖已存在的文件
    • -u:在移动或者更改文件名时,若目标文件已存在,且文件日期比源文件新,则不覆盖目标文件
    mv memo.1 memo.new # 将memo.1改名为memo.new
    mv memo.1 memo.2 /home # 将两个文件移动到/home目录下
    mv /home/test /home/dest # 将/home/test移动到/home/dest目录下
    
  8. cp (copy)命令(示例2.8)

    cp [选项] 源文件和目录 目标文件/目录

    • -f:强制赋值文件或目录

    • -i:覆盖目标文件前需要确认

    • -n:不覆盖已经存在的目标文件

    • -p:复制文件时也复制文件的属性如 读取权限

    • -r:递归复制目录

    • -b (backup):若存在同名文件,复制前先备份原来文件

    cp file /home # 将file复制到目录里
    cp -r /home/test /home/dest #将/home/test 复制到 /home/dest目录下 
    
  9. rm(remove)命令(示例2.9)

    • -f:强制删除
    • -r:递归删除(目录必须加)
  10. rmdir命令(示例2.10)

    从1个目录中删除一个或多个目录。删除目录时,必须对该目录的父目录具有读写权限,目录被删除之前应该是空目录。

    • -p:如果删除指定目录之后,若其上层目录变成空目录,则一并删除
  11. tar建立还原备份文件的工具程序。(打包)

    • -c create 创建新的备份文件
    • f 备份文件
    • -t --list列出 备份文件的内容
    • -v --verbose 显示指令执行的过程
    • -x --extract或--get从备份文件中还原文件
    # 将当前目录的文件m.1、m.2、m.3备份到memo.jar中
    jar -cvf memo.jar m.1 m.2 m.3 
    # 将上面几个文件还原
    tar -xvf memo.jar
    

2、文件内容查看命令

  1. cat(concatenate)命令

    把多个文件连接后输出到标准输出(屏幕)或者加“ > 文件名”输出到另一个文件

    常用选项:

    • -b:从1开始对所有非空输出行 进行编号
    • -n:从1开始对所有输出行 进行编号
    • -s:将连续两行以上的空白行 合并成一个空白行
    cat file1 file2  #同时显示两个文件的内容
    cat file1 fil2 > file3 #将1、2合并输出到file3 
    cat > file # 从键盘输入信息到file中
    
  2. more命令

    显示文本文件的内容,一次显示一屏满屏之后停下来,可按如下键继续:

    • 空格:显示下一屏
    • Enter:显示下一行
    • d或者Ctrl + D:向下显示文本半屏,默认为11行
    • b或者Ctrl+B:显示文本上一屏
    • q、Q:退出more命令

    常用选项:

    • -num:表示一行显示多少行
    • -d:在底部 显示 提示信息
    • +num:从num行开始
    • +/pattern:在文件中查找该字符串,从该字符串后开始
    more +55 file #从55行之后开始显示
    more -5 +/China file # 从China之后开始
    
  3. tail命令

    查看一个文件的末尾若干行,默认10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。

    • -n:显示多少行
    • -c:显示多少个字节
    tail -n5 file #显示5行
    tail -c10 file #显示10字节
    
  4. wc(word count)命令(示例2.12)

    统计给定文件的 字节数、字数、行数。

    • -c或–bytes:统计字节数
    • -m或–chars:字符数
    • -l或 --lines:行数
    • -w或 --words:字数
    wc -cwl file #显示行数、字数、字节数
    
  5. find命令

    用于查找符合条件的文件和目录。

  6. grep命令

    文本搜索工具,在文本文件中查找指定模式的词或短语,并把匹配的行打印出来。

    • -b:在显示符合匹配字符串行前,标识该行的第一个字符的位编号
    • -c:计算符合匹配字符串的行数
    • -i:忽略大小写的查找
    • -n:在显示包含匹配字符串的行前,标识该行的行号
    grep apple fruit # 在fruit中查找包含applr的行
    grep t$ fruit # 显示fruit中以t结尾的行
    

3、系统管理命令

  1. date命令:查看修改最近时间

  2. who命令:列出当前登录用户

  3. shutdown命令:关闭-h重启-r

4、辅助命令

  1. clear命令

  2. echo命令:在终端上显示一行文本内容

  3. man(manual)命令:显示命令的说明手册(例如:cat --help可以快速查阅帮助)

  4. history命令:查看shell命令的历史记录

  5. alias命令:显示系统中所有命名别名

2.2.4 Vim编辑器

基本用法:

  1. 命令模式

    输入vi [文件路径],如果文件不存在则会创建。

    • i:从当前位置插入
    • a:从当前位置的下一个位置插入
    • /字符串:输入搜索的在字符串,定位在第一个匹配搜索字符串的地方
    • n:定位到下一个匹配搜素 字符串的地方
  2. 编辑模式

  3. 末行模式 输入“:”

    • :w 写入到指定路径下的文件
    • :wq 写入到启动vim时指定的文件并退出vim编辑器
    • :q 退出vim
    • :q! 不保存直接退出

vim编辑命令

移动光标

按字移动光标

  • w/W:讲光标右移到下一个字(w是指小写字,W是大写字(字包括空格之间的内容))
  • b/B:左移

按句子和段落移动光标【左括号向左移、右括号向右移】

  • “()” 光标按句移动。“句”指的是以句号、问号、叹号结尾
  • ""将光标按段落移动。

按行移动

  • 0:移动到当前行 行首
  • $:移动到行尾
  • G:将光标移动到最末尾行首。或者[行号]G,例如 5G移动到 第5行

屏幕内移动

  • H:屏幕第一行 最左端
  • M:中间
  • L:底部一行
文本插入
  • i/I:在光标位置前/行首插入
  • a/A:在光标位置 之后/行尾 追加文本
  • o/O:在当前行 的上面 /下面 打开一行
文本删除

命令模式下:

  • x/X:删除当前/光标左边 字符

  • dd:删除当前行

文本赋值与粘贴
  • yw:将光标所在位置 到字尾 的字符 复制到 缓冲区
  • yy:将一行复制到缓冲区
  • p:将缓冲区的字符粘贴到光标所在位置
文本查找与替换
  1. 查找
    • /text再按回车:向下搜索text出现位置
    • ?text:向上搜索
  2. 替换

3、shell命令进阶

3.1.1 通配符

  1. *表示任意长度的任何字符

    ls /etc/*.conf
    
  2. ?表示任意一个字符

  3. [] - !指定一个符号的取值范围,可以用!取反

    # 列出以a或b或c开头的配置文件
    ls /etc/[abc]*.conf
    ls /etc/[a-c]*.conf
    ls /etc/[!d-z]*.conf
    

3.1.2 特殊符号

  1. 分号;隔开多条命令并使他们能够连续执行

  2. &:指定当前命令在后台执行(用户可以继续输入下一个命令)

    #后台执行,执行完在前台提示
    cp file /tmp/filetmp &
    
  3. 转义符号\\ (原本通用符号和特殊符号被解释为某种含义和功能,要表示为本身的话要用转义字符)

3.2 正则表达式

使用gerp举例

grep [选项] '模式字符串 ’ 文件列表

  • -n 输出行号
  • -i:忽略大小写
  • -v:反转匹配(过滤掉不符合的)

3.3 输入输出重定向

1、输出重定向

输出重定向

  • 格式:命令以及选项和参数 > 重定向文件

附加输出重定向

  • 命令以及选项和参数 >> 重定向文件
date > record # 将当前日期信息重定向输出到文件record中

2、 输入重定向

格式:命令以及选项参数 < 重定向文件 (手动输入ctrl+D结束)

附加输入重定向:(利用他可以在输入结尾附加一个标识标识结束输入)

  • 命令以及选项参数 << 结束输入标识
# cat获取file内容,重定向输出到file2
cat < file > file2
# 当输入stop,cat随机停止执行
cat << stop > file
# 多个输入文件合并
cat file1 file2 > file3文件

3、错误输出重定向

格式:命令及其选项参数 2> 重定向文件(如果是附加为 2>>

#lsls不存在
lsls 2 >> err

3.4 管道

管道可以把一系列命令连接起来,即:第一个命令的输出hi通过管道传给第二个命令作为他的输入…

格式:命令1 | 命令2

# 由于/etc 目录里的文件和子目录很多,可以用管道将列表结果传给more显示分页
ls /etc | more

引号:

  • 单引号'':由单引号括起来的都作为普通字符
  • 双引号""$ \\ ' '这四个字符是特殊字符

实训①

# 1. 利用ls命令查找/root下以a, b, c, d开头的文件。
sudo ls /root | grep "^[a|b|c|d]"
# 2. 获得系统当前时间并将结果保存在文件file中。
date > file 
# 3. 列表显示/tmp目录下的所有文件信息,并将结果保存在文件allfile中。
ls -l /tmp > allfile
# 4. 启动vi编辑器,新建文本file,写入信息“this is a test”后保存退出。利用附加输出重定向在文本file末尾增加重复写入信息“this is a test”。
cat  >  file  <<  "end"
echo “this is a test” >> file 
# 5. 利用cat命令以及重定向功能向文件file输入信息“this is a test”。
cat > file  << "end"
this is a test 
end
# 6. 利用cat命令将文件/etc/fstab及文件/etc/inittab合并为/root/mergefile。
cat /etc/fstab /etc/inittab >  /root/mergefile
# 7. 利用ls命令递归显示/etc目录下的所有文件信息,要求分屏显示。
ls -la /etc/ | more
#8. 利用管道功能和who命令获取所有关于root用户的在线登录信息。
who -H | grep root
#9 利用history读取命令的历史记录,将所有包含rm命令的历史记录过滤出来。如果没有相关历史就应先自行练习rm命令,注意需要与一些其他命令如rmdir等相区分。过滤结果保存在rmrecord文件中,要求在文件的末尾附上过滤的时间和日期。
history | grep "rm" > rmrecord.`date "+%Y%m%d-%H%M%S"` 

# 10. 根据综合实训案例3.3,实现对系统登录用户信息的过滤,过滤条件可以是IP地址或登录时间等。

ip过滤

who -H -T | grep

时间过滤

who -H -T | grep "2022-04-07"

按终端属性过滤

who -H -T | grep

4、用户管理

  • /etc/passwd:是存账号信息

    格式:用户名:密码:用户id:组群id:用户全名 : 用户主目录 : 使用的shell

  • /etc/shadow:用户密码加密后存储的位置,仅root可以访问

用户组群管理:

  • /etc/group:用户组群的基本信息

    组群名称 :组群密码:组群id:组群用户列表

  • /etc/gshadow:存储用户组群汇总与安全有关的基本信息(/etc/passwd的影子文件,存用户的加密口令)

4.1 主要管理命令

把 /etc/passwd 和 /etc/shadow理解为两张数据表,表里每一行对应的是一个用户账号。那么所有的都是增删改查。

  1. useradd:添加一个用户账号(需要有根用户权限)

    • -g:已存在一个组,新增用户要加入的主要组
    • -G:已存在一个组,新增用户要加入的附件组
    • -d:指定用户主目录
    useradd -g student #指定用户属于student组
    

    举例

  2. passwd命令:设置密码(只有root用户可以)

    passwd [选项] [用户]

    举例:

    ​ 设置的密码会直接显示在屏幕,这种方法主要用于设置默认密码

  3. chage命令:查看或设置用户账号的有效期

    chage [选项] [用户名]

    重要选项:

    举例:

  4. usermod命令:修改用户的账号设置、用户属性。例如用户ID、用户组、用户主目录、Shell、账户过期日期

    • -d:修改用户主目录

    • -e expire用户过期日期

    • -g:用户组名

    • -G:组列表

      usermod -G groupname user #将用户user添加到新建组群中
      
    • -s:用户登录Shell

    • -u uid

    usermod [选项] [用户名]

  5. id命令

    查看用户账号的UID、GID以及所属组群等信息

  6. userdel命令:删除用户账号

    userdel [选项] [用户名]

    • -r:不仅删除用户,还要删除用户的用户主目录(如果还要删除用户所有信息和文件,可以用“find / -user username -ls”)

4.2 组群管理命令

  1. groupadd命令:增加一个用户组群

    • groupadd [-g gid] groupname

    -g:该选项后面需给出数字参数,用于指定新建组群的GID。

  2. groupmod命令 (修改指定组的信息)

    -g:该选项后面需给出数子参数,用于指定组群的GID。
    -n( name):该选项后面需给出名子参数,用于设置组群的新名称。

  3. groups命令 :查看用户所属的所有组群

  4. groupdel命令:删除组群

4.3 用户账号切换

可以用su命令切换为根用户,操作完之后使用exit命令重新切换回原用户,或者普通用户切换要密码

由于执行su命令还需要输人用户密码,当普通用户需要利用su命令切换为根用户并执行管理操作时,还需要提供根用户密码才能进行操作。然而这样显然并不利于根用户密码的保护和管理。更为稳妥的方法是让普通用户直接使用sudo命令执行某个管理操作,此时只需输入普通用户的密码即可。不过作为安全保护机制,普通用户在使用sudo命令之前

必须由根用户通过visudo命令编辑"/cc/sudoersH相关命令的使用方法。"执行权限.否则普通用户是不能使用sudo

  1. su(substitute user)命令:切换用户
  2. visudo:调用vi编辑/etc/sudoers文件
  3. sudo:以root用户执行命令操作

100 道 Linux 笔试题笔记(四)31-40_暮雨橙海的博客-CSDN博客_使用ln命令可生成一个名为old

  • chown:改变文件或目录访问权限(所有者)

    • chown [选项] [用户][:[组]] 文件
  • chgrp:改变文件所属的用户组(组ID、组名)

    • chgrp [选项] 所属组 文件或目录
  • crontab

  • tr用于转换删除字符

    • tr a-z A-Z
  • swap为交换分区,也就是虚拟内存

    • free以显示当前系统未使用的和已使用的内存数目
  • crond系统每分钟会处理一次计划任务

  • 扩展:Linux下各种查找命令(find, grep, which, whereis, locate)
    https://blog.csdn.net/wzzfeitian/article/details/40985549

  • netstat

  • 显示Linux系统用户数:wc --lines /etc/passwd

  • **/etc/mtab文件的作用:**记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等;而/etc/fstab是系统准备装载的
    **etc/fstab文件的作用 :文件系统挂载表,用于管理文件系统信息。开机的时候设备与入口对应关系 开机自动挂载列表。**记录了计算机上硬盘分区的相关信息,启动 Linux 的时候,检查分区的 fsck 命令,和挂载分区的 mount 命令,都需要 fstab 中的信息,来正确的检查和挂载硬盘。

  • (1)软连接可以跨文件系统,硬连接不可以
    (2)硬连接不管有多少个,都指向的是同一个I节点,会把结点连接数增加,只要结点的连接数不是O,文件就一直存在不管你删除的是源文件还是连接的文件。只要有一个存在文件就存在。当你修改源文件或者连接文件任何一个的时候,其他的文件都会做同步的修改。软链接不直接使用i节点号作为文件指针,而是使用文件路径名作为指针。所以删除连接文件对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件。软链接有自己的inode,并在磁盘上有一小片空间存放路径名。
    (3)软连接可以对一个不存在的文件名进行连接。
    (4)软连接可以对目录进行连接。

5、文件管理

5. 1 Linux的文件类型

一切皆文件。

ls命令使用 的文件类型代码

普通文件-
目录d
字符设备文件c
块设备文件b
符号链接文件l
套接字s
管道p
  1. 普通文件

    普通文件包括了文本文件、二进制文件等。文本文件可通过cat命令或vim编辑器等工具直接访问。可执行程序,图形文件等均属于二进制文件;例如前面已经介绍过的 which命令可以查看cat等shell命令作为二进制文件在系统中的存放位置。

    # 查看shell命令的存放位置,利用file命令可以查询“/bin/cat”文件的具体信息
    $ which cat
    $ file /bin/cat
    

    还有的二进制文件是特殊数据类型。如:"/var/log/wtmp/""/var/log/btmp",他们需要last和lastb命令读出文件中的信息。

  2. 目录

    属于特殊文件;

    记录了 它内部 所有文件的属性信息。

  3. 设备文件

    Linux系统采用设备文件统一管理硬件设备,从而将硬件设备的特性及管理细节对用户隐藏起来,实现用户程序不需要关心设备的硬件细节,只需要通过统一的文件访问操作接口即可实现对硬件设备的使用。

    这也是“一切皆文件”这句口号最为突出的体现。

    在Linux中,设备可分为字符设备块设备,对应地有字符设备文件和块设备文件。字符设备和块设备的区别在于:

    • 字符设备如键盘、鼠标等,并不具备IO缓冲,因此以单个字节为基本的数据传输单位;
    • 而如硬盘等块设备则具备IO缓冲,因而每次IO读写均为一个数据块(如512字节)。

    【示例7.5】鼠标设备文件。鼠标属于典型的字符设备,其设备文件存放于“/dev/input"下。示例显示结果中, mouse0-3对应于第1~4个鼠标设备.而mice则对应于通用:usb鼠标设备。

    【示例7.6】硬盘设备文件。硬盘属于典型的块设备。每个硬盘在“/dev”目录有对应的设备文件。硬盘按接口类型可分为IDE接口和SCSI接口,使用IDE接口的硬盘其设备文件为hda , hdb等,而使用SCSI接口的硬盘其设备文件命名为sda , sdb 等。实际使用中视需求而定,可将硬盘的存储空间划分为若干个区域,每个区域即被称为硬盘分区。对于已经分区的硬盘,其中的每个硬盘分区为一个独立的设备文件。如下示例结果显示,SCSI 接口硬盘sda中包括了sdal和sda2 两个分区。

    • 命令blkid (block id):查找/打印块设备的属性
      • -p(probe): 需要给出设备名称作为参数,用于探测设备的所有基本信息,包括UUID、文件系统类型。
      • U(UUID)给出设备文件名称,用于读取设备 UUID
  4. 链接文件

    【图解】一文读懂软硬链接

    链接文件指向某个实际的目标文件。

    • 硬链接(hard link):实际则是目标文件的一个副本

      实际上,我们在用户界面看到的所有文件(包括目录、快捷方式)全都是硬链接,它们都指向了文件系统的文件索引节点(inode

      inode指向磁盘中的实际文件数据,它的数据结构中有一个硬链接数

      • 具有相同inode节点号的多个文件互为硬链接文件;
      • 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除;只有删除了源文件和所有对应的硬链接文件,文件实体才会被删除;
      • 对源文件修改,硬链接文件也会修改,始终保持内容相同。【同步更新】
      • 可以通过给文件设置硬链接文件来防止重要文件被误删;
      • 对于静态文件(没有进程正在调用),当硬链接数为0时文件就被删除。注意:如果有进程正在调用,则无法删除或者即使文件名被删除但空间不会释放。
    • 符号链接 | 软链接(Symbolic Link):记录目标文件的所在路径

      • 删除源文件,软链接依然存在,但无法访问源文件内容;
      • 软链接和源文件是不同的文件,文件类型也不同,inode号也不同;
      • r软链接失效时一般是白字红底闪烁;

    命令:【默认创建硬链接文件】

    ln [选项] 目标文件路径 链接文件路径

    • -s(symbolic)建立符号链接
    touch target #先建立一个目标文件
    ln -s target symtarget #symtarget为链接文件
    ls -l symtarget
    

5.2 文件的权限

1. 文件的权限与用户类型

(1)文件所有者owner

(2)属组成员group

(3)其他用户other

rw- r-- r--

2. 文件权限的表示方法

rw执行x

文件的权限还可以用数字表示:

  • 4
  • 2
  • 执行1

这样"rwx"就可以表示为7。即4+2+1 = 7

如图:文件权限的数字表示

3. 目录权限的讨论

讨论目录的访问权限设置:

  • 通过ls等命令获取目录中的文件列表:起码需要有权限,但需要有执行权限配合,否则仍然无法获取详细的文件列表信息。
  • 通过cd等命令进人目录:需要有执行权限。但是如果没有权限,仍然不能列出目录中的文件。
  • 通过touch等命令在目录中创建文件:需要有权限。但是如果没有执行权限,同样不能创建文件。

由以上讨论可知,如果文件的拥有者想对属组成员或其他用户开放共享目录及其文件,但又不想在该目录下创建文件,则需要设置“r-x"权限,这正是目录权限的默认设置。

4. 默认权限

【示例7.11】查看系统为文件及目录攻置的默认权限。

默认权限的设置与系统的umask值有关。可以通过umask命令查看当前系统的umask设置:【查出来发现为0022】

其中第一位数字称为粘着位( stick bit),而后三位是我们更为关心的,它们是一种掩码, 用表7.2可以翻译为“----w--w-”。文件被创建后,如果该文件是目录,由于它需要被打开访问,因此它将有初始权限“rwxIwxrwx”,而如果该文件并非目录,则它将具有的初始权限为"rw-rw-rw-”。系统将使用umask设置默认权限。
(1)目录文件:初始权限“rwxrwxrwx”去掉“----W–w-”,结果默认权限为“rwxT-xr-x”。

(2)普通文件:初始权限“rw-rw-rw-”去掉“----w–w-”,结果默认权限为“rw-I–r–”。

5. 权限管理命令

  1. chmod [选项] 模式 文件路径

    设置文件的权限

    有两种模式可供选择

    • 数字模式

    • 字母模式

      指定用户类型以及所要设置的权限(r,w,N)。对于文件所有者、属组成员和其他用户分别用字母u,g,o表示。如果是上述3种用户都要设置权限,则可用a表示。权限的增加成删除用+/-表示。而权限则用r , w ,x分别表示读、写和执行权限。

  2. chown [选项] 所有者[群组] 文件

    功能:设置文件所有者及其所属组群

    # 设置newfile文件拥有者为study
    chown study:study newfile
    # 修改newfile所属组群为testuser
    chown :study newfile
    
  3. chgrp 组群名 文件

    设置文件所属 组群

    touch studyfile # 默认为root组群
    chgrp study studyfile #修改studyfile文件的组群为study
    

5.3 与文件有关的应用

1. 文件的查找

在Linux中的文件查找可分为快速查找和完全查找两种。

  • 快速查找由于只在数据库中检索,因此查找速度很快,适合于对一些重要文件的定位,相关命令有前面介绍过的which命令, which命令用于查找某个命令的执行文件路径,这里另外介绍whereis命令,它能对一些特定的文件进行快速查找。

  • 完全查找是指在整个文件系统范围内查找文件,因而查找速度较慢,但能够完整地找出所有符合查找条件的文件。对于完全查找,下面介绍find命令供读者使用。

  1. whereis:快速查找关于某个命令的相关特定文件(包括目录)

    • -b(binary)
    • -m(manual):只查找与命令有关的说明手册文件
    • -s(source):只查找与该命令有关的源代码文件
  2. find [查找路径] [选项] [参数]

    对某些特定文件(包括目录)进行完整查找

    以下是关于用户信息条件的重要选项及其实例

    -user :查找属于某个用户的所有文件

    -group:查找属于某个组群的所有文件

    find /home -user root # 查找/home目录中属于root用户的所有文件
    	/home
    	/home/study/readable
    #查找/root目录下属于study用户的所有文件
    find /root -user study
    

    大于1M的文件:

    new开头文件

    查找"/root”目录中正好符合“rw-rw-rw-”权限模式的文件。

    查找“/ root”目录中包括“rw-rw-rw-”权限模式的文件。

2. 文件的压缩和打包

  1. gzip压缩/解压缩

    # 对文件进行压缩,默认得到*.gz文件
    gzip test.png 
    
  2. tar [选项] 归档文件 [操作路径]:对一组文件进行 归档/ 还原

    重要选项:

    • -f文件名:该选项是必要选项,用于指定生成的归档文件的名称,或要提取的归档文件的名称。
    • -c( create):创建一个归档文件。
    • -C( change):改变(跳转)到某个目录上进行操作。
    • -x( extract)提取归档文件中的文件。
    • -z( gzip):使用gzip方式对文件进行压缩或解压缩。
    • -v( verbose):显示命令的执行过程。

  3. zip:对于zip格式的压缩与解压

    • 安装:yum install -y unzip

    • 压缩

      zip -q -r 1.zip 1.txt
      # 将当前目录下的1.txt压缩为1.zip。选项-q表示忽略执行过程,-r表示递归处理,将指定目录下的所有文件和子目录一并处理
      
    • 解压 unzip 1.zip 解压当当前目录下

      unzip 1.zip -d folder :通过-d指定解压路径,即解压到当前目录下folder这个文件夹下,如果这个文件夹不存在,可以自动创建

3. 文件的转换和复制

在实际应用中常需要创建一些具有特殊格式的文1,如光盘文件(.iso)创建方式往往是从某个具有这种格式的文件中读取数据块作为输入,结果复制写入到输出文件作为输出。此处介绍dd命令用于文件的转换与复制

dd [选项] [操作路径]

重要选项:

  • if( input file):此选项后面需给出格式为“=文件路径”的参数作为输人文件,以此替代从标准输入中获取输入。
  • of ( output file):此选项后面需给出格式为“=文件路径"的参数作为输出文件。
  • bs( block size):此选项后面需给出参数指出每次读取和写人的子节数,可以使用K,M,G或KB、MB、GB等缩写表示字节数。
  • count:此选项后面需给出参数指出读取和写入的次数。

六、文件系统

6.1 文件系统概述

  1. 常用文件系统类型:

    1)ext 文件系统:是Linux的根文件所使用的文件类型

    2)FAT文件系统

    3)ISO9660文件系统应用于光盘介质的文件系统类型

  2. 虚拟文件系统
    Linux 的根文件系统使用了ext文件系统类型,然而除此之外Linux 还要文持各种类型的文件系统。例如,当使用到光盘时, Linux需要支持ISO9660文件系统类型,当使用被格式化为FAT32文件系统的U盘时,Linux 也需要根据VFAT文件系统的格式从U盘访向数据。因此Linux设计了虚拟文件系统(Virtual File System,VFS)用于实现上述目的。虚拟文件系统相当于一个应用程序与各种存储设备及其文件系统之间的接口,用户在实际使用各种文件系统时并不需要关心到文件系统的真实特性,而是以统一的接口访向数据。

Linux各个目录的含义:

一级目录功能(作用)
/bin/存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行
/boot/系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/设备文件保存位置
/etc/配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等
/home/普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming
/lib/系统调用的函数库保存位置
/media/挂载目录。系统建议用来挂载媒体设备,如软盘和光盘
/mnt/挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/misc/挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的
/opt/第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件
/root/root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下
/sbin/保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看
/srv/服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/tmp/临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空

6.2 文件系统的挂载和卸载

  1. 与Windows的区别

    当一个物理存储设备安装在硬件接口上(如将U盘插人到USB接口中)时,操作系统能够通过硬件检测程序发现该设备。

    • 对于 Windows操作系统,它将会自动完成物理存储设备的接入。
    • 而对于Linux,用户在使用该存储设备之前,还必须要将该设备中的文件系统接入到Linux 的虚拟文件系统中,该过程被称为挂载,其逆向过程则称为卸载
    • 对于一些常见的存储设备,Linux系统同样能够像Windows系统那样按照默认方式自动挂载对应的文件系统,因此作为普通用户并不需要关心这个过程。然而在系统管理的许多场合.实际都需要涉及更复杂和特定的文件系统挂载荷卸载操作,因此不能完全依靠系统自动瓜子啊方式接入存储设备

    在文件系统官理上与 Windows 差异较大的另一点是,当接入某个物理存储设备时,Windows将会为新接入的设备分配一个盘符以供用户访问对应的文件系统,而Linux也会为该存储设备分配一个设备文件。然鹅在Linux 中,还需要指定一个在根文件系统下的目录作为所要挂载的文件系统的访问入口(挂载点)。也就是说, Linux将所有文件系统最终都纳入到根文件系统中。的日求结构对这些文件系统进行管理。相比之下, Linux这种管理系统的方式具有更高的可扩展性和灵活性。

  2. /etc/fatab文件

    由于许多文件系统需要在系统初始化时进行挂载,例如根文件系统就必须是第一个进行挂载的文件系统,然后其他文件系统才能挂载在根文件系统的某个挂载点之下。因此Linux将在初始化需要挂载的文件系统的相关信息记录在“/etc/fstab”文件中。以默认方式安装的RHEL系统,它的“/etc/istab”文件的基本信息将会类似于如下示例内容:

    与“/etc/passwd”等配置文件相类似, "/etc/fstab”文件的内容实际也是一张表,每一行代表一个文件系统的挂载信息,表格共有6列,以空格或制表符隔开。下面结合以上示例内容讨论“/etc/fstab”文件中从左到右各列的含义。

    1. 设备文件名/标签/UUID
    2. 挂载点
    3. 所要挂载的文件系统类型
    4. 挂载参数
    5. 是否使用dump命令备份系统;0表示不作自动备份
    6. 是否在系统启动时通过fsck命令检查文件系统错误
  3. 相关命令

    1. mount [挂载] [设备文件名] [挂载路径]

      挂载文件系统

      • -a(all) :自动挂载所有在/etc/fstab文件中记录的文件系统
      • -t(type):给出参数指定所要挂载的文件系统类型,如ext4、iso9660、vfat等
      • -o(option):给出额外的指定的一些挂载方式

    1. umount [选项] [设备文件名/挂载路径]

      gedit /mnt/usb/test
      umount /mnt/usb/test
      

6.3 文件系统的创建

  1. fdisk:磁盘及分区管理工具,在磁盘设备中创建、删除、更改分区等操作。【分区危险性高】

  2. mkfs(make file system) [选项] 设备文件名 :创建文件系统【在硬盘分区后,使用mkfs可对其格式化。格式化的过程即创建文件系统的过程。可以使用mkswap可以格式化SWAP交换分区】

    • -t(type):该选项所要创建的文件系统类型。mkfs支持的文件系统类型有ext2,ext3 ,ext4 , vfat等。
    • -c( check) :在格式化之即位查设备是否有坏数据块。
    • -b (block-size) : 该选项后需要给出参数指定基本数据块大小,参数可以是1024,2048和4096,单位为字节。
    • N( number-of-inodes):该选项后面需要给出参数设定创建的索引结点数量。该数值将决定文件系统能够文持的最大文件数。如果没有特殊要求.可取默认设詈

    格式化之后挂载文件系统,然后查看U盘的内容:

    可发现系统在U盘中自动生成了一个名为 lost+ found 的目录。如果系统因掉电等原因而导致文件丢失、系统重启后使用fsck 命令检查文件系统,则可能通过恢复操作找回这些文件,它们被放置于lost+found目录里

6.4 文件系统的检查

文件系统的检查有两个方面的内容:

  • 一是检查使用情况,最基本的是检查文件系统中已占用的空间已经剩余的空间;

  • 另一方面是检查是否有错误

1)df命令

显示各个文件系统的存储空间的使用情况,如果指定某个文件名,则显示该文件所在的文件系统的信息。

df [选项] 文件名

重要选项:

  • -h( human-readable):命令默认以字节为单位显示结果,该选项能以用户友好好的方式(即以1K,234M,2G等方式)显示结果。
  • -i( inode):查看索引结点 inode的使用情况。
  • -T( type):显示文件系统类型。

2)fsck(file system check)命令

功能:检测并修复文件系统中的错误。

fsck [选项] [设备文件名/挂载路径/设备标签/UUID]

  • -a根据“/etc/fstab”中的内容按顺序检查
  • -f force强制检查,即使文件系统已经被标记为clean

七、进程管理

7.1 监视进程

1 与进程有关的信息

首先理解与进程有关的各类信息的基本含义。对于一个进程,主要可以查看或统计如下信息:

  1. PID(Process id) :进程号,它是系统为进程分配的唯一编号,用于标识进程的身份

  2. PPID(Paren l)):父进程(创建该进程的进程)的PID 号。

  3. USER/UID:执行该进程的用户身份及其UID。

  4. TTY:启动该进程的终端。

  5. PRl (priorily):进程的优先级,数字越大表示优先级越低。

  6. NlCE:进程的谦让l:度、表示进程对CPU时间要求的迫切程度。

  7. STAT( slate , 可用S表示):进程的状态,王要的进程状态有R ( Running,正在运行或已经就绪),S( Sleep,可以被唤醒的睡眠),D(不可唤醒的睡眠, 如等待IO的状态)、T( Stopped,已被停止),Z.( Zombic ,进程已经终止但未被父进程回收)等。

  8. % CPU:进程占用的 CPU比例。

  9. %MEM:进程占用的内存比例。

  10. TIME;进程实际占用CPU 的总时间。

  11. ADDR:进程在内存中的地址。

  12. SZ:进程占用的虚拟内存大小。

  13. CMD( command):启动进程的命令。

7.2 proc文件系统

获知进程状态是管理进程的第一步。Linux系统为查看进程的状态提供了许多接口,命令和工具。最典型的是proc文件系统。proc文件系统是一个建立在内存的特殊文件系统,它的挂载点是"/proc”,它记录了各进程以及其他系统信息。在proc文件系统中,每个目录对应于一个进程,目录以进程的PID命名。进入某个进程对应的目录,里面有若干文件,这些文件记录了该进程当前运行的各种状态信息。应用程序可通过打开并读取这些文件来获取进程信息,因此proc文件系统实质为用户程序提供了一种了解内核的方式。许多系统管理命令,如后面所介绍的ps命令, top命令等都是通过读取并整理proc文件系统的内容后以更为友好的方式将进程的当前状态信息呈现给用户。

【示例11.1】查看“/proc"文件系统的结构并查看1号目录的内容。1号目录记录的是1号进程的信息,1号进程也称为init进程,是系统的第一个用户级进程。

在proc目录下ls列出文件信息

【示例11.2】查看1号进程的状态信息内容。这里查看了1号目录中的status文件获取1号进程的状态信息,进程名称、状态( state), PID 、PPID等基本信息以及使用虚拟内存等资源的情况。

【示例11.3】 查看系统的CPU信息。proc文件系统不仅记录了进程信息,还记录了各类系统信息,包括硬件信息,如CPU,内存等信息。作为示例这里查看了/proc/cpuinfo的内容,里面记录了与CPU有关的硬件信息。此外还可以通过访问/proc/meminfo获取内存的使用情况。

7.3 进程监视命令

  1. ps命令:报告进程的相关信息

    • -e:显示所有进程的信息
    • -f:全格式
    • -l:长格式(即更多字段)
      • 查出的结果:PRIPriority 进程优先级编号;

        python全栈100天学习笔记day32linux概述及基础命令(代码片段)

        Linux概述Linux是一个通用操作系统。一个操作系统要负责任务调度、内存分配、处理外围设备I/O等操作。操作系统通常由内核(运行其他程序,管理像磁盘、打印机等硬件设备的核心程序)和系统程序(设备驱动、... 查看详情

        python全栈100天学习笔记day35linux系统软件安装shell编程及配置服务工具(代码片段)

        使用包管理工具yum-YellowdogUpdaterModified。yumsearch:搜索软件包,例如yumsearchnginx。yumlistinstalled:列出已经安装的软件包,例如yumlistinstalled|grepzlib。yuminstall:安装软件包,例如yuminstallngin 查看详情

        浅谈如何学习linux

        学习Linux并不难,做好规划,有合适的学习路线,坚持学习,就可以达到意想不到的结果。以下是Linux经典学习路线,希望对你们有帮助。第一阶段:linux基础入门1.开班课程介绍-规章制度介绍-破冰活动;2.Linux硬件基础/Linux发展历... 查看详情

        mooc《linux操作系统编程》学习笔记-实验六(代码片段)

        实验六线程同步实验https://www.icourse163.org/learn/UESTC-1003040002?tid=1455108444#/learn/content?type=detail&id=1228729539&cid=1245454470实验六 线程同步实验https://www.icourse163.org/learn/UESTC-1003040002?tid=14 查看详情

        想学linux应该怎么入手

        学习Linux并不难,做好规划,有合适的学习路线,坚持学习,就可以达到意想不到的结果,初学者可以按照以下路线进行学习:第一阶段:linux基础入门1.开班课程介绍-规章制度介绍-破冰活动;2.Linux硬件基础/Linux发展历史;3.Linux系... 查看详情

        学习计划(代码片段)

        学习目标:通过学习linux,提高自身技术水平,找到一份理想的工作。学习时间:每天至少2个小时通过马哥linux视频学习,学习内容:第一阶段:?1.linxu基础知识、基本命令2.linux系统用户及权限管理3.linux文本处理命令学习(vim、... 查看详情

        学习linux的课程需要了解包含哪些内容

        ...学的是Linux基础知识,学完基础知识才算入门,之后还要学习综合架构、Shell编程、数据库、云计算以及网络安全方面的知识,以下是linux基础部分要学习的内容:1.计算机硬件、组成原理、操作系统基础、Linux起源、核心介绍及Li... 查看详情

        linux学习笔记2022-11-12---------linux基础(代码片段)

        目录1.用户类型2.终端terminal2.1终端类型2.2查看当前的终端设备3.交互式接口3.1交互式接口类型3.2什么是shell3.3Shell是如何连接用户和内核的?3.4Shell还能连接其它程序3.5Shell也支持编程3.6Shell是一种脚本语言4.修改主机名5.命令提... 查看详情

        python全栈100天学习笔记day34linux用户管理及文件系统(代码片段)

        用户管理创建和删除用户-useradd/userdel。[roothome]#useraddhellokitty[roothome]#userdelhellokitty-d-创建用户时为用户指定用户主目录-g-创建用户时指定用户所属的用户组创建和删除用户组-groupadd/groupdel。说明:用户组主要是为了方便对一... 查看详情

        linux具体要学点啥,基础要学啥?

        ...学的是Linux基础知识,学完基础知识才算入门,之后还要学习综合架构、Shell编程、数据库、云计算以及网络安全方面的知识,以下是linux基础部分要学习的内容:1.计算机硬件、组成原理、操作系统基础、Linux起源、核心介绍及Li... 查看详情

        新手入门linux的步骤

        新手想要快速入门学习Linux,要制定合适的学习路线,这样才可以达到事半功倍的效果。第一阶段:linux基础入门1.开班课程介绍-规章制度介绍-破冰活动;2.Linux硬件基础/Linux发展历史;3.Linux系统安装/xshell连接/xshell优化/SSH远程... 查看详情

        免费下载全套最新3.shell编程视频教程+教学资料+学习课件+源代码+软件开发工具

        3.Shell编程视频教程网盘地址:链接:https://pan.baidu.com/s/1-M4wHTMaE8rxjroTTd-9qQ提取码:qf52加公众号获取更多新教程教程目录大纲./3.Shell编程├──11云计算-Linux系统管理-shell基础│??├──100-云计算-Linux系统管理-shell基础-echo命令.avi... 查看详情

        《linux系统及应用》期末重点复习笔记(代码片段)

        整理不容易,求点赞关注~第一章Linux概述与安装1.Linux系统的特点:多用户多任务、开源、安全、稳定2.Linux内核版本和发行版本的区别(1)内核版本只有Linux内核部分,安装完后,用户界面、软件都没有... 查看详情

        《linux系统及应用》期末重点复习笔记(代码片段)

        整理不容易,求点赞关注~第一章Linux概述与安装1.Linux系统的特点:多用户多任务、开源、安全、稳定2.Linux内核版本和发行版本的区别(1)内核版本只有Linux内核部分,安装完后,用户界面、软件都没有... 查看详情

        运维工程师需要学习哪些课程

        ...学的是Linux基础知识,学完基础知识才算入门,之后还要学习综合架构、Shell编程、数据库、云计算以及网络安全方面的知识,以下是linux基础部分要学习的内容:1.计算机硬件、组成原理、操作系统基础、Linux起源、核心介绍及Li... 查看详情

        linux运维应该怎么去学习?

        第一阶段:linux基础入门Linux基础入门主要包括:Linux硬件基础、Linux发展历史、Linux系统安装、xshell连接、xshell优化、SSH远程连接故障问题排查、Linux基础优化、Linux目录结构知识、Linux文件属性、Linux通配符、正则表达式、Linux系... 查看详情

        linux课程有啥内容?

        Linux学习,主要学以下内容:第一阶段:linux基础入门1.开班课程介绍-规章制度介绍-破冰活动;2.Linux硬件基础/Linux发展历史;3.Linux系统安装/xshell连接/xshell优化/SSH远程连接故障问题排查4.第一关一大波命令及特殊字符知识考试题... 查看详情

        linuxc/c++零基础学习编程教程,linux系统编程教程

        ...编程的教程和实践项目,希望能够和更多的读者一起学习!   更多的资料,可以访问作者的博客网站:www.mylinux.vip微信:13926572996微信二维码:编程学习群关注下方的公众号&# 查看详情