1.Linux 的哲学思想
1、一切皆文件;
2、单一目的的[小程序]
3、组合小程序完成复杂任务;
4、文本文件保存配置信息;
5、尽量避免捕获用户接口;
6、提供机制,而非策略。
localhost #主机名
~ #家目录
# #管理员用户
$ #普通用户
root #root的家目录
opt #opt目录
shell定义:
执行特定任务的一串代码
shell命令:
1先判断 他是别名,内部命令 还是 外部命令
2如果是 内部命令 直接在bash中执行
3.如果是外部命令 先看 hash 表 表中有 先找表 表中的路径找不到直接报错
4.表中没有 去找
/usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/root/bin
5.找到 执行 找不到 报错
type命令区分内外部命令
[root@localhost /]# type cd
cd 是 shell 内嵌 //内嵌代表内部命令
[root@test1 /]# type -a ls
ls 是 `ls --color=auto' 的别名 //别名代表外部命令
ls 是 /usr/bin/ls //外部命令会有程序路径
[root@localhost /]# whereis ls //whereis 可以查找命令具体的位置所在
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
2.命令行格式
命令字 空格 [选项] 空格 [参数]
常用的快捷键命令
tab 按一次 只有一个选项 补全 按两次 将所有结果展示给你
上下键: 查找之前打过的 命令
Ctrl +l 清屏
Ctrl + c 终止命令
man手册使用
man命令
空格 一页一页 下翻
回车 一行一行 下翻
上下键也可以翻看
/ 查找
man手册主要需要掌握 1和5
区段1:用户指令
区段2:系统调用
区段3:程序库调用
区段4:设备
区段5:文件格式 shadow passwd fstab
区段6:游戏
区段7:杂项
区段8:系统指令
区段9:内核内部指令
区段n:Tcl或Tk指令
不会需要借助一些方式
[root@localhost ~]# help echo #内部命令查看帮助
查看外部命令帮助
[root@localhost ~]# ls --help
[root@localhost dev]# useradd --help
info也可以查看相关的帮助信息
[root@localhost dev]# info ls
百度
百度是最快解决的一种方式
3.cd 目标位置
Cd 加文件夹名称
Cd - 回到上一次的目录 只能上一次
Cd ~ 切换到 当前 用户的 家目录
root家目录: 在 /root (根目录下有一个root 文件夹)
普通用户: 在 /home/和用户名同名的文件夹
绝对路径: 以根目录 开头的路径
相对路径: 不以根目录开头
每一个文件下都有 . ..
.代表自己文件夹
.. 自己的上一级目录(文件夹)
4.ls
生产环境中慎重直接使用,文件量过大会直接死机(有的服务器上的文件是千万级别)
d 代表目录
- 普通文件
l 连接文件(快捷方式)
b 块设备 硬盘
s 套接字
p 管道 文件
c 字符文件 单个字符
drwxr-xr-x 3 root root 16 7月 21 12:03 aa
d 代表文件格式
rwxr-xr-x 权限三个 一组 rwx r-x r-x (三个人权限)
3 连接数是3 (连接数=快捷指令)
Root 这个文件 属于 root
Root 这个文件属于 root组
16 文件大小
7月 21 12:03 文件最后一次修改时间
aa 文件或者目录名字
ls 不可以单独使用 (单独使用文件过多会导致死机)
ls-l 已长格式显示文件和目录列表 ll=ls -l
ls-a 显示全部包括隐藏文件
ls-A 显示全部文件或隐藏文件,但不包括 . 和..
ls-d 仅列出目录本身,而不是列出目录内的文件数据
ls-h 友好显示文件大小(human,人性化)
ls-R 递归显示该目录及该目录的子目录下的所有内容
ls--color 显示颜色
ls-S 以文件容量大小排序
ls-i显示indoe号
ls需要搭配 通配符去过滤需要的文件
? 任意单个字符
* 任意长度的任意字符
举例:
以p 开头的文件 p*
以.conf 结尾 *.conf
颜色表示的文件类型
黑色 数据包文件 普通文件
绿色 可执行文件
黄色 块设备文件
红色 压缩包
蓝色 文件夹
天蓝色 连接文件(快捷方式)
alias 别名
作用:将常用的 比较复杂的命令简单化
格式:alias 自定义的命令=‘常用比较复杂的命令’ 一定要加上(‘’)
alias ll='ls -l --color=auto'
删除:unalias
[root@localhost ~]#alias 单独出现时显示所有别名命令
过程:
1.先判断是别名.内部命令还是外部命令,如果是别名直接执行
2.如果是内部命令直接在bash表中执行
3.如果是外部命令 先看hash表 表中有先找表 表中的路径找不到直接报错
4.表中没有去找
5./usr/local/sbin : /usr/local/bin : /usr/sbin : /usr/bin : /root/bin (不用记)
6.找到执行 找不到报错
绝对路径>别名>内部命令>hash>外部命令
扩展:
永久修改
在/etc/.bashrc 会影响全部
/root/.bashrc只影响当前用户
du
查看文件或者目录占用磁盘的空间大小
du -a 分开显示每个文件的大小
du -s 显示当前文件夹的 总大小
du -h 人性化显示
Du 不统计文件的实际大小 只是统计文件所占磁盘的大小 磁盘一块一块来存储文件 最小一块 4k
Ls 显示文件实际大小
a和s不能同时使用
[root@localhost ~]#du -as
du: 不能既显示总用量,同时又显示每个项目
Try 'du --help' for more information.
du统计隐藏文件
mkdir(创建空文件夹)
文件最长255个字节 包括路径在内文件名称最长4095个字节
mkdir -pv aa/bb/cc
[root@localhost data]#mkdir -pv aa/bb/cc
mkdir: 已创建目录 "aa"
mkdir: 已创建目录 "aa/bb"
mkdir: 已创建目录 "aa/bb/cc"
-p 递归创建文件夹
-v 详细显示
[root@localhost data]#ls -R
.:
aa
./aa:
bb
./aa/bb:
cc
./aa/bb/cc:
tuoch
如果当前文件夹下没有同名的文件
tuoch 文件名
tuoch 如果已经有文件 刷新时间
软连接与硬链接
硬链接 同一个文件取一个名字 相当于多一条路
软连接 类似于windows里快捷方式
Ln -s 源文件(夹)路径 目标文件夹路径
(软) 一定要 使用 绝对路径
cp复制
cp [选项]… 源文件 目标 相当改名复制 文件夹 文件相当于 改名字另存为
cp [选项]... 源文件... 文件夹 多个源文件只能复制到文件夹
cp-f 有相同文件时强制覆盖不提醒
cp-i 有相同文件时覆盖提醒
cp-p 保留文件的源权限
cp-r 复制文件夹一定需要
cp-a 保留权限 更强大 包括连接文件的属性也可以保留
建议使用-a
[root@localhost data]# cp -r /etc/ /opt/
#复制文件夹要加 -r 不加不让复制
[root@localhost data]# cp -r /etc/ /opt/etc.bak
#改名字
[root@localhost data]# cp -r /etc/ /opt/etc.bak
#变成 etc.bak 的子目录
[root@localhost data]# cp -r /etc/ /opt/etc.bak
#会问你要不要覆盖,cp是别名 加\cp 直接覆盖
cp 复制多个文件 最后一定要跟文件夹 不能跟文件
Cp 要复制的文件 要放置复制文件的位置/可以重命名
-r 复制文件夹一定需要
mv 移动 &改名
[root@localhost data]#mv passwd passwd1
[root@localhost data]#ls
passwd1
Which
只能找命令的位置
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
rm [选项] 要删除的文件或目录
-f、强制
-i、交互
-r 递归(删除目录需要)
[root@localhost ~]# rm -rf / #不让执行
[root@localhost ~]# echo * #删根后查看
[root@localhost ~]# rm -rf /data/*
[root@localhost ~]# rm -rf /data /* ##之间的区别误操作,等于删根
find 查找文件
格式:find [查找范围] [查找条件表达式]
[查找范围]: 如果 不写 范围 代表 默认当前目录
命令的特点:
1.默认递归查询
2.它是真的去硬盘上一个一个文件给你找(实时)
3.查找条件巨多
4.精确查找
缺点:
慢
扩充
Locate +文件
1.模糊查询
2.不是实时查询
linux系统中有一个文件数据库,是去找这个数据库
优点:巨快
Updatedb 刷新数据库
基础格式:
1.按查找文件名字查找 -name
[root@localhost data]#find /boot/ -name 'vm*'
命令 查找范围 查找条件表达式(查找名字是以vm开头的文件)
2.按文件大小查找文件 -size k M G
[root@localhost data]#find /boot/ -size +1024k
#查找boot目录下 大于1024k 的文件
[root@localhost data]#find /boot/ -size -1M
#查找boot目录下 小于1M的文件
注意点:文件大小不加加减号是一定的范围,单位越精确越好
[root@localhost data]#find /boot/ -size 1024k
命令 范围 查找表达式
[root@localhost data]#find /boot/ -size 1M
命令 范围 查找表达式
范围公式:
前面的数字 减去1
1024 -1 1023k 到 1024k
1-1 1字节 到 1M
3.按文件属主查找 属主:文件的拥有者 -user
[root@localhost data]#find /home/ -user zhangsan
#找到home 目录下 属于zhangsan用户的文件
4.按文件类型查找 -type f (普通文件) d(目录) c(字符文件) b(块设备)
[root@localhost data]#find /dev/ -type b
#找到 /dev 下 的 块设备文件
5.按照 indoe号查找 -inum 要先知道indoe号
[root@localhost data]#ls -i
9243885 1.txt 9243846 bigfile 9243860 zwz.txt
[root@localhost data]#find -inum 9243885
./1.txt
6.按照目录层级查找文件 -maxdepth level -mindepth level
[root@localhost data]#find /etc/ -maxdepth 2 -mindepth 2
#只看第二层
7.天数查找文件 -mtime
[root@localhost data]#find /boot/ -mtime +7 -type f -size +1M -delete
#找到 7天以上 且文件类型为普通文件 且大于1M的文件 并且 加上处理动作 删除
8处理动作:
默认是:print
1. print 输出屏幕让你看一下
2. ls 显示详细信息
3. delete 直接删除
4. ok 连接符 会询问
5. exec 连接符 不会询问
find -name "*.txt" -ok mv {} /mnt \;
找到名字以txt结尾的文件
-ok 处理动作 连接 前面后面的命令 会询问你要不要这样处理
mv {} 代指前面 find找到的文件 /mnt 移动到的目录 \;固定格式
不删除,移动文件
find -name '*.txt' -ok mv {} /mnt \;
会询问
find -name '*.txt' -exec mv {} /mnt \;
不会询问
总结:
面试题:
统计 /etc 目录 下 第一层文件夹占用多少磁盘空间?
du -d 1 目录
-d 代表目录层数
1 代表目录层数的第一层
[root@localhost data]#du /etc/ -d 1
24 /etc/fonts
72 /etc/grub.d
1340 /etc/pki
44 /etc/rpm
面试题:
我磁盘空间满了,我删除了一个 5G 的文件 但是空间没有增加5G ,怎么处理?
1. 有别人 占用了这个文件
2.杀掉打开这个文件的进程
【大致的一个思考方向,后续会具体学习】
1. 先判断 他是别名,内部命令 还是 外部命令,如果是别名 直接执行
2. 如果是 内部命令 直接在bash中执行
3. 如果是外部命令 先看 hash 表 表中有 先找表 表中的路径找不到直接报错
4. 表中没有 去找
5. /usr/local/sbin : /usr/local/bin : /usr/sbin : /usr/bin : /root/bin (不用记)
6. 找到 执行 找不到 报错
7. 别名>内部>hash>外部
ls需要搭配通配符去过滤需要的文件
通配符(匹配文件名)
alias 别名
alias ll='ls -l --color=auto
删除别名命令 unalisa
du 查看文件或者目录占磁盘的空间大小
-a 分开显示每个文件的大小
[root@localhost data]#du -a
-s 显示当前文件夹的 总大小
[root@localhost data]#du -s
Mkdir (创建空文件夹)
-p 递归创建文件夹
-v 显示详细过程
[root@localhost data]#mkdir -pv aa/bb/cc
touch 文件名
如果当前文件夹下没有同名的文件,如果有同名文件。刷新修改此文件的时间
[root@localhost data]#touch 1.xtx
软连接
(软) 一定要 使用 绝对路径
Ln -s 源文件(夹)路径 目标文件夹路径
[root@localhost data]#ln -s /etc/local /usr/sbin/
硬链接
Ln 源文件(夹)路径 目标文件夹路径
cp复制
CP 要复制的文件 要放置复制文件的位置 可以重命名
[root@localhost data]#cp /etc/passwd ./paswwd1
-f 有相同文件时强制覆盖不提醒
-i 有相同文件时覆盖提醒
-p 保留文件的源权限
-r 复制文件夹一定需要
-a 保留权限 更强大 包括连接文件的属性也可以保留 建议使用-a
Mv 移动 &改名
[root@localhost data]#mv passwd passwd1
Which
只能找命令的位置
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Find 查找文件
1.按查找文件名字查找 -name
[root@localhost data]#find /boot/ -name 'vm*'
2.按文件大小查找文件 -size k M G
[root@localhost data]#find /boot/ -size +1024k
[root@localhost data]#find /boot/ -size -1M
注意点:文件大小不加加减号是一定的范围,单位越精确越好
[root@localhost data]#find /boot/ -size 1024k
[root@localhost data]#find /boot/ -size 1M
范围公式:
前面的数字 减去1
1024 -1 1023k 到 1024k
1-1 1字节 到 1M
3.按文件属主查找 属主:文件的拥有者 -user
[root@localhost data]#find /home/ -user zhangsan
4.按文件类型查找 -type f (普通文件) d(目录) c(字符文件) b(块设备)
[root@localhost data]#find /dev/ -type b
5.按照 indoe号查找 -inum 要先知道indoe号
[root@localhost data]#ls -i
9243885 1.txt 9243846 bigfile 9243860 zwz.txt
[root@localhost data]#find -inum 9243885
6.按照目录层级查找文件 -maxdepth level -mindepth level
[root@localhost data]#find /etc/ -maxdepth 2 -mindepth 2
7.天数查找文件 -mtime
[root@localhost data]#find /boot/ -mtime +7 -type f -size +1M -delete
不删除,移动文件
find -name '*.txt' -ok mv {} /mnt \;
会询问
find -name '*.txt' -exec mv {} /mnt \;
不会询问