计算机由硬件+软件组成,操作系统是最核心的软件,负责协调和管理上面运行的各种应用软件。
Linux常用命令
问题:当用户执行一个命令时,Linux提供是按照什么逻辑和顺序来执行?
1.系统先判断是否是别名,如果是,则执行
2.如果不是别名,判断是否内部命令,是,执行
3.如果不是内部命令,查询hash对应缓存区是否有命令对应路径,有,执行,如果找不到,提示没有此目录或文件
4.按照path系统环境变量指定路径搜索并执行,没有则提示没有此命令
命令别名
alias 别名=“命令”
示例:
将删除改为移动到某个目录
alias rm='DIR=/data/backup`date +%F%T`;mkdir $DIR;mv -t $DIR'
取消别名:
unalias 别名
\屏蔽别名功能,使用原始命令。root上的cp是别名相当于cp -i,普通用户使用的是无别名cp
例如:\cp -av /etc/ .
查看磁盘分区
lsblk
不重启识别新增硬盘
echo "- - -" > /sys/class/scsi_host/host0/scan
对当前用户生效
~/.bashrc
对所有用户生效
/etc/bashrc
配置生效:
source /path/to/config_file
screen软件作用
1.关闭不至于断开会话
2.共享会话
单引号:变量、命令不识别,都当成字符串
双引号: 可以识别变量,不能识别命令
反向单引号:命令和变量都能识别
反向单引号 `ls -al` 等价于 $(ls -al)
如何创建20个文件,其中10个txt,10个log后缀。
touch {1..10}.{txt,log}
删除记录历史命令的文件
rm -f .bash_history
清空历史命令
history -c
清屏
ctrl+l
Linux下的文件类型
- 普通文件
- d 目录文件
- b 块文件
- c 字符文件
- l 符号链接link
- p 管道文件Pide
- s 套接字文件socket
转换编码:
将windows10上文本默认编码转换成utf-8
iconv -f gb2312 win.txt -o win2.txt
转换文本格式:
#将windows的文本格式转换成linux的文本格式
dos2unix windows.txt
#将Linux转换成windows的文本格式:
unix2dox windows.txt
cat list.txt
常见通配符
* 匹配零个或多个字符,不匹配隐藏文件(.开头)
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+和. 当前工作目录
[0-9] 匹配数字范围
[a-z] 字母
[A-Z] 字母
[abcd] 匹配列表任何一个字符
[^abcd] 匹配列表中所有字符外的字符
示例1:显示/etc下所有rc开头并且后面是0-6之间的数字,其他为任意字符的文件或目录列表
ls -d /etc/rc[0-6]*
示例2: 只显示/etc下的非隐藏目录列表
ls -d /etc/*/
Inode表结构和文件管理底层原理(重点)
创建700M的大文件
dd if=/dev/zero of=/boot/bigfile bs=1M count = 700
查看文件inodes数量
df -ih
删除大文件
cat /dev/null > /var/log/huge.log
正在使用文件被删除是不释放的
查看未完全删除文件(存在内存中,未释放空间)
lsof |grep delete
疑问:文件被删除之后,未释放inodes ,仍然显示空间不足,如何处理?
生产案例,提示空间满no space left on device 但df可以看到空间很多,为什么?
提示空间快慢,使用rm 删除了很大的无用文件后,df 仍看到空间不足,为什么
文件的存储机制和存储结构
一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,在将数据删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中。在将数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以在出现删除日志文件后,空间还没释放,就是因为httpd进程还在一直向这个文件写入内容,导致虽然删除了日志文件,但是由于进程锁定,文件对应的指针部分并未从meta-data中清除,而由于指针并未删除,系统内核就认为文件并未删除,因此通过df命令查询空间并未释放也就不足为奇了。
ps aux 查看进程,看不到进程文件路径如何处理?
找到进程编号,在/proc/下找到对应exe文件,软链接则指向具体文件目录
echo $$ //显示当前bash shell的进程编号
错误信息重定向到文件
xxx 2> /data/1.log
将多个命令一起执行并输出到特定文件
(ls;date)>a.txt
Linux 给程序提供三种 I/O 设备
文件描述符 0 1 2
标准输入 STDIN 0
标准输出 STOUT 1
错误输出 STDERR 2
标准错误表示:2>&1
ls /data /xxx > a.log 2>&1 (同时输出正确和错误结果,2>&1把错误的变成正确的)
ls /data /xxx 2> a.log 1>&2 (同时输出正确和错误结果, 1>&2 把正确的变成错误的)
ls /data /xxx &> a.log (同时输出正确和错误结果)
ls /data /xxx 2>&1 > a.log (标准错误在屏幕显示,标准输出重定向到文件里)
&> 标准输入和标准输出都重定向到同一个文件
ll /data/err &> a.txt
将文件放到垃圾箱
ll /data/err &>> a.txt
实践:Linux安装mail实现告警功能
使用rev 将字符串倒装
echo "123"|rev
利用tee命令重定向到多个目标
echo "hello" |tee -a test.log | tr 'a-z' 'A-Z'
标准输出 > file
标准错误 2> file
标准输出和错误输出 &> file
标准输入 <
多行重定向 < 举例:#!/bin/bash
fdisk /dev/mmcblk0 < d
3
n
p
3
w
eof
管道传标准输出不传标准错误 ls /data /err | tr 'a-z' 'A-Z'
标准错误和标准输出都传 ls /data /err 2>&1 | tr 'a-z' 'A-Z'
查看输入的多行字符串并重定向到文件 cat < cat < > 123
> 456
> EOF
123
456
权限 文件 目录
r 可以读取文件的内容 表示可以列出存储在该目录下的文件即读目录内容列表。
w 表示允许指定用户打开并修改文件的内容 表示允许从该目录中添加或删除新的文件,通常只有目录主才有写权限。
x
允许用户将该文件作为一个程序执行。 表示允许用户在目录中进行查找,并且用cd命令可以进入该目录。
umask: 根据文件类型的基准权限与umask值的按位取反后的数值进行与运算,可以得到的对应文件默认权限值。
普通文件基准权限666 ,目录基准权限777
假设umask为123 ,则目录权限 777-123 =654
普通文件,666-123=543 ,5和3是奇数要加1,则最终为644
三剑客-grep
grep root /etc/passwd
grep -nA2 /etc/passwd //匹配前2行
grep -nB2 /etc/passwd //匹配后2行
grep -nC2 /etc/passwd //匹配前后2行
echo rooter |grep -w root
-w参数 必须匹配完整单词
正则表达式
. 匹配任意单个字符
* 匹配前面的字符任意次
.* 任意长度的任意字符
\? 匹配其前面的字符0次到1次,即可有可无
\+ 匹配前面的字符至少1次
^ 行首
$ 行尾
去除#号开头和空格开头的行:
grep -v '^#' /etc/httpd/httpd.conf |grep -v '^$'