linux命令小总结
目录
文件管理(万物皆文件)
ls命令
备注:ls -l的诠释
文件类型
ls浏览后颜色表示
ln命令
查看文件方法
ll 文件名
stat 文件名/
find
文件名命名规则
创建文件
创建文件目录
文件、文件目录习题
通配符
拷贝文件/文件夹
剪切文件/文件夹(移动命令)
删除
管道符
移动习题
习题关于的bash脚本
编辑文件
其他命令
$()命令替换语法
重定向操作符
重定向习题
vi/vim编辑器
概念
命令模式下的快捷键
末行模式下的快捷键
阅读模式习题
末行模式习题
vim的配置文件
使用vim写C程序,编译执行
vim的异常
文件内容显示
阅读文件命令(6个)
阅读命令的习题
文件过滤命令(grep)
诠释/etc/passwd文件
切割显示表格文件(cut)
排序显示表格文件(sort)
排序显示文件去重(uniq)
替换(tr)
统计计算(wc)
其他命令
stat
file
Du
文件显示习题
查找文件
whereis
which
locate
find
find的时间范围问题
文件管理(万物皆文件)
ls命令
ls 显示当前路径下的文件或目录
anaconda-ks.cfg Documents Music Public Videos
Desktop Downloads Pictures Templates
ls -a(显示隐藏文件,比-A多了. ..)-A[显示隐藏文件]
#-a
. .bash_logout .config Downloads Pictures Templates
.. .bash_profile .cshrc .lesshst Public Videos
anaconda-ks.cfg .bashrc Desktop .local .ssh .Xauthority
.bash_history .cache Documents Music .tcshrc .xauthQM3ZP6
#-A
anaconda-ks.cfg .bashrc Desktop .local .ssh .Xauthority
.bash_history .cache Documents Music .tcshrc .xauthQM3ZP6
.bash_logout .config Downloads Pictures Templates
.bash_profile .cshrc .lesshst Public Videos
ls -l(查看文件详细信息)
[root@HeHe ~]# ls -l
total 4
-rw-------. 1 root root 1020 Oct 13 21:08 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Desktop
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Documents
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Downloads
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Music
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Pictures
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Public
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Templates
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Videos
ls -l services;ls -lh services(-h:human的意思,以k、Mb、G来显示文件大小)
[root@HeHe etc]# ls -lh services
-rw-r--r--. 1 root root 677K Jun 23 2020 services
ls -lS(按文件大小排序)
[root@HeHe etc]# ls -lS
total 1308
-rw-r--r--. 1 root root 692252 Jun 23 2020 services
-rw-r--r--. 1 root root 67454 Apr 22 2020 mime.types
-rw-r--r--. 1 root root 39011 Oct 13 21:13 ld.so.cache
-rw-r--r--. 1 root root 28974 Aug 10 2021 brltty.conf
…………………………………………………………
ls -lt(按文件修改时间排序)
[root@HeHe ~]# ls -lt
total 4
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Desktop
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Documents
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Downloads
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Music
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Pictures
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Public
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Templates
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Videos
-rw-------. 1 root root 1020 Oct 13 21:08 anaconda-ks.cfg
ls -ltr(逆序显示-r)
[root@HeHe ~]# ls -ltr
total 4
-rw-------. 1 root root 1020 Oct 13 21:08 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Videos
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Templates
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Public
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Pictures
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Music
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Downloads
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Documents
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Desktop
ls -ld /root(查看文件/文件目录详情)
[root@HeHe ~]# ls -ld /root
dr-xr-x---. 14 root root 4096 Oct 17 20:31 /root
备注:ls -l的诠释
d(文件类型) rwx(文件所以者的权限) r-x(文件所属组的文件) r-x(其他人的权限) .(扩展权限) 2(文件的硬链接次数) root(文件的所属用户) root(文件的所属用户组) 6(文件的大小) Oct 14 13:01(文件的修改时间) Videos(文件名)
第一个字符标识文件的类型
rwx是一组权限 如果没有权限则是-
第一组权限是文件所有者的权限
第二组权限是文件所属组的权限
第三组权限是其他人的权限
注:
创建一个文件时会同时创建一个文件的所属用户组;当一些文件权限不够时,可以把它们放到root所属用户组中可以提高一丢权限
当硬链接次数为0时表示被删除了
文件类型
-:普通文件
d(directory):目录文件
c:字符设备文件;串型设备---鼠标、键盘之类
b:块设备文件;(块文件)可供存储的接口设备,随机读写,硬盘
p:管道文件;用于进程之间通信
s:套接字文件;用于网络上的通信,可以启动一个程序来监听客户端的要求,客户端可以通过套接字来进行数据通信
l:链接文件(link);软链接又叫符号链接(类似于快捷方式)、硬链接(指针思想,都指向一个地址)
最后一个".":扩展权限(可以指定某些人拥有或不拥有某些权限)
备注:
为什么硬件中的文件是随机读写
因为延长硬件寿命,防止只在硬件的一个特定区域进行读写
ls浏览后颜色表示
白色:普通文件
蓝色:目录
红色:压缩包文件
黄色:设备文件
绿色:可执行文件
ln命令
in命令用于创建文件的链接(软、硬)
#创建软连接
ln -s 文件名 soft
[root@HeHe ~]# ln -s Music soft
[root@HeHe ~]# ls -l
total 4
……
lrwxrwxrwx. 1 root root 5 Oct 20 10:09 soft -> Music
……
#创建硬链接
ln -s 文件名 hard
[root@HeHe ~]# ln -s Videos hard
[root@HeHe ~]# ll
total 4
……
lrwxrwxrwx. 1 root root 6 Oct 20 10:28 hard -> Videos
……
lrwxrwxrwx. 1 root root 5 Oct 20 10:09 soft -> Music
……
查看文件方法
ll 文件名
ll其实是ls -l的别称,用法与ls类似
stat 文件名/
[root@HeHe ~]# stat Videos/File: Videos/Size: 6 Blocks: 0 IO Block: 4096 directory
Device: fd00h/64768d Inode: 52089897 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2024-10-25 18:31:28.335412531 +0800
Modify: 2024-10-14 13:01:43.495800887 +0800
Change: 2024-10-14 13:01:43.495800887 +0800Birth: 2024-10-14 13:01:43.495800887 +0800
find
find 用于搜索文件系统中满足特定条件的文件和目录
[root@HeHe ~]# ls
1 a Desktop Documents Music Public Templates
1.txt anaconda-ks.cfg dir1 Downloads Pictures soft Videos
[root@HeHe ~]# tree a
a
└── b└── c└── d└── e
[root@HeHe ~]# find a
a
a/b
a/b/c
a/b/c/d
a/b/c/d/e
-name表示文件名称 -mtime表示近期修改文件时间
[root@HeHe ~]# find -name "*.txt" -mtime -3
./myslef_test1/1a.txt
./myslef_test1/1b.txt
./myslef_test1/1c.txt
./myslef_test1/2a.txt
./myslef_test1/2b.txt
./myslef_test1/2c.txt
./myslef_test1/3a.txt
./myslef_test1/3b.txt
./myslef_test1/3c.txt
./1.txt
./myslef_test/1a.txt
./myslef_test/1b.txt
./myslef_test/1c.txt
./myslef_test/2a.txt
./myslef_test/2b.txt
./myslef_test/2c.txt
./myslef_test/3a.txt
./myslef_test/3b.txt
./myslef_test/3c.txt
文件名命名规则
不能用'/'当文件名(系统会分不出)
空格——下划线
长度:不得超过250字符
创建文件
#创建文件
touch命令作用
1)创建空文件文件
touch 文件名
2)修改文件的accesstime(访问时间)、modifytime(内容修改)、changetime(源数据修改时间)
touch 文件名 (修改所有三个时间)
touch -a 文件名(修改访问时间)
touch -m 文件名(内容修改)
修改备注:
Modify:内容修改
Change:源数据修改(无论修改那个时间源数据都会修改)
[root@HeHe ~]# stat anaconda-ks.cfgFile: anaconda-ks.cfgSize: 1020 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33855060 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2024-10-13 21:08:29.392039810 +0800
Modify: 2024-10-13 21:08:29.482058375 +0800
Change: 2024-10-13 21:08:29.482058375 +0800Birth: 2024-10-13 21:08:29.392039810 +0800# 修改atime同时ctime也会被修改
[root@HeHe ~]# touch -a anaconda-ks.cfg
[root@HeHe ~]# stat anaconda-ks.cfgFile: anaconda-ks.cfgSize: 1020 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33855060 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2024-10-25 18:39:30.378725567 +0800
Modify: 2024-10-13 21:08:29.482058375 +0800
Change: 2024-10-25 18:39:30.378725567 +0800Birth: 2024-10-13 21:08:29.392039810 +0800# 修改mtime 同时ctime也会修改
[root@HeHe ~]# touch -m anaconda-ks.cfg
[root@HeHe ~]# stat anaconda-ks.cfgFile: anaconda-ks.cfgSize: 1020 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33855060 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2024-10-25 18:39:30.378725567 +0800
Modify: 2024-10-25 18:39:57.717620146 +0800
Change: 2024-10-25 18:39:57.717620146 +0800Birth: 2024-10-13 21:08:29.392039810 +0800
创建文件目录
#创建文件目录
make directory
mkdir 目录文件夹名
#创建多层目录
mkdir -p a/b/c
#创建单层多个目录
mkdir a b c
备注:
[root@HeHe ~]# mkdir -p a/b/c/d
[root@HeHe ~]# ls
1 anaconda-ks.cfg Documents file2 hard Pictures soft
3.txt d Downloads gpasswd list.txt pssward Templates
4.txt Desktop e group Music Public test1
a dir1 file1 gshadow passwd shadow Videos
[root@HeHe ~]# tree a
a
└── b└── c└── d
3 directories, 0 files
文件、文件目录习题
1)创建文件,首字母为 a-e,第二个字符为 5-8的所有文件
2)创建 a-e 5个目录 每个目录里面 都一个文件1(只能写两条命令)
[root@HeHe ~]# mkdir {a..e}
[root@HeHe ~]# ls
a b d Documents e Music Public Templates
anaconda-ks.cfg c Desktop Downloads hard Pictures soft Videos
[root@HeHe ~]# touch {a..e}/1
[root@HeHe ~]# tree {a..e}
a
└── 1
b
└── 1
c
└── 1
d
└── 1
e
└── 1
0 directories, 5 files
[root@HeHe ~]#
3)删除/root目录中所有数字结尾的文件
[root@HeHe ~]# rm -rf [a-e]
#备注:创建用{}匹配用[]
通配符
#*表示任意字符任意长度
[root@HeHe ~]# ls -ld D*(ld查看文件目录)
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Desktop
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Documents
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Downloads
#{}表示一个数据范围{1..5}、字符范围{a..e}
[root@HeHe ~]# touch {1..10}(必须是两个点)
[root@HeHe ~]# ls
1 3 6 9 Desktop hard Public Videos
10 4 7 a Documents Music soft
2 5 8 anaconda-ks.cfg Downloads Pictures Templates
#{}可以当数组使用
[root@HeHe ~]# touch {1,2}{5,6}
[root@HeHe ~]# ls
1 16 26 5 8 anaconda-ks.cfg Downloads Pictures Templates
10 2 3 6 9 Desktop hard Public Videos
15 25 4 7 a Documents Music soft
#[] 表示一个匹配字符范围(一次匹配一个字符)
#匹配d、D、1、2开头的文件夹
#中括号-表示范围
#用于匹配,不能用于使用
[root@HeHe ~]# ls -ld [dD12]*
-rw-r--r--. 1 root root 0 Oct 20 11:16 1
-rw-r--r--. 1 root root 0 Oct 20 11:16 10
-rw-r--r--. 1 root root 0 Oct 20 11:20 15
-rw-r--r--. 1 root root 0 Oct 20 11:20 16
-rw-r--r--. 1 root root 0 Oct 20 11:16 2
-rw-r--r--. 1 root root 0 Oct 20 11:20 25
-rw-r--r--. 1 root root 0 Oct 20 11:20 26
-rw-r--r--. 1 root root 0 Oct 20 11:23 d
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Desktop
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Documents
#^表示取反,取反匹配
[root@HeHe ~]# ls -ld [^dD12]*
-rw-r--r--. 1 root root 0 Oct 20 11:16 3
-rw-r--r--. 1 root root 0 Oct 20 11:16 4
-rw-r--r--. 1 root root 0 Oct 20 11:16 5
-rw-r--r--. 1 root root 0 Oct 20 11:16 6
-rw-r--r--. 1 root root 0 Oct 20 11:16 7
-rw-r--r--. 1 root root 0 Oct 20 11:16 8
-rw-r--r--. 1 root root 0 Oct 20 11:16 9
drwxr-xr-x. 3 root root 15 Oct 20 11:06 a
-rw-------. 1 root root 1020 Oct 13 21:08 anaconda-ks.cfg
lrwxrwxrwx. 1 root root 6 Oct 20 10:28 hard -> Videos
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Music
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Pictures
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Public
lrwxrwxrwx. 1 root root 5 Oct 20 10:09 soft -> Music
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Templates
drwxr-xr-x. 2 root root 6 Oct 14 13:01 Videos
#?表示一个字符
[root@HeHe ~]# ls -l 1?
-rw-r--r--. 1 root root 0 Oct 20 11:30 10
-rw-r--r--. 1 root root 0 Oct 20 11:30 11
-rw-r--r--. 1 root root 0 Oct 20 11:30 12
-rw-r--r--. 1 root root 0 Oct 20 11:30 13
-rw-r--r--. 1 root root 0 Oct 20 11:30 14
-rw-r--r--. 1 root root 0 Oct 20 11:30 15
-rw-r--r--. 1 root root 0 Oct 20 11:30 16
-rw-r--r--. 1 root root 0 Oct 20 11:30 17
-rw-r--r--. 1 root root 0 Oct 20 11:30 18
-rw-r--r--. 1 root root 0 Oct 20 11:30 19
#备注:创建用{}匹配用[]
拷贝文件/文件夹
copy=>cp 备注: 当cp命令为多参数时(大于2个),最后一个参数必须是目录 #复制文件目录(要有-r选项,-r递归的意思) cp -r 文件夹名 复制后的文件夹 # -i覆盖前提示(在红帽的~/.bashrc配置文件中 默认cp命令为cp -i) # -f覆盖前不提示 cp -rf 文件夹名 复制后的文件夹
剪切文件/文件夹(移动命令)
move=>mv
两个作用:
1)
# 移动单个文件
[root@HeHe ~]# ls
1 2 3 4 5 a Desktop Documents Downloads Music Pictures Public Templates Videos
[root@HeHe ~]# mv 1 a/1
[root@HeHe ~]# ls
2 3 4 5 a Desktop Documents Downloads Music Pictures Public Templates Videos
[root@HeHe ~]# tree a
a
└── 1
# mv移动多个文件
[root@HeHe ~]# ls
200 3 4 5 a Desktop Documents Downloads Music Pictures Public Templates Videos
[root@HeHe ~]# mv 3 4 5 a
[root@HeHe ~]# tree a
a
├── 1
├── 3
├── 4
└── 5
2)mv还可以修改文件名
# 即重名名
[root@HeHe ~]# mv 2 200
[root@HeHe ~]# ls
200 anaconda-ks.cfg Documents hard Pictures soft Videos
a Desktop Downloads Music Public Templates
删除
删除文件
rm 文件名(可以删文件,删不了文件目录)
rm -f 文件名(备注:强制删除,删不了文件目录,只能删文件)#:强制删除,不做提醒,配合-r使用的话可以删除文件目录
rm -r 文件名/文件目录名(递归删除即层层删除)#只有rm -r可以删除文件目录
rm -fr 文件夹名/文件名(备注:既可以删文件也可删文件目录(-r作用),且不做提醒)
管道符
#以左边的命令作为参数传给右边执行
命令A | 命令2 | 命令3 ……
移动习题
课堂练习
1)创建5个普通文件a~e再创建目录1
2)将a~c移动到目录1中
3)将d~e复制到目录1中
4)再将d~e移动并覆盖掉目录1中d、e文件,且不提示
#1)
[root@HeHe ~]# touch {a..e}
[root@HeHe ~]# mkdir 1
[root@HeHe ~]# ls
1 b Desktop e Pictures Templates
a c Documents hard Public Videos
anaconda-ks.cfg d Downloads Music soft
#2)
[root@HeHe ~]# mv {a..c} 1
[root@HeHe ~]# ls
1 d Documents e Music Public Templates
anaconda-ks.cfg Desktop Downloads hard Pictures soft Videos
[root@HeHe ~]# tree 1
1
├── a
├── b
└── c
#3)
[root@HeHe ~]# cp {d..e} 1
[root@HeHe ~]# tree 1
1
├── a
├── b
├── c
├── d
└── e
0 directories, 5 files
[root@HeHe ~]# ls
1 d Documents e Music Public Templates
anaconda-ks.cfg Desktop Downloads hard Pictures soft Videos
#4)
[root@HeHe 1]# cat {a..e}
1
2
3
4
5
[root@HeHe 1]# cd ~
[root@HeHe ~]# echo 44 > d
[root@HeHe ~]# echo 55 > e
[root@HeHe ~]# cat d e
44
55
[root@HeHe ~]# mv -f {d,e} ~/1
[root@HeHe ~]# tree 1
1
├── a
├── b
├── c
├── d
└── e
0 directories, 5 files
[root@HeHe ~]# cd 1
[root@HeHe 1]# cat {a..e}
1
2
3
44
55
[root@HeHe 1]# cd /root
[root@HeHe ~]# ls
1 a Desktop Documents Music Public Templates
1.txt anaconda-ks.cfg dir1 Downloads Pictures soft Videos
#备注:
1)#使用脚本再运行
可以使用 find 命令来检查目标目录中是否存在同名文件,然后再决定是否覆盖:
#使用第一种方法
[root@HeHe ~]# cat f
66
[root@HeHe ~]# ./script.sh
文件 'f' 已存在,将移动此文件
[root@HeHe 1]# cat {a..f}
1
22
33
44
55
66
#使用simplify way
[root@HeHe ~]# ./script.sh
[root@HeHe ~]# ls
1 Desktop find_achivement_mv.sh passwd_copy soft
1.txt dir1 Music Pictures Templates
a Documents myslef_test Public test.c
anaconda-ks.cfg Downloads myslef_test1 script.sh Videos
[root@HeHe ~]# cd 1
[root@HeHe 1]# cat c d
33
44
2)#还可以使用关系符&& || 结合匹配[]来实现
习题关于的bash脚本
#!/bin/bash
# 目标目录和源文件
target_directory="/root/1"
source_file="/root/f"
filename=$(basename "$source_file")
# 使用 find 命令检查目标目录中是否存在同名文件
if find "$target_directory" -maxdepth 1 -type f -name "$filename" > /dev/null; thenecho "文件 '$filename' 已存在,将移动此文件"# 执行覆盖操作,例如使用 cp 或 mv 命令mv -f "$source_file" "$target_directory/$filename"
elseecho "文件 '$filename' 不存在,将被复制。"# 执行复制操作,不覆盖现有文件cp "$source_file" "$target_directory/$filename"
fi
#simplify way
每个 if 语句都使用 -e 来检查 /path/to/directory1/d 和 /path/to/directory1/e 是否存在。>如果文件存在,mv 命令将执行,将 ~/d 和 ~/e 移动到 /path/to/directory1/ 目录,并覆盖任何>同名文件(由于使用了 -f 选项)
if [ -e /root/b ]; thenmv -f ~/b /root/1
fi
if [ -e /root/c ]; thenmv -f ~/c /root/1
fi
#备注:创建、执行方式在Ai_linux.md文件中有详情
首项:vim 文件名
其次:编写好脚本
其次1:赋予执行能力" chmod +x 文件名" 给予之后它会变绿色(用的是MobaXterm)
最后:./文件名 就可以运行脚本了,注意没有空格隔开
编辑文件
其他命令
cat 文件名 (查看)
文件名要重新创建
echo 文本 >>或> 文件名
$()的作用是将括号内的字符串转会成命令来执行
它允许你将一个命令的输出作为另一个命令的输入
$()命令替换语法
实例
1)
[root@HeHe home]# ls
1a.text 1c.text 2b.text 3a.text 3c.text file1 redhat1
1b.text 2a.text 2c.text 3b.text dir1 passwd_copy
[root@HeHe home]# wc -l $(ls *.text)
0 1a.text
0 1b.text
0 1c.text
0 2a.text
0 2b.text
0 2c.text
0 3a.text
0 3b.text
0 3c.text
0 total
2)
[root@NLCSA2 ~]# $(<1.txt)
total 8
-rw-r--r--. 1 root root 0 Oct 20 00:02 100
drwxr-xr-x. 2 root root 39 Oct 20 00:02 1test
-rw-r--r--. 1 root root 6 Oct 20 00:42 1.txt
-rw-r--r--. 1 root root 0 Oct 19 23:37 200
-rw-r--r--. 1 root root 0 Oct 20 00:02 300
………………
# 2)的备注:1.txt中内容是 ls -l 首先通过<将ls -l这个字符串读取出来,然后再使用$()将字符串转化为命令执行
重定向操作符
其可以配合任何命令使用
#输出重定向
> :清空指定的文件,再将输入的内容写到指定的文件中#注意要写具体的文件路径(绝对路径,即从根目录开始),即使此文件的所属目录,在当前主机所在目录之下也要写绝对路劲(即还要再进入主机所在的当前文件目录一次)
>>:追加
备注:# 如果要将标准错误输出进行重定向,>前面的2是不能省略的。
[root@HeHe ~]# ls -l aaaaaaaa > error.txt
ls: cannot access 'aaaaaaaa': No such file or directory
[root@HeHe ~]# ls -l aaaaaaaa 2> error.txt
[root@HeHe ~]# cat error.txt
ls: cannot access 'aaaaaaaa': No such file or directory
#输入重定向
< :
#结束标识符
<< :用来定义什么时候什么时候结束,一般配合 输出重定向>或>>使用
[root@HeHe ~]# cat > 1.txt << endof
> 11
> 22
> endof
[root@HeHe ~]# cat 1.txt
11
22
[root@HeHe ~]# cat >> 1.txt << eof
> haha
> hehe
> eof
[root@HeHe ~]# cat 1.txt
11
22
haha
hehe
使用演示
写
echo 文本 >>或>或< 文件名
查看
cat 文件名 >>或>或<文件名
#备注:
1)默认情况下>号前没有数字默认是频道1
2)在重定向符前加上&符号:则把频道1、2的文本劫持到重定向后面的
3)实践
# 将stdout和stderr全部重定向到 1.txt中(即重定向到相同的位置)
[root@server ~]# ls /home/ /aaa >list.txt 2>&1
[root@HeHe ~]# ls /home /aaa &> 1.txt
[root@HeHe ~]# cat 1.txt
ls: cannot access '/aaa': No such file or directory
/home:
redhat
# /dev/null:相当于垃圾箱,将错误信息抛弃,只展示正确信息
[root@HeHe ~]# ls /home /aaa 2> /dev/null
/home:
redhat
# 将stderr重定向到stdout的重定向为止
[root@HeHe ~]# ls /home/ /aaa 1>list.txt 2>&1
[root@HeHe ~]# cat list.txt
ls: cannot access '/aaa': No such file or directory
/home/:
redhat
重定向习题
1.使用 cat命令和重定向 将/etc/gshadow文件复制到家目录中gshadow_copy
2.再将/etc/group复制到家目录中名字叫做group_copy
3.将家目录中gshadow_copy和group_copy合并为4.txt1)
[root@HeHe ~]# cat /etc/gshadow > ./gshadow_copy
[root@HeHe ~]# ls
1 dir1 find_achivement_mv.sh myslef_test1 Public test.tr
1.txt Documents grep.test passwd_copy script.sh Videos
a Downloads gshadow_copy passwd_greptest soft
anaconda-ks.cfg file.ASCII hard passwd_mhtest Templates
bash_test file.empty Music passwd_rdtest test.c
Desktop file.UTF-8 myslef_test Pictures test.py
2)
[root@HeHe ~]# cp /etc/passwd ./group_copy
[root@HeHe ~]# ls
1 dir1 find_achivement_mv.sh myslef_test Pictures test.py
1.txt Documents grep.test myslef_test1 Public test.tr
a Downloads group_copy passwd_copy script.sh Videos
anaconda-ks.cfg file.ASCII gshadow_copy passwd_greptest soft
bash_test file.empty hard passwd_mhtest Templates
Desktop file.UTF-8 Music passwd_rdtest test.c
3)
[root@HeHe ~]# mkdir 4.txt
[root@HeHe ~]# mv gshadow_copy group_copy 4.txt
[root@HeHe ~]# ls
1 Desktop file.UTF-8 myslef_test1 Public test.tr
1.txt dir1 find_achivement_mv.sh passwd_copy script.sh Videos
4.txt Documents grep.test passwd_greptest soft
a Downloads hard passwd_mhtest Templates
anaconda-ks.cfg file.ASCII Music passwd_rdtest test.c
bash_test file.empty myslef_test Pictures test.py
vi/vim编辑器
概念
-
命令模式:也成为了阅读模式,可以控制光标移动,对文本进行查看、删除、复制粘贴等操作(默认)
-
编辑模式:也称为插入模式,可以对文本进行编辑
-
末行模式:保存、退出、设置编辑环境
-
进入的顺序
-
刚打开文件后进入的为命令模式(默认)
-
命令模式点击i'键进入输入模式,点击Esc返回命令模式
-
命令模式中点击冒号进入末行模式,点击Esc返回
-
输入模式与末行模式不可以相互进入
-
ctrl + c:结束当前命令
ctrl + z:挂起一个进程
挂起一个进程意味着它会暂时停止执行,但不会终止。这个进程会从前台移动到后台,并进入停止(stopped)状态
命令模式下的快捷键
#命令模式下的快捷键
使用vim打开一个文件
[root@HeHe ~]# vim passwd
u————撤销
#光标移动
$————回到行尾
^————回到行首
G————跳转到的最后一行的行首
gg————跳转到文档的第一行行首
n 和 G/gg————跳转到第几行行首
n 和 ↑/↓/←/→————向上/下/左/右移动n个字符
w————向文本后方跳转,一次跳转一个单词(其实是按符号与非符号来跳转)
b————向文本前方跳转,一次跳转一个单词(其实是按符号与非符号来跳转)
#删除
dd————删除光标所在行
ndd————从光标向下删除n行
d 和 ^————从光标位置删到行首
d 和 $————从光标位置删到行尾
#复制粘贴
yy————复制光标行
nyy————向下赋值n行
p————从光标位置向下粘贴
P————从光标位置向上粘贴
#从命令模式 进入 编辑模式(输入模式)
i————在光标模式进入编辑
I————回到光标所在的行首进入编辑
o————向下换行并进入编辑
O————向上换行并进入编辑
s————删除光标所在字符并进入编辑模式
S————删除光标所在行并请入编辑模式
末行模式下的快捷键
#末行模式(类似于命令行)
#关于退出:
按进入:或者/进入末行模式
按esc退出末行模式回到命令模式
:q————未做修改退出编辑器
:q!————放弃保存退出(使用!强制退出)
:wq————保存退出
:wq!————强制保存退出
:w 路径————写(保存的路劲)
#关于查找搜索:
:n1,n2 s/old/new/g
n1————搜索的起始行
n2————搜索的末尾行
s————搜索
old————要搜索的目标
new————要替换的单词
%————表示全文
备注:不指定范围(可以不带访问),表示从光标所在行进行搜索
#关于其他命令:
:r /etc/file————在当前文件光标位置处读入其他文件
:g/word/d————删除全文中的word
:n1,n2 d————— 删除 n1到n2行
:n1,n2 co n3——————将n1到n2的内容复制到n3行
:set nu————开启行号nu(number)
:set nonu————关闭行号
例
:1,10 d————删除1到10行内容;备注(可以用全称delete)
:1,2 co 10————赋值第一行到第二行复制到第十行之后
阅读模式习题
1.将/etc/passwd 复制到 家目录 名字还叫passwd_rdtest
2.使用vim打开passwd
3.开启行号
4.将 第1行 删除
5.将30行以后的内容删掉
6.复制10-20行的内容
7.将赋值的内容粘贴到 第30行往后
1)
[root@HeHe ~]# cp /etc/passwd ./passwd_testrdm
2)
[root@HeHe ~]# vim passwd_testrdm
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
………………
3)
:set nu
4)
1dd
1 bin:x:1:1:bin:/bin:/sbin/nologin
2 daemon:x:2:2:daemon:/sbin:/sbin/nologin
3 adm:x:3:4:adm:/var/adm:/sbin/nologin
………………
5)
30 G/gg
5 dd
6)、7)
way1:
9gg
11yy
30G
p
way2:
10G
V(进入可视模式)
10j(复制十行)
30gg
p
末行模式习题
1.复制etc中的passwd文件 复制到家目录中 名字叫做 passwd_mhtest
2.使用vim编辑passwd_mhtest 打开行号从第2行开始删到第10行
3.替换文件中所有的root字符串为xxxx
4.替换完成后搜索 xxxx
1)
[root@HeHe ~]# cp /etc/passwd ./passwd_rdtest
2)
[root@HeHe ~]# vim passwd_mhtest
2G
8dd
3)
:% s/root/xxxx/g
4)
/xxxx 单纯的搜索xxxx(使其高亮显示)
?xxxx 文件末尾开始反向搜索
vim的配置文件
#进入vim配置文件
#/etc/vimrc————是全局配置文件 所有用户的配置文件
#~/.vimrc /root/.vimrc————用户独享配置文件
没有文件时vim加文件名会自动创建一个新文件
更改tab空格(要退出再进入才会生效)
set tabstop=4——————tabstop决定tab键的显示效果
set softtabstop=1————softtabstop决定按下tab键空几个空格,最大值不能大于tabstop
set shiftwidth=2————=2shiftwidth决定自动缩进的宽度
set backspace=2————backspace=2表示删除键可以正常在编辑模式下删除
set nu————打开时自动显示行号
使用vim写C程序,编译执行
1)配置镜像源
2)下载gcc编辑器
3)正常写语言
4)gcc 文件名————运行
[root@server ~]# vim test.c
# 输入代码
#include <stdio.h>
int main(void)
{int i,j;for(i=1;i<10;i++)printf("%d\t",i);printf("\n");for(i=1;i<66;i++)printf("-"); printf("\n");for(i=1;i<10;i++){for(j=1;j<10;j++)if(i>=j)printf("%d\t",i*j);printf("\n");}
}[root@server ~]# gcc test.c # 执行编译,若有错误需要修改后重新编译
[root@server ~]# ./a.out # 运行查看结果
1 2 3 4 5 6 7 8 9
-----------------------------------------------------------------
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
vim的异常
备注:没有正常退出的情况当我们修改某个文件的时候,并不是直接修改文件,而是将修改的内容保存成一个xxxx.swp,当我们;wq :q! :wq!退出的时候vim会将xxxx.swp#如果出现如下情况:
发现交换文件 ".xxxx.swp"所有者: root 日期: 日 10月 20 18:21:08 2024文件名: ~root/.vimrc修改过: 否用户名: root 主机名: HeHe进程 ID: 8005 (STILL RUNNING)
正在打开文件 ".xxxx"日期: 日 10月 20 18:17:57 2024
(1) Another program may be editing the same file. If this is the case,be careful not to end up with two different instances of the samefile when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.如果是这样,请用 ":recover" 或 "vim -r .vimrc"恢复修改的内容 (请见 ":help recovery")。如果你已经进行了恢复,请删除交换文件 ".vimrc.swp"以避免再看到此消息。
交换文件 ".xxxx.swp" 已存在!
以只读方式打开([O]), 直接编辑((E)), 恢复((R)), 退出((Q)), 中止((A)):
如果想要.swp文件中的修改,我们可以R,退出,删除.swp文件 如果不想要.swp文件中的修改,我们可以E,退出,删除.swp文件
文件内容显示
阅读文件命令(6个)
1)cat 看一两百行的短小文件
cat -参数
cat -n 文件名————查看文件并带行号(包括空行)
cat -b 文件名————查看文件并给 非空行 带行号(空行不给带行号)
2)tac————cat的倒置观看
倒叙阅读文件,参数和cat一样
3)tail 适合看日志文件内容(从尾部看起);
原因:可以实时观看日志
tail -n 20 文件名(Catalina.out)————查看最新的n行内容
tail -n 20 -f 文件名(Catalina.out)————实时查看最新的20行内容
备注:系统日志保存在var/log;var/log/message记录了系统中的日志
4)head
head -10 文件名————看前10行文件
最常用的场景是与其他命令配合
[root@HeHe ~]# ls -lS /etc/ | head -3
total 1308
-rw-r--r--. 1 root root 692252 Jun 23 2020 services
-rw-r--r--. 1 root root 67454 Apr 22 2020 mime.types
#| ————管道符,将左边的结果作为参数传给右边(一行可以使用多个管道符)如例题
5)more/less 适合观看大型文档,看到哪释放到哪,并且支持翻页查看
less命令相当于more命令的加强版
more /var/log/message
上下按钮可以翻页,并且页面会显示阅读进度
less /var/log/message
上下按钮可显示下一行;f(forword)向下翻页,b(back)向上翻页;pageup/pagedown可以翻页,不显示进度,读完会显示end
按q退出
阅读命令的习题
1.查看/etc/passwd 10-20行内容
2.查看/etc/passwd/中20-10行内容(即逆序显示)
1)
[root@HeHe ~]# head -20 /etc/passwd | tail -10
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
2)
[root@HeHe ~]# head -20 /etc/passwd | tail -10 |tac
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
文件过滤命令(grep)
定义:显示文件/字符串中,包含字符串(数字、字符、单词)指定的行,不包含的行内容会被过滤
#注:是过滤文本内容的行号
grep -参数 查找条件 文件名(根据情况加路劲)
#-n开启行号
#只显示包含root行,"root"中的""可以不写,但是推荐写上(高亮显示)
[root@HeHe ~]# grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
#只显示包含root开头行
[root@HeHe ~]# grep -n "^root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
#只显示以r、b、c开头的行
[root@HeHe ~]# grep -n "^[rbc]" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
19:colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
20:rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
22:clevis:x:995:992:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
29:cockpit-ws:x:985:984:User for cockpit web service:/nonexisting:/sbin/nologin
30:cockpit-wsinstance:x:984:983:User for cockpit-ws instances:/nonexisting:/sbin/nologin
33:chrony:x:982:981:chrony system user:/var/lib/chrony:/sbin/nologin
36:redhat1:x:1000:1000:Redhat1:/home/redhat1:/bin/bash
#-c————文件中匹配的显示行数的总数
[root@HeHe ~]# grep -c "^root" /etc/passwd
1
[root@HeHe ~]# grep -c "root" /etc/passwd
2
#-v————反选 :grep -v "^[rbc]" /etc/passwd
等价于 "^[^abr]"(只不过"^[^abr]"高亮显示)
-v:
[root@HeHe ~]# grep -v "^[rbc]" /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
………………
"^[^abr]":
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
………………
#-i————忽略大小写(高亮显示)
[root@HeHe ~]# grep -i "a" grep.test
aad
Adfr
#-An 搜索时显示匹配到的那一行以及下n行(如果两行的范围小于n的话以后一行显示为准)
[root@HeHe ~]# grep -n -A3 "root" ./passwd_greptest
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3:root/hahahahahatest
4-daemon:x:2:2:daemon:/sbin:/sbin/nologin
5-adm:x:3:4:adm:/var/adm:/sbin/nologin
6-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
--
11:operator:x:11:0:operator:/root:/sbin/nologin
12-games:x:12:100:games:/usr/games:/sbin/nologin
13-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
14-nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
#-Bn 搜索时显示匹配到的那一行以及上n行
[root@HeHe ~]# grep -n -B1 "root" ./passwd_greptest
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3:root/hahahahahatest
--
10-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11:operator:x:11:0:operator:/root:/sbin/nologin
#-Cn 搜索时显示匹配到的那一行以及上下n行
[root@HeHe ~]# grep -n -C1 "root" ./passwd_greptest
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3:root/hahahahahatest
4-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
10-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11:operator:x:11:0:operator:/root:/sbin/nologin
12-games:x:12:100:games:/usr/games:/sbin/nologin
#-r递归过滤(可以和-n合起来用
[root@HeHe ~]# grep -nr "root" ./passwd_greptest
1:root:x:0:0:root:/root:/bin/bash
3:root/hahahahahatest
11:operator:x:11:0:operator:/root:/sbin/nologin
#配合管道符的使用
ls -l /etc/ |grep "^d"
[root@HeHe ~]# ls -l /etc/ |grep "^d"
drwxr-xr-x. 3 root root 28 Oct 13 21:03 accountsservice
drwxr-xr-x. 3 root root 65 Oct 13 21:04 alsa
drwxr-xr-x. 2 root root 4096 Oct 13 21:04 alternatives
drwxr-x---. 4 root root 100 Oct 13 21:03 audit
drwxr-xr-x. 3 root root 4096 Oct 13 21:07 authselect
…………………………
诠释/etc/passwd文件
bash————命令解释器,Bash的全称是“Bourne Again SHell”,它是由Brian Fox为GNU项目编写的,是Bourne Shell(sh)的一个自由软件替代品。Bash是大多数Linux发行版默认的命令行解释器。
账户名:密码代号x:UID:GID:注释:家目录:SHELL
# 这个文件是关于系统中所有账户的信息文件
# root:x:0:0:张三:18012345678 :/root:/bin/bash
root:账户名
x:账户的密码占位符
0:是账户的uid(user id)
0:是用户的gid(group id)
root:当前账户的描述信息通常会写入账户的持有人以及他的联系方式
/root:当前账户的家目录
/bin/bash:当前账户的命令解释器
# 普通用的id从1000开始往后创建
# root用户的id是0
# (0,1000)这个范围的账户是系统账户(伪账户),是为了让某些程序运行时能看到账户归属人而存在的
root | x | 0 | 0 | root | /root | /bin/bash |
---|---|---|---|---|---|---|
bin | x | 1 | 1 | bin | /bin | /sbin/nologin |
切割显示表格文件(cut)
cut -d"分隔符" -f列数字 文件名
排序显示表格文件(sort)
sort可以将表格中的某一列以(字符串形式)提取出来,再根据大小排序出来,默认以字符串形式输出
#字符串比较大小:一个一个字符进行比较
sort -t"分隔符" -k列数字 文件名
#注意观察第三(uid)与第四(gid)数值的排序
[root@HeHe ~]# sort -t: -k3 ./passwd_greptest
root/hahahahahatest
root:x:0:0:root:/root:/bin/bash
redhat1:x:1000:1000:Redhat1:/home/redhat1:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#-n————以数值形式输出(注:英文字母会被识别为0)
[root@HeHe ~]# sort -t: -k3 -n ./passwd_greptest
root/hahahahahatest
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
--
sort可以将表格中的某一列以(字符串形式)提取出来,再根据大小排序出来,默认以字符串形式输出
#-r————以逆序形式显示输出
[root@HeHe ~]# sort -u -t: -k3 ./passwd_greptest
root/hahahahahatest
root:x:0:0:root:/root:/bin/bash
redhat1:x:1000:1000:Redhat1:/home/redhat1:/bin/bash
[root@HeHe ~]# sort -u -r -t: -k3 ./passwd_greptest
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
#-u————去重复输出(uniq)
[root@HeHe ~]# cat 1.txt
11
11
22
22
haha
hehe
hahe
hah8
5151
5252
4242
4141
1
[root@HeHe ~]# sort -un 1.txt
haha
1
11
22
4141
4242
5151
5252
ai解疑:
因为使用-n排序时,这三个(haha、hehe、hah8)字符串在数值排序中被视为 0
另外可以使用 sort 命令的 -k 选项来指定一个自定义的比较键,或者使用 awk 命令来分离数字和非数字行,然后分别排序
awk 'BEGIN {FS=""; OFS=""} {if($1 ~ /^[0-9]+$/) print $1; else print $1}' 1.txt | sort -u -n -k1,1
验证:
[root@HeHe ~]# sort -u -n -t: -k2 ./passwd_greptest
root:x:0:0:root:/root:/bin/bash
排序显示文件去重(uniq)
uniq它只会把连续重复的字符进行去重(与压缩算法类似,无损压缩)
uniq -参数 文件名
#uniq 文本
[root@HeHe ~]# cat 1.txt
11
11
22
22
haha
hehe
5151
5252
4242
4141
[root@HeHe ~]# uniq 1.txt
11
22
haha
hehe
5151
5252
4242
4141
替换(tr)
tr -参数 替换内容 新内容
#参数
-c :反选设定字符,符合 “替换内容” 的部份不做处理,不符合的剩余部份才进行转换
-d :删除指令字符
-s :缩减连续重复的字符成指定的单个字符
#一般配合管道符使用
cat 文本 | tr 0-1 a-b(要连续的) ————将文本中的0替换成a,1替换成b
[root@HeHe ~]# cat > test.tr << eof
> 12
> 34
> eof
[root@HeHe ~]# cat test.tr | tr 1-4 a-d
ab
cd
如果要替换文本的内容大于替换范围则用范围最大的那个数来替换到文本中
[root@HeHe ~]# cat test.tr | tr 1-4 a-c
ab
cc
注:原文件中的没有被更改
[root@HeHe ~]# cat test.tr
12
34
统计计算(wc)
wc:专门用于文件中统计 命令。可以用来统计一个文件,多少字节,多少字符,多少行。(字符小于等于字节,Unicode中的UTF-8中的一个中文字三个字节)
wc -参数 文件名
# 统计行数
[root@HeHe ~]# wc -l 1.txt
13 1.txt
# 统计字符数
[root@HeHe ~]# wc -m 1.txt
54 1.txt
# 统计字节数
[root@HeHe ~]# wc -c 1.txt
54 1.txt
可以连写:
[root@HeHe ~]# wc -lmc 1.txt
13 54 54 1.txt
不带参数的话中间那个指的是单词数
[root@HeHe ~]# wc 1.txt
13 13 54 1.txt
其他命令
stat
stat 文件名或者文件目录/
Linux中1个块等于512字节
IO块:8个块,大小为4096字节
#查看一个2字节的文件对硬盘空间大小使用,
#如果文件大小超过8个块(4096字节),它所占据的硬盘块数会再加8个块
[root@HeHe ~]# stat 1.txt |head -4File: 1.txtSize: 54 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 34762532 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
#权限部分诠释
-rwx r-- r--110 100 1006 4 4
file
#file查看文件的类型
#在Linux中文件扩展名不能起到判断文件类型作用
#空文件 empty
[root@HeHe ~]# cat file.empty
[root@HeHe ~]# file file.empty
file.empty: very short file (no magic)
#写ASCII码就是ASCII码类型
[root@HeHe ~]# file file.ASCII
file.ASCII: ASCII text
[root@HeHe ~]# cat file.ASCII
1 22 dew wqe
#写入中文就是万国码中的UTF-8文件
[root@HeHe ~]# cat file.UTF-8
哈哈呵呵
[root@HeHe ~]# file file.UTF-8
file.UTF-8: UTF-8 Unicode text
Du
#查看文件的空间占用情况
du 参数 文件名
# -a 查看当前文件夹中所有子孙文件 磁盘占用情况 -h(human)优化显示效果
[root@HeHe ~]# du -ah 1
4.0K 1/b
4.0K 1/c
4.0K 1/a
4.0K 1/d
4.0K 1/e
4.0K 1/f
24K 1
#-s查看目录的磁盘占用情况
[root@HeHe ~]# du -sh
109M .
[root@HeHe ~]# du -sh 1
24K 1
文件显示习题
1:使用阅读文件命令和管道符1.查看/etc/passwd 10-20行内容
2.查看/etc/passwd/中20-10行内容(即逆序显示10-20行)
1)
[root@HeHe ~]# head -20 /etc/passwd | tail -10
2)
[root@HeHe ~]# head -20 /etc/passwd | tail -10 |tac
2:1.使用stat命令查看/etc/passwd文件 并只显示结果的前5行
2. 使用sort命令对/etc/passwd内容进行排序 使用第3列数据 并根据数值结果进行排序
3. 统计/etc/passwd文件中多少行 有多少字符 有多少字节
4.提起/etc/passwd文件中的第7列
1)
[root@HeHe ~]# stat /etc/passwd | head -5
2)
[root@HeHe ~]# sort -t: -k3 -n /etc/passwd
3)
[root@HeHe ~]# wc -lmc /etc/passwd
4)
[root@HeHe ~]# cut -d: -f7 /etc/passwd
查找文件
whereis
#只能查看命令(可执行文件)所在的目录以及帮助手册位置
[root@HeHe /]# whereis passwd_copy
passwd_copy:
[root@HeHe /]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
[root@HeHe /]# whereis passwd_copy
passwd_copy:
[root@HeHe /]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1ossl.gz /usr/share/man/man1/passwd.1.gz
[root@HeHe /]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
[root@HeHe /]# whereis ssh
ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
which
#用与查看命令的存储位置(路劲),当命令是一个别名的时候,可以看到这个别名真实的命令
[root@HeHe /]# which ls
alias ls='ls --color=auto'/usr/bin/ls
#alias是别名的意思(Python中是as)
[root@HeHe /]# which cd
/usr/bin/cd
[root@HeHe /]# which pwd
/usr/bin/pwd
[root@HeHe /]# which ssh
/usr/bin/ssh
[root@HeHe ~]# which cp
alias cp='cp -i'/usr/bin/cp
#可以自定义一个操作(命令的复合体)然后起别名后直接操作它
[root@HeHe /]# alias myls=' ls -lhSa |head -5'
[root@HeHe /]# myls
total 36K
drwxr-xr-x. 132 root root 8.0K Oct 29 10:22 etc
dr-xr-xr-x. 5 root root 4.0K Oct 13 21:13 boot
dr-xr-x---. 20 root root 4.0K Oct 28 21:20 root
drwxrwxrwt. 24 root root 4.0K Oct 29 10:23 tmp
locate
#其实就相当与一个数据库,查询速度最快的命令,相当与已经创建了一个表格
#只要数据库中有该文件,那么它会在毫秒级别的反应,将文件的路劲信息输出到屏幕上
#缺点:必须定时将系统中新增的文件录入数据库
#locate 文件名
[root@HeHe /]# lacate passwd_copy
bash: lacate: command not found...
[root@HeHe /]# sudo updatedb ————手动更新数据库
[root@HeHe /]#
[root@HeHe /]# locate passwd_copy
/home/passwd_copy
/root/passwd_copy
find
#用于查询文件的保存位置(路径)
find 要查找的目录 选项 参数
1)文件名查找
#-name————通过文件名来查找文件
[root@HeHe /]# find -name passwd_copy
./root/passwd_copy
./home/passwd_copy
#在~中查找passwd——copy
[root@HeHe /]# find /root -name passwd_copy
/root/passwd_copy
[root@HeHe /]# find ~ -name passwd_copy
/root/passwd_copy
#-iname————忽略大小写查找(不是-i,-iname是个整体)
[root@HeHe home]# find -iname passwd
./Passwd
./passwd
./pasSWD
2)时间查找
#-itime(修改时间)、-ctime(创建时间)、atime(访问时间) +(天数以外)、-(多少天以内) 数值(天数)
不写时间:假设天数为5,表示5到6天————5天这一天
#创建时间在10天以前的
[root@HeHe ~]# find ~ -ctime +10
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
#创建时间在2天以内的
[root@HeHe ~]# find ~ -ctime -2
/root
/root/.ssh
/root/.cache/mozilla/firefox/l1fbopwh.default-default
/root/.cache/mozilla/firefox/l1fbopwh.default-default/cache2
/root/.cache/mozilla/firefox/l1fbopwh.default-default/cache2/entries
3)大小查找 -size
查找大于0字节小于10字节文件
#可以和逻辑运算符配合使用
-a————表示and; 与||相等
-o————表示or ; 与&&相等
-n————表示not,取反; 与!相等
优先级:与>或>非
# 查找大小 小于 10block(512bytes)的文件
[root@HeHe ~]# find ~ -size +10000b
/root/.cache/mozilla/firefox/l1fbopwh.default-default/startupCache/scriptCache-current.bin
/root/.mozilla/firefox/l1fbopwh.default-default/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.sqlite
/root/.mozilla/firefox/l1fbopwh.default-default/places.sqlite
/root/.mozilla/firefox/l1fbopwh.default-default/favicons.sqlite
#查找尺寸大于0字节 小于10字节 文件 -a 表示与 and
[root@HeHe /]# find ~/ -size -10c -a -size +0c
/root/.ssh
/root/.cache/ibus
/root/.cache/evolution/addressbook/trash
………………
[root@HeHe /]# find ~/ -size -10c || -size +0c
/root/.ssh
/root/.cache/ibus
/root/.cache/evolution/addressbook/trash
/root/.cache/evolution/calendar/trash
…………
#查找小于1g并且不在一天内创建的文件
[root@HeHe ~]# find / -not -size +1G -a -mtime -2 | head -5
/
/dev
/dev/dull
/dev/vcsa6
/dev/vcsu6
[root@HeHe ~]# find / ! -size +1G -a -mtime -2 | head -5
/
/dev
/dev/dull
/dev/vcsa6
/dev/vcsu6
4)文件类型查找-type
-type f ————文件
[root@HeHe ~]# find /home -type f -iname passwd
/home/Passwd
/home/passwd
/home/pasSWD
-type d ————目录
[root@HeHe ~]# find /home -type d -iname passwd
/home/PASSWD
-type l ————查看软、硬链接
[root@HeHe ~]# find -type l
./Music/Music
./soft
./hard
#串行文件:-type c 套接字文件:-type s 管道文件:-type p
5)查找文件权限为rw-r--r--的文件
[root@HeHe ~]# find ./ -perm 644 |tail -5
./.mozilla/firefox/l1fbopwh.default-default/favicons.sqlite-wal
./.mozilla/firefox/installs.ini
./.mozilla/firefox/profiles.ini
./passwd_greptest
./1.txt
[root@HeHe ~]# ll ./passwd_greptest
-rw-r--r--. 1 root root 2062 Oct 28 18:55 ./passwd_greptest
#这样写是不对滴
[root@HeHe ~]# find ./ -perm wx-r--r-- |tail -5
find: invalid mode ‘wx-r--r--’
find的时间范围问题
-
-5:代表 5 天内修改的文件。
-
5:代表前 5~6 天那一天修改的文件。
-
+5:代表 6 天前修改的文件。