linux
1.linux目录结构和文件类型
命令的格式:命令 [选项]...... [参数]......
命令必须要写,但有些命令可以不带选项,也可以带多个选项,例如:-l --help
参数:同选项
ls命令
1.列出根目录内容 [root@localhost ~]# ls / afs boot etc lib media opt root sbin sys usr bin dev home lib64 mnt proc run srv tmp var 2.ls常用参数: -a:显示指定目录下所有子目录与文件,包括隐藏文件(隐藏文件.开头) -A:与a一样,但不列出.和..(当前目录和副目录) -l:以列表方式显示文件的详细信息 -h:配合 -l 以人性化的方式显示文件大小 -d:看当前目录(和l配合使用,查看当前目录本事的信息) (l和a也可配合使用) 注意:.代表上级目录 3.ls -l / 长列表列出根目录下的文件信息【元数据】,最后一列为文件名 dr-xr-xr-x. 2 root root 6 8月 10 2021 afs lrwxrwxrwx. 1 root root 7 8月 10 2021 bin -> usr/bin #二进制文件所在的目录,命令的可执行文件所在目录 dr-xr-xr-x. 5 root root 4096 9月 12 21:13 boot #内核(核心代码)核心文件(镜像文件,链接文件) drwxr-xr-x. 20 root root 3400 9月 13 17:37 dev #设备文件所在目录 drwxr-xr-x. 133 root root 8192 9月 13 17:42 etc #配置(系统配置)文件所在目录 drwxr-xr-x. 3 root root 23 9月 12 21:14 home #普通用户家目录 lrwxrwxrwx. 1 root root 7 8月 10 2021 lib -> usr/lib #库文件 lrwxrwxrwx. 1 root root 9 8月 10 2021 lib64 -> usr/lib64 #库文件(64位) drwxr-xr-x. 2 root root 6 8月 10 2021 media #挂载点目录(系统默认) drwxr-xr-x. 3 root root 18 9月 12 20:58 mnt #挂载点目录(手动挂载) drwxr-xr-x. 2 root root 6 8月 10 2021 opt #第三方软件包所在目录 dr-xr-xr-x. 350 root root 0 9月 13 17:36 proc #虚拟的文件系统(数据存储在内存) dr-xr-x---. 15 root root 4096 9月 13 17:44 root #root用户家目录 drwxr-xr-x. 45 root root 1160 9月 13 17:36 run #程序运行文件所在目录(ssh) lrwxrwxrwx. 1 root root 8 8月 10 2021 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 8月 10 2021 srv #第三方服务产生的文件所在目录 dr-xr-xr-x. 13 root root 0 9月 13 17:36 sys #虚拟文件系统 drwxrwxrwt. 21 root root 4096 9月 13 19:37 tmp #临时文件所在目录(例如定闹钟) drwxr-xr-x . 12 root root 144 9月 12 20:56 usr #软件资源 drwxr-xr-x. 20 root root 4096 9月 12 21:12 var #可变化数据所在目录(cat /var/log/messages 系统日志) 文件类型:一切皆文件 d 目录文件 l 软链接文件--快捷方式 - 普通文件,例如文本文件,但不是所有普通文件都能查看。 b 块设备文件--存储设备(硬盘) c 字符设备文件(键盘鼠标) p 管道文件(同一主机不同进程间通信) s 套接字文件(不同主机间通信) 用户的权限:r读 w写 x可执行 文件的所属者rwx 文件的所属组rwx 其他人rwx 总的来说文件结构为: 文件的类型 文件的权限 acl访问控制列表 硬链接次数 文件的所属者 文件的所属组 文件的大小(b字节) 文件的mtime修改时间 文件名
man手册: 例如 man ls / +关键字:按关键字查看命令信息
stat命令
stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。
stat命令可以查看的信息包括:
--File:显示文件名 --Size:显示文件大小 --Blocks:文件使用的数据块总数 --IO Block:IO块大小 --regular file:文件类型(常规文件) --Device:设备编号 --Inode:Inode号 --Links:链接数 --Access:文件的权限 --Gid、Uid:文件所有权的Gid和Uid --access time:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间 --modify time:表示我们最后一次修改文件的时间 --change time:表示我们最后一次对文件属性改变的时间,包括权限,大小,属性等等 --Birth time : 文件创建时间,crtime,不过据查此属性linux已废弃,目前状态显示结果均为-
stat [文件或目录] 查看文件状态信息 [root@localhost ~]# stat /home/xuehanwen 文件:/home/xuehanwen 大小:4096 块:8 IO 块:4096 目录 设备:fd00h/64768d Inode:631597 硬链接:14 权限:(0700/drwx------) Uid:( 1000/xuehanwen) Gid:( 1000/xuehanwen) 环境:unconfined_u:object_r:user_home_dir_t:s0 最近访问:2023-09-13 18:07:33.711123885 +0800 最近更改:2023-09-12 21:20:03.174595190 +0800 最近改动:2023-09-12 21:20:03.174595190 +0800 创建时间:2023-09-12 21:14:25.968189756 +0800 stat -f:查看文件所在文件系统的状态信息 [root@localhost ~]# stat -f /home/xuehanwen 文件:"/home/xuehanwen" ID:fd0000000000 文件名长度:255 类型:xfs 块大小:4096 基本块大小:4096 块:总计:4452864 空闲:3386905 可用:3386905 Inodes: 总计:8910848 空闲:8781852 inode:硬盘的最小存储单位叫做扇区。每个扇区存储512字节,而连续的8个扇区组成了一个块(block),大小为4kb。文件数据都存储在块中,为了能够方便找到存储数据的位置我们还必须找到一个地方存储文件的属性,这种存储文具属性信息的区域叫做inode(索引节点)
2.文件管理
查看文件内容:cat、tac
cat 由第一行开始显示文件内容,tac 从最后一行开始显示
选项与参数: -b :列出行号,空白行不标行号 -n :列出行号,连同空白行也会有行号 -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已; -v :列出一些看不出来的特殊字符 -E :将结尾的断行字节 $ 显示出来; -T :将 [tab] 按键以 ^I 显示出来; [root@localhost ~]# cat 文档/test.txt i love linux i love c++ i love python [root@localhost ~]# cat -b 文档/test.txt 1 i love linux 2 i love c++ 3 i love python [root@localhost ~]# tac 文档/test.txt i love python i love c++ i love linux
分屏显示:more、less
[root@www ~]# more /etc/man_db.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... --More--(28%) <== 光标在这里等待命令 more运行时可以输入的命令有: 空白键 (space):代表向下翻一页; Enter :代表向下翻『一行』; /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字; :f :立刻显示出档名以及目前显示的行数; q :代表立刻离开 more ,不再显示该文件内容。 b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。 [root@www ~]# less /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... : <== 这里可以等待你输入命令! less运行时可以输入的命令有: 空白键 :向下翻动一页; [pagedown]:向下翻动一页; [pageup] :向上翻动一页; /字串 :向下搜寻『字串』的功能; ?字串 :向上搜寻『字串』的功能; n :重复前一个搜寻 (与 / 或 ? 有关!) N :反向的重复前一个搜寻 (与 / 或 ? 有关!) q :离开 less 这个程序;
2.1目录文件的管理
1、创建、删除
[root@localhost ~]# mkdir -pv /root/dir3/dir33 mkdir: 已创建目录 '/root/dir3' mkdir: 已创建目录 '/root/dir3/dir33' -p:如果创建文件的父目录不存在,则先创建父目录 -v:显示创建成功或失败信息 #同时创建多个文件 [root@localhost ~]# mkdir -pv /root/dir4 /home/dir1 mkdir: 已创建目录 '/root/dir4' mkdir: 已创建目录 '/home/dir1' [root@localhost ~]# mkdir -pv /{root,home}/dir6 mkdir: 已创建目录 '/root/dir6' mkdir: 已创建目录 '/home/dir6' [root@localhost ~]# mkdir -pv /root/dir{7,8,9} mkdir: 已创建目录 '/root/dir7' mkdir: 已创建目录 '/root/dir8' mkdir: 已创建目录 '/root/dir9' [root@localhost ~]# mkdir -pv /root/dir{10..15} mkdir: 已创建目录 '/root/dir10' mkdir: 已创建目录 '/root/dir11' mkdir: 已创建目录 '/root/dir12' mkdir: 已创建目录 '/root/dir13' mkdir: 已创建目录 '/root/dir14' mkdir: 已创建目录 '/root/dir15'
2、编辑
#目录文件的内容是很多文件 可以在目录文件下面创建:目录文件mkdir,普通文件,软链接,块设备文件
3、查看内容
1.查看目录本身信息 [root@localhost ~]# ls -ld dr-xr-x---. 27 root root 4096 9月 15 00:40 . 2.*表示零个或多个任意字符 [root@localhost ~]# ls -ld /root/dir* drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir10 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir11 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir12 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir13 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir14 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir15 drwxr-xr-x. 3 root root 19 9月 14 22:32 /root/dir3 drwxr-xr-x. 2 root root 6 9月 14 22:33 /root/dir4 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir6 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir7 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir8 drwxr-xr-x. 2 root root 6 9月 14 22:34 /root/dir9 3.查看目录的内容 [root@localhost ~]# ls -l /root/dir10 总用量 0 也可以用ll命令,是ls -l的别名 4.用tree查看 [root@localhost ~]# tree /root/dir3 /root/dir3 └── dir33
4、删除
#删除目录必须使用-r选项 不然就会发生 [root@localhost ~]# rm /root/dir3 rm: 无法删除 '/root/dir3': 是一个目录 正确的: [root@localhost ~]# rm -r /root/dir3 rm:是否进入目录'/root/dir3'? y rm:是否删除目录 '/root/dir3/dir33'?y rm:是否删除目录 '/root/dir3'?y #删除目录时会询问是否删除,此时可以使用-f选项强制删除 [root@localhost ~]# rm -rf /root/dir* 这样root目录下的所有dir*文件都会删除 #删库跑路,直接把根目录下所有文件删除 rm -rf /*
2.2普通文件的管理
1、创建
touch用法1:如果文件存在会更新文件的时间:atime,mtime,ctime touch用法2:创建普通文件 touch /root/file1 /root/file2 /root/file{1..5}
2、编辑
#1.将命令执行后的标准输出写入文件,>重定向:可将命令执行后的标准输出重定向到文件;>>追加重定向:将命令执行后的标准输出追加到文件 标准输出:命令成功执行后在屏幕上输出的内容 标准错误输出:命令执行失败后在屏幕上输出的内容 [root@localhost ~]# pwd > /root/file1 [root@localhost ~]# cat /etc/redhat-release >> /root/file1 [root@localhost ~]# cat /root/file1 /root Red Hat Enterprise Linux release 9.1 (Plow) 标准错误输出写入文件用2> [root@localhost ~]# ls -l /root/file11 ls: 无法访问 '/root/file11': 没有那个文件或目录 [root@localhost ~]# ls -l /root/file11 2> /root/file1 [root@localhost ~]# cat /root/file1 ls: 无法访问 '/root/file11': 没有那个文件或目录 #2.使用echo指定要输出的内容,再使用重定向写入指定文件 [root@localhost ~]# echo hello linux hello linux [root@localhost ~]# echo hello linux >> /root/file1 [root@localhost ~]# cat /root/file1 ls: 无法访问 '/root/file11': 没有那个文件或目录 hello linux #HOME是系统定义好的变量 [root@localhost ~]# echo $HOME /root #3.vim编译器:vim/vi 1.所有的linux操作系统中都会安装vi编译器 2.当你在使用一些对系统做设置的时候其实就是改变一些系统文件,此时会调用vi编译器 3.vim可以通过颜色显示代码的语法正确性 4.一些特殊的服务配置文件(sshd)也会有颜色显示 [root@localhost ~]# vim /root/file1 命令模式: 光标的跳转:gg,G【跳转到文件内容的行首和行尾第一个字符】 10gg或者10G, ^,$【将光标跳转到光标所在行的第一个字符和最后一个字符】,w,b【按单词前后跳转】 复制:yy、3yy 粘贴:p,P 删除:dd,2dd,dgg,dG 撤销:u 插入模式:i、a i 在光标前插入内容 I 在光标所在行第一个非空字符前插入内容 a 在光标后插入内容 A 在光标所在行的行尾插入 s 删除光标所在字符并进入插入模式 S 删除光标所在行并进入插入模式 o光标所在行的下一行插入内容 O 光标所在行的上一行插入内容 末行模式: :w 保存内容 :w /dir/file 另存为 :q 退出 :wq 保存退出 :q! 强制退出不保存 :wq! 强制保存退出 :r /dir/file1 将dir/file1文件内容写入到当前文件光标所在行的下一行 /keywords 查找关键字。可以使用n,N在找到的字符之间跳转 :%s/old/new/g %表示整个文档,old是被替换的内容,new是新内容 ,g表示替换每一个old :1,5s/old/new/g 拓展:1、可视化模式,ctrl+v 通过移动上下左右键选择块内容,y表示复制,p表示粘贴 在所有行行首加入#字符,先按ctrl+v,接着选中每一行的每一个字符,然后按I,接着写入#,最后按esc 2、同一个窗口编辑多个文件 :sp /dir/file 使用ctrl+ww可以在几个文件中跳转光标
3、查看
-
整个文档内容查看
#将文件内容全部输出到屏幕上 cat -n 显示行 #通过less程序查看文件内容,按q退出,空格和b翻页,/keywords查找关键字 [root@rhel9-1 ~]# less -N /etc/ssh/sshd_config #查看文件前10行 [root@rhel9-1 ~]# head /etc/ssh/sshd_config [root@rhel9-1 ~]# head -6 /etc/ssh/sshd_config #查看文件后10行 [root@rhel9-1 ~]# tail /var/log/messages [root@rhel9-1 ~]# tail -1 /var/log/messages #追踪系统日志文件 [root@rhel9-1 ~]# tail -f /var/log/messages |管道符。将管道前面指令的输出给管道后面的指令进行处理 查看第10-20行的内容 [root@rhel9-1 ~]# head -20 /etc/ssh/sshd_config | tail -10
-
文档行内容和列内容处理后查看
[root@rhel9-1 ~]# cat /root/file1 xiaoming:60 xiaohong:80 xiaolan:90 xiaobai:100 xiaohei:50 #cut指令-d选项指定分隔符,-f指定几个字段 [root@rhel9-1 ~]# cut -d : -f 1 /root/file1 xiaoming xiaohong xiaolan xiaobai xiaohei [root@rhel9-1 ~]# cut -d : -f 2 /root/file1 60 80 90 100 50 #sort指令-t选项指定分隔符,-k表示第几个字段 -n升序 -nr降序 [root@rhel9-1 ~]# sort -t : -k 2 -n /root/file1 xiaohei:50 xiaoming:60 xiaohong:80 xiaolan:90 xiaobai:100 #uniq去重,uniq -c统计 #面试题:我们有一个服务器,日志为/root/access.log,找出访问服务器次数最多的IP地址 [root@rhel9-1 ~]# cat /root/access.log 2022/12/01 12:00 10.0.0.2 chrome 2023/01/01 13:00 192.168.1.2 firefox 2023/06/06 15:00 10.0.0.2 firefox 2023/07/01 14:00 10.0.0.2 IE 2023/07/01 14:00 10.0.0.1 IE [root@rhel9-1 ~]# cut -d " " -f 3 /root/access.log | sort | uniq -c | sort -t " " -k 1 -nr | head -1 3 10.0.0.2
-
搜索文件内容查看:列出有关键字的行
[root@rhel9-1 ~]# cat /root/file2 root 123 ROOT 123 root 456 root 789 test ceshi #列出有root的行 [root@rhel9-1 ~]# grep root /root/file2 root 123 123 root 456 root 789 #-i忽略大小写 [root@rhel9-1 ~]# grep -i root /root/file2 root 123 ROOT 123 root 456 root 789 #-v匹配到没有root的行 [root@rhel9-1 ~]# grep -v root /root/file2 ROOT test ceshi #-vi忽略大小写 [root@rhel9-1 ~]# grep -vi root /root/file2 test ceshi #匹配到root开头的行 [root@rhel9-1 ~]# grep ^root /root/file2 root 123 #匹配到root结尾的行 [root@rhel9-1 ~]# grep root$ /root/file2 123 root #匹配到有t或c的行,[0-9],[a-Z] [root@rhel9-1 ~]# grep [tc] /root/file2 root 123 123 root 456 root 789 test ceshi #匹配到t或c开头的行 [root@rhel9-1 ~]# grep ^[tc] /root/file2 test ceshi
4、删除
[root@rhel9-1 ~]# rm -rf file*
2.3软链接文件的管理
#创建 ln -s [root@rhel9-1 ~]# echo "this is a test" > /root/test [root@rhel9-1 ~]# ln -s /root/test /root/test.link [root@rhel9-1 ~]# ln -s /home/xuehanwen /redhat1 [root@rhel9-1 ~]# ll -d /redhat1 lrwxrwxrwx. 1 root root 15 9月 17 00:48 /redhat1 -> /home/xuehanwen #编辑 取决于软链接文件所连接的文件类型 #查看 取决于软链接文件所连接的文件类型 #删除:如果删除目录文件,特别注意文件名后不要补全/,而且注意小心使用-rf强制删除 rm /root/test.link rm /redhat
2.4块设备文件
[root@rhel9-1 ~]# ls -l /dev | grep ^b brw-rw----. 1 root disk 253, 0 9月 16 14:09 dm-0 brw-rw----. 1 root disk 253, 1 9月 16 14:09 dm-1 brw-rw----. 1 root disk 259, 0 9月 16 14:09 nvme0n1 brw-rw----. 1 root disk 259, 1 9月 16 14:09 nvme0n1p1 brw-rw----. 1 root disk 259, 2 9月 16 14:09 nvme0n1p2 brw-rw----+ 1 root cdrom 11, 0 9月 16 14:10 sr0 [root@rhel9-1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 8.4G 0 rom /run/media/root/RHEL-9-1-0-BaseOS-x86_64 nvme0n1 259:0 0 20G 0 disk ├─nvme0n1p1 259:1 0 1G 0 part /boot └─nvme0n1p2 259:2 0 19G 0 part ├─rhel-root 253:0 0 17G 0 lvm / └─rhel-swap 253:1 0 2G 0 lvm [SWAP]
2.5文件的复制和移动
#复制目录文件或普通文件至目录(源文件不丢失) [root@rhel9-1 ~]# mkdir /root/hostname [root@rhel9-1 ~]# cp /etc/hostname /root/hostname/ [root@rhel9-1 ~]# cp -r /etc/ssh/ /root/hostname/ #复制文件时,如果目标文件不存在,则会创建目标文件,可以利用此特性做备份 [root@rhel9-1 ~]# cp /root/test{2,.bak}
#移动文件,源文件会消失,可以利用此特性进行文件重新命名 [root@rhel9-1 ~]# mv /root/test1 /root/test2 [root@rhel9-1 ~]# mv test{1,2}