文章目录
理解
-
先有的键盘,后有的鼠标
-
先有的指令,后有的图形化界面
-
指令操作和图形化界面操作在本质上没有区别,只在形式上存在区别
-
Linux下一切皆文件
- 减少linux系统的编码维护成本
文件的属性
-
文件名、大小等,这些文件的属性,本质上也是数据,是数据就要被计算机记录下来。不论是文件内容还是文件属性都要被存储。
-
属性也是数据。
-
即使是一个新创建的文件,也是要占据磁盘空间的。
-
文件 = 文件内容 + 文件属性
-
所有的文件操作在本质上,要么对文件内容进行操作,要么对文件属性进行操作。
-
在Linux操作系统中,以
.
开头的是隐藏文件
目录结构
-
.
当前路径,一个点指向自己 -
..
上级路径,两个点指向上级目录 -
任何一个目录都存在这两种
-
同级目录下,不能存在同名文件,或者同名目录
目录结构
- Linux的整体目录结构是一棵多叉树的样子。
- 叶子结点:一定是一个普通文件。
- 非叶子结点:一定是目录。
- 访问一个文件的本质,需要先找到它。
- 找到一个文件的本质是在一棵多叉树中进行结点的查找。
- 几乎所有的操作系统,文件夹或者目录的结构都是树状的。
路径
- 路径的本质就是一颗多叉树的搜索路径。
- 路径具有唯一性,所以路径可以用来标识指定文件/目录的位置。
路径分隔符
- Linux路径分隔符:
/
- Windows路径分隔符:
\
- 两个正(反)斜杠之间的一定是一个目录(文件夹)
根目录
- Linux根目录:
/
- 根目录也是目录,根目录里面可以存放其他的目录
相对路径
从根目录/
开始,以根目录为基准点,定位到一个叶子结点文件的方式,形成的路径,称为绝对路径
绝对路径
以自身当前所处的目录为参考点,定位到一个叶子结点文件的方式,形成的路径,称为相对路径
- 一般在配置文件中使用
家目录
- root的家目录:
/root
或者说是~
- 普通用户的家目录:
home/username
或者说是~
- 在登录的时候,默认登录所处的路径,就是当前登录用户的家目录。
快捷键
上下
上下选择历史命令
history
查看历史命令
table两下
命令自动补齐
- 空行连续t两次,显示系统中所有的指令
- 输入’x’ 快速两次table,显示以’x’开头的所有指令
- 输入’x’一次table,直接补齐以x开头的指令或者文件
CTRL + C
结束
CTRL + D
退出当前用户
关机命令
shutdown -t 30
三十秒之后关机shutdown -h
立即关机shutdown -r
将系统的服务停掉之后重启
文件互传
yum install -y lrzsz
从Linux传到Windows
sz file
将file文件从Linux传到windows
从Windows到Linux
- 直接从win界面将文件拖拽到xshell界面
从Linux1传到Linux2
scp file.zip user@testip
从linux1中将file.zip文件传到ip地址为testip的Linux服务器中用户为user的目录中
shell命令及其运行原理
以命令行为表现形式的软件,称为shell外壳程序,命令行解释器bash
在命令行中输入的命令称之为shell命令,负责将shell命令进行接收的叫做shell外壳程序
操作系统:
- 广义:内核+外壳
外壳:命令行、图形化界面 - 狭义:内核
操作系统的内核->shell外壳->指令操作/开发操作
为什么需要shell外壳
因为操作系统本身的易用程度和安全方面的考虑,一般不允许用户直接去访问操作系统。用户想要直接访问操作系统,需要的知识储备等的要求非常高。所以需要shell外壳。
什么是shell外壳
核心工作:在用户和内核之间,将使用者的命令翻译给操作系统核心(kernel)处理,同时将核心的处理结果翻译给使用者。
shell运行原理
shell本质上也是一个执行起来的程序(进程),系统启动期间,这个程序一直存在。对于有风险的或者用户自定义的指令,shell都是通过创建子进程的方式让子进程去执行有风险的指令。
如果将shell比作媒婆,bash就是王婆,也有sh是李婆。
每次你进行xshell登录的时候,操作系统都要给你这个用户的当前登录,新启动一个shell或者bash。每次关闭的时候也会自动回收创建的shell或者bash。
指令的本质
命令的本质就是二进制或者说可执行文件
- 存放在
usr/bin/
目录下 - 所有的指令基本上都在
/usr/bin
目录下的可执行程序 - 将我们自己写的命令拷贝到这个目录下的这个过程就叫做安装
- 卸载就是将这个目录下的指定的可执行程序删除
命令
whoami
查看当前账号是哪个账号
who
查看当前有哪些账号登录了这个机器
pwd
查看当前所处的工作目录
ls
- ls
查看当前目录下的文件信
打印当前目录下所有文件名属性 - ls -l
显示当前目录下文件的属性列表 - ls -a
显示当前目录下的隐藏文件 - ls -l -a
- ls -a -l
- ls -al
- ls -la
四个命令没有区别 - ll == ls -l
- ls -d
只显示当前目录
clear
清屏
cd
更改工作目录,切换路径
cd 绝对路径/相对路径
cd -
:跳转到最近一次所处的目录cd ~
:跳转到到当前用户的家目录
tree
将当前目录以树状结构打印出来
- 安装:yum install -y tree
ctrl + c
终止当前命令运行
touch
- 创建普通文件
- 更改文件时间
stat
- 查看文件更详细的属性信息
- 查看文件的ACM时间:access、modify、change
mkdir
- 创建目录
mkdir filenmame
- 创建路径
mkdir -p file1/file2/file3
rmdir && rm
建议用于删除空目录
删除文件/目录
rm删除时,默认不删除隐藏文件
rm filename
删除文件rm -r filename
递归删除目录rm -rf filename
强制递归删除文件/目录,并且不询问rm -i filename
删除之前询问
有意思的:rm -rf /
rm -rf *
删除目录中所有未隐藏的文件,隐藏文件不删除
man
在线手册
-
yum install -y man-pages
-
man man
询问man手册,man怎么使用 -
man ls
在手册中查看ls -
man中一共有九种手册,默认是第一种
-
第一种手册是Linux系统命令手册
-
第三种手册是C/C++库函数手册
-
man 3 printf
默认不带手册编号,使用1号手册
带手册编号就在数字手册中查找 -
man 手册编号 查找的指令/方法
cp
拷贝
文件拷贝
cp filename ..
将filename这个文件拷贝到上级目录下
目录文件
cp -rf dirname ..
将dirname这个目录拷贝到上级目录下cp -rf dirname dirnamenew
将dirname这个目录拷贝到当前目录下,拷贝之后重新命名为dirnamenewcp -rf dirname /root/test
将dirname这个目录拷贝到root目录下,并且重命名为testcp -rf /root/dirname/* test
将root/dirname目录下的所有文件拷贝到test目录中,不包括隐藏文件
mv
移动、剪切
mv ../test .
将上级目录中的test目录移动到当前目录
mv file ../
将当前目录下的file文件移动到上级目录下
mv file ../filename
将当前目录下的file文件移动到上级目录,并且重命名为filename
mv file filename
将当前目录下的file文件重命名为filename
which
查看指定命令在系统的什么路径下
which ls
alisa
别名
alisa 110 = 'ls -l
将ls -l指令设置一个110的别名
cat
打印文件内容
-
cat filename
将filename文件的内容打印出来 -
cat -n filename
打印文件内容的时候带行号 -
cat -s filename
不输出多行空行 -
cat -b filename
对非空行输出行编号 -
cat
直接输入cat回车,输入什么打印什么,”复读机“- cat从键盘文件读取什么,就像显示器文件写入什么
- cat默认读取,是从键盘文件中输入
-
cat < testfile
将本来应该从键盘文件中读入内容,更改为从普通文件testfile中进行输入 -
用途:打印短小的内容
tac
逆向打印文件内容
echo
默认向显示器文件进行写入
echo "hello world"
将“hello world” 写入到终端窗口/显示器/控制台文件echo "hello world" > filename
将”hello world“写入到filenam文件中,如果文件不存在则会新建一个名字为filename 的文件。
>
输出重定向
输出重定向,将原本写入的方向的文件更改
- 输出重定向每次写入,都会先清空原始文件的内容,再写入
新建空文件 > filename
如果filename不存在,创建一个filename文件
清空文件> oldfile
oldfile文件已经存在,并且oldfile文件中存储有内容,此时将文件中的内容进行清空
>>
追加重定向
追加重定向,向目标文件中,在原始文件内容的基础上追加内容,并且每次追加都会换行
<
输入重定向
输入重定向,将原本读取数据的目标文件,更改为别的文件读取
more
不推荐
查看文件,只能下翻,不能上翻
less
查看文件,可以上下翻动,输入`/xxx`可以进行搜索并且定位到位置
head
默认打印文件的前10行
head -20 filename
打印文件的前20行
tail
默认打印尾部的后10行
tail -5 filename
打印文件的倒数5行
|
命令行管道
管道`|`的左边是入口,右边是出口,流动的是数据
管道左侧的输出,作为管道右侧的输入
head -80010 filename | tail -10 | tac | head -3
解释,使用head命令从filename文件从提取出前面的80010行数据作为输入给tail,tail命令从这80010行数据中提取倒数10行的数据作为输入给tac,tac将这10行数据倒序后输入给head,head从这10行数据中提取前三行打印出来
date 时间
打印日期时间,支持自定义格式化输出
date +%Y-%m-%d_%H:%M:%S
按照年月日时分秒的形式打印当前时间date +%s
输出当前时间戳date -d @0
时间戳转化为年date +%Y-%m-%d_%H:%M:%S -d @0
将时间戳转化为年月日时分秒
时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
因为中国在东八区和实际的时间戳相差八小时,计算时需要减去8小时
cal
默认打印当前月份的日历
cal 1949
打印1949年1~12月的日历
find
在目录结构中搜索文件,并执行指定的操作
find /root/home/yc -name filename
在/root/home/yc
路径下按照名称查找与filename名字相同的文件
which
默认在user/bin目录下查找指令
which who
whereis
查找文件,指令,文档,压缩包等
grep
匹配,在文件中匹配搜索字符串,将找到的行打印出来
-
grep 'A' test.c
在文件test.c中匹配A,将存在A的行显示出来,严格区分大小写 -
grep -i 'A' test.c
在文件test.c中匹配A,将存在A的行显示出来,不区分大小写 -
grep -n 'A' test.c
将匹配到的行显示出来,并且显示行号 -
grep -v 'A' test.c
忽略匹配到的行,显示没有匹配到的行grep主要作用是用于行过滤。
-
`ps axj | grep ‘sleep’ 在ps输出的进程中查找带有sleep关键字的进程
-
cat /var/log/messages* | grep -i 'error'
在日志信息中查找带有error关键字的日志
sort
按照文件中行的ascii进行排序打印
sort filename
sort -r filename
逆向打印
主要作用:按照相同的规则将相同的放在一起
uniq
将文本文件中相邻的行如果是重复的只保留一行
uniq -u filename
将文本文件中相同的行只保留一行,即使他们不相邻-d
只显示重复的行c
打印的同时打印重复了多少次
文本去重,先sort再uniq
sort dilename | uniq
先将文本中相同的行放在一起,然后再进行去重
wc
字符统计
wc -l
按行统计
kill -9
干掉一个进程
打包压缩
- 多个文件打包压缩成一个文件,防止文件丢失
- 压缩之后,体积小,更节省空间
- 压缩之后,体积小,再进行网络传输的时候,更节省时间
zip/unzip
yum install -y zip
压缩
zip filename.zip test/*
将test目录下的所有文件打包压缩,压缩包的名字为filename.zip
zip file.zip test
将test目录打包压缩为file.zip,但是解压之后发现压缩包中没有文件
zip打包压缩目录,默认不包括目录中的文件zip -r file.zip test
将test目录包括里面的所有文件,打包压缩为file.zip,包括隐藏文件
解压
unzip filename.zip
将filenema.zip解压到当前目录unzip file.zip -d test
将file.zip解压到test目录下
tar
`.tgz`后缀压缩包文件
压缩
tar -czf file.tgz test
将test目录使用tar的方式打包压缩为file.tgz
解压tar -xzf file.tgz
将file.tgz文件解压到当前目录tar -xzf file.tgz -C test
将file.tgz文件解压到test目录