目录
linux下一切皆文件
文件的属性是数据,也要存储
因此文件操作 = 对文件内容操作 or 对文件属性操作(指令的选项协助我们对文件的属性进行操作)
关于指令
1.指令就是一个可执行程文件,在执行指令前我们会在系统中先查找指令,指令一定是在系统的某个位置存在的
2.Linux的指令是可以携带选项的
ls (只介绍常用选项)
文件的类型
d:是一个目录
-:文件是一个普通文件
在Linux中,以.开头的文件称为隐藏文件,任何一个目录下面都有两个隐藏文件
.. :表示当前路径的上层路径
.:表示当前路径,其存在意义是帮助用户定位当前目录下的一个文件
常用选项
(选项可以多个叠加使用)
如 ls -a -d
1. -a列出目录下的所有文件,包括以.开头的隐藏文件
2.-d将目录像文件一样展示,而不是显示其下的文件, 如ls -d 指定目录
3.-l 列出文件的详细信息
4.-F在每个文件名后附上一个字符以说明该文件的类型,*表示可执行的普通文件, /表示目录,@表示符号链接,|表示FIFOs,= 表示套接字
pwd
显示用户当前所在的目录
/ 表示路径分隔符
回退到只有/时,这个/代表根目录
目录下可以存放目录和文件,所以Linux的整个目录结构一定是一个多叉树的结构,它的叶子节点一定是一个空目录或者一个非目录文件,路上节点一定是一个非空目录
所以我们定位一个文件,通常用路径来定位,路径定位具有唯一性
我们把从开始定位到指定位置的路径称为绝对路径
我们把以自己当前所处的路径为起始参照位置来进行特定文件定位的,这样的路径称为相对路径
使用
1.绝对路径往往比较长,但是不变,一般在一些固定场景,比如配置文件中使用
2.一般命令行输入,比较常用相对路径
cd
cd + 目录名
改变工作目录,将当前工作目录改变到指定的目录下,除了cd + / 可以直接跳到根目录 cd + ~跳到家目录外,其它都需要在目标目录所在目录跳
cd dir1/dir2 这样可以连续跳
whoami
查找我是谁
cd .. :返回上级目录
cd /honme/litao/linux/ :绝对路径
cd ../day/ :相对路径
cd ~ :进入家目录
cd -:返回最近访问目录
(最前面和最后面的/不影响指令的结果)
touch
创建一个普通文件
touch test.c
mkdir
创建一个目录
mkdir -p test/test1/test2 //递归建立多个目录
rmdir与rm
rmdir只能删除空目录
rm 可以删除普通文件
rm mytest.txt
rm ../mytest.txt
//删除本目录文件,以及删除上一目录文件
rm -f 不显示任何信息,强制删除
rm -r (递归,用于删除目录)
rm -rf 递归并强制删除
知识点补充增加删除用户
在root下
useradd 用户名 增加用户
userdel 用户名 删除用户
man
我们可以用man指令访问linux的手册页数,手册一共分为八章,会默认从第一章开始搜索,直到搜索到,然后停止
语法:man[选项]指令
1.-k根据关键字搜索,联机帮助
2.num 只在第num章节寻找
3.-a搜索所有章节,如果搜索到一个章节里面有的话,按q退出后它会继续向后搜索。
手册分为八章
1 | Executable programs or shell commands | 普通的命令 |
2 | System calls (functions provided by the kernel) | 是系统调用,如open,write之类的(通过这个至少可以很方便地查到调用这个函数需要加什么头文件) |
3 | Library calls (functions within program libraries) | 是库函数,如printf |
4 | Special files (usually found in /dev) | 特殊文件 |
5 | File formats and conventions eg /etc/passwd | 描述了文件的格式,各个字段的含义和取值约束等 |
6 | Games | 游戏,游戏自定义 |
7 | Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) | 附件和变量,比如说environ这种全局变量在这就有说明 |
8 | System administration commands (usually only for root) | 系统管理员命令(通常仅适用于root用户) |
echo
可以打印你后面跟的字符串
echo "hello linux"
echo 'hello linux'
echo hello linux
都能被识别
打印出hello linux
知识补充 >与>>
输出重定向 >与追加 重定向>>
>向目标写入时,会先清空原文件,然后再写入
echo "hello linux" > mytest.txt
没有在显示器显示
这个数据被写入目标文件
printf "hello linux" > mytest.txt
echo 自动换行,printf不换行
> mytest.txt
//这样写就相当于清空文件
//如果文件不存在,那么会创建一个新的文件
echo "hello linux" >> mytest.txt
//会在原来的内容后面追加新内容
cat
默认从 键盘读,写到显示屏,适合打印小文本
-n 对输出结果编号
-s 不输出多行空行
-b 对非空输出行进行编号
输入重定向 <
cat < mytest.txt
//不从键盘输入从文件输入
直接跟随文件也可以直接打印
cat mytest.txt
不过两者还是有所区别的
cp
1.拷贝普通文件
cp mytest.txt mytest1.txt
//可以在同一目录拷贝,但是文件名不能相同
cp mytest.txt ../mytest.txt
//可以使用相对路径来将文件拷贝到上一目录,此时目录不同,文件名可以相同
2.拷贝目录
cp -r mytest mytest1
//同删除目录一样,需要-r递归
cp -rf mytest mytest1
//-f指的强制,不询问
mv
剪切文件
剪切到当前目录(相当于重命名)
mv mytest.txt mytest1.txt
等价于
mv mytest.txt ./mytest1.txt
剪切到上一目录
mv mytest.txt ../mytest1.txt
//如果没有给新名字,名字还是原来的
剪切目录
mv dir dir1
重命名当前目录
mv ../dir .
//把上一目录的dir剪切到当前路径
mv dir ../dir1
//把当前目录下的dir剪切到上一目录并且重命名为dir1
知识补充ctrl + c
强制退出,也可以在指令输入错误的时候让前面的指令无效化
知识补充alias
取别名
alias ll = "l -l";
//注意,需要带分号
//如果想要取消,那么
alias ll= "";
more
适合用来看大文本
使用more时,会先进行打印把一个屏幕占满,然后按回车可以继续下翻,按q可以退出,但是只能下翻,在一次搜索结束后可以使用
/num 搜索相应行
1.-num 打印到第多少行停下来
less
使用less时,会先进行打印把一个屏幕占满,然后按回车可以继续下翻,按上可以上翻
/num也可以搜索相应行
head
head -10 mytest.txt
搜索前十行
tail
tail -10 mytest.txt
搜索后十行
head -1000 mytest.txt > tmp.txt
tail -20 tmp.txt
//截取片段
知识补充管道文件
是一个内存级的文件,作用是把左侧的程序的输出交给管道文件,然后右侧文件再从管道里读出来,作为其输入
所有的文件运行是都会先从磁盘搬到内存里
head -1000 mytest.txt | tail -20
data
1.
data +%F
等价于data +%Y-%m-%d //年月日
data +%X
等价于data +%H:%M:%S //时分秒
2.
data +%s
//时间戳
3.
data -d @时间戳
//可以把时间戳转换成我们认识的格式,但是这样子显示的是系统默认格式
//因此我们可以
data +%Y-%m-%d -d @时间戳
cal
显示日历,默认显示该月的日历
1.cal
2.cal -num
cal -3
//查看该月以及附近月份日历,比如说该月为六月,会显示五六七月的日历
3.cal num
显示该年的所有日历,如果有两个参数,那么会定位到年月
find
可以在指定的路径下进行文件的搜索 --真的在磁盘文件中查找
这里只介绍一个选项
find 目录 -name 文件名
find ~ -name *
find ~ -name *.c//这个的意思是在家目录查找所有后缀为.c的文件
find ~ -name test.c
find /usr/bin/ -name ls
但是如果在所有文件中找,可能会出现有些文件没有权限查找的的情况
which 可以在指令路径下搜索指令文件, /usr/bin
就是
which ls
但是如果我们 which ll时,发现路径到了ls就结束了,那是因为ll被取别名了
whereis 在系统指定路径下查找,既可以找到可执行程序,又可以找到手册,安装包,压缩包等
grep
语法:grep 选项 要搜寻的字符串 文件
grep "hello" test.txt
-i 忽略大小写不同
-n 打印行号
-v 反向选择,即显示出不包含该字符串的文件
zip/unzip
zip 压缩文件名.zip 目录或文件
zip tmp.zip test.txt
zip tmp.zip -r tmp
zip tmp.zip -r tmp test.txt
1.unzip 压缩文件名.zip
2.unzip 压缩文件名.zip -d 目标目录
unzip tmp.zip
unzip tmp.zip -d work
(可以将文件解压到指定目录)
如果后面跟了多个目录或者文件,那么它们都会被打包到一个压缩文件中,如果包含目录,那么需要-r 递归处理
tar
这里介绍三个常用的
tar czf xxx.tgz 目标文件或目录 打包压缩
tar tzf xxx.tgz 预览
tar xzf xxx.tgz 解压解包
总体上与zip 是类似的
知识补充bc
可以进行浮点运算,就是linux里面的计算器
uname
用来获取电脑和操作系统的相关信息
uname可以显示主机所用的操作系统的版本硬件的名称等基本信息
-a详细输出所有信息,依次为内核名称 主机名 内核版本号 内核版本 硬件名 处理器类型 硬件平台类型 操作系统名称
el是centos 的简写 x86_64 = x64 x86 = 32
free
可以用于查内存
-k 用kb的方式
-m 用mb的方式
-g 用g的方式呈现
su
用于切换用户
语法su 用户名
su myh
切换到root时,root可以省略
知识补充tab
用于补全指令
比如已经输入 whic 再按tab就会补全成which,如果有多条相应whic开头的指令那么这些指令都会显示
知识补充ctrl r
用于查找某个指令的历史操作
linux会记录最近的一千个指令
ctrl d
表示键盘输入结束,EOF,也可以用于替代exit的功能
shutdown
-h将服务停掉后立即关机
-r将服务停掉后重新启动
-t sec 过几秒关机
Linux操作系统(服务器)永远不关机
简单理解指令的运行原理
输入指令的过程就是输入字符串
用户通过 命令行解释器与操作系统进行交互
命令行解释器将用户的指令翻译给核心(kernel)处理,同时将核心的处理结果翻译给用户
命令行解释器(shell)存在的意义(在linux下就叫做命令行)
1.进行命令行解释
2.保护操作系统,对于用户的非法请求进行拦截
base ,sh等就是具体不同类别的命令行解释器,包含于shell中