一、补充
1. *表示可执行程序,例如:
------ ls *(显示当前目录下的所有的可执行程序)
------ ls *.c(显示当前目录下的所有的可执行的C语言程序)
------ ls test*.c(显示当前目录下的以test命名开头的所有的可执行的C语言程序)
2.rm -i 被删文件 --- 删除文件之前会进行询问
二、man指令
语法 man+【接口】指令 -> 生成指导手册
一共有9种手册,常用前3个。
前3个库-分别为:
1 Executable programs or shell commands 可执行程序或shell命令
2 System calls (functions provided by the kernel) 系统调用(内核提供的函数)
3 Library calls (functions within program libraries) 库调用(C程序库中的函数)
man man 可查看man这个指令的作用(q退出)
- 例如1、
printf在Linux中也是一条指令(与C语言中的printf无关!)
通过
man 3 printf
我们可以查看printf在C语言库中的函数的介绍。
- 例如2、
查看fork在系统中的调用
man 2 fork
默认从1号还是查,如果1号没有,然后从2、3、4...依次查看
三、cp拷贝命令
1、Linux系统中的echo可以将字符串原封不动的显示出来,例如:
echo "hello Linux"
(默认在显示器中打印)
echo "hello Linux" > mytest.txt
可以将对应文本写入 到 mytest.txt 文件中
cat可以将文件中的内容打印出来。
将 > 定义为输出重定向!
输出重定向:将本来应该显示到显示器的内容,打印到文件中!
cp +[源文件名] [目的文件名] ---在当前目录下,将源文件名拷贝一份到目的文件名。
cp mytest.txt ../mytest.txt
拷贝一个同名文件到上级目录中!(在同一个目录中如果同名会报错!)
如果源文件是一个目录文件(内置多层目录)
cp -r lesson3 lesson3_backup
cp -f 强制复制不询问(在普通用户下)
cp - i 询问后复制(普通用户下)
若cp -fi 则依旧询问
四、mv指令(重命名+剪切)
1、重命名
mv mytest_backup.txt mytest1.txt
在当前目录下将mytest_backup.txt 重命名为mytest1.txt
2、剪切
mv mytest.txt ../
将mytest.txt移动到上级目录中
mv ../mytest.txt .
将上级目录下的mytest.txt 移动至当前目录
总结:
- mv + 【源文件名】【目标文件名】 --- 重命名
- mv + 【源文件名】【目录】 --- 剪切
- mv + 【源文件名】【目录】【目标文件名】 --- 剪切 + 重命名
且所有的文件操作都可以看作是剪切 + 重命名!
如果mv + 【源文件夹】【目录】【目标文件夹】中,在目录下已经存在了目标文件夹(同名),则会将源文件名移动至目标文件夹之下。
ctrl + c 终止因为程序或者指令异常,从而导致我们无法进行指令输入!
- 指令是什么?
指令和可执行程序都是可以被执行的! ------ 指令就是可执行程序!
- 在执行指令之前,我们应该先做什么?
在系统中查找对应的指令!(指令一定是在系统的某一个位置存在的)
指令存放于/usr/bin下面!(一定是某种可执行程序,可能是C/C++等写的)
那么如果我们通过gcc编译.c文件生成可执行程序,将其cp到/usr/bin路径下,那么我们最终可以得到自定义的指令!--- 安装软件
五、指令which
which ll
可以查看ll指令存放的位置
alias对指令进行重命名!
alias 108_cmd='ls -l -i -a -n';
此后alias 108_cmd的作用等同于ls -l -i -a -n
自定义的alias重命名是临时的,重启后会消失;但是ll不是;
六、Linux下一切皆文件
例如显示器、键盘、普通文件...
显示器(显示器中可以写入数据但是不能读取数据,有fwrite,没有fread());
键盘 (键盘中可以读取数据但是写入数据,有fread,没有fwrite());
普通文件 (一般普通文件都具有写入数据和读取数据的方法)
凡是能被读取和写入的,即便方法为空,也都可以看作是文件!
echo 默认将字符串写入到显示器文件当中!(且字符串不一定非要按照C的标准来写,可以不加"")
输出重定向 > 的特点:(因为每次使用 > 进行输出重定向的时候,原来的旧的内容会被清空!)
- 清空文件
- 写入新内容
如果我们想要清空文件的内容,可以使用
>out.txt
那么源文件(out.txt)的内容会被清空(左边为空,将空值传入至out.txt)
扩展:
追加重定向>>
例如:
echo "108 good good" >> out.txt
原始内容不会被覆盖,多次调用内容会一直增加。
- 打开文件后不清空内容
- 在上一次文件的结尾处继续增加新内容
如果使用printf指令替代echo指令,则输出的内容不换行(echo默认自带换行)
(输出重定向和追加重定向的文件如果默认不存在,则会自动新建该文件!)
cat默认什么都不跟,则打印从键盘中获得的数据
输入重定向 <
cat < out.txt
本来默认的如果什么都不跟,则默认打印从键盘中获得的数据
但是加上输入重定向后打印 out.txt中的文件内容
暂定!
cat < out.txt 与 cat out.txt
无区别!(只是引入输入重定向!)
七、cat指令
- cat + 【指定文件】 ---- 会打印该文件的内容
- cat -n [指定文件] ---- 每行标序号打印文件内容(包括空行)
- cat -b [指定文件] ---- 每行标序号打印文件内容(不包括空行)
- cat -s [指定文件] ---- 将多个空行压缩为一行输出
cat -n test.txt
八、more指令
cat指令不适合大文本;more指令适合大文本!
more打开后自动占满整个屏幕;然后按回车会向下浏览。
用法:
more [选项][文件]
- -n 对输出的所有行编号
- q退出more
more -500 test.txt
查看屏幕内最后一行是第五百行的包含之前的数据(到500行打满)。
九、less指令
less与more类似,但是less可以随意浏览文件,more只能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
选项:
- -i 忽略搜索时的大小写;
- -N 显示每行的行号;
- /字符串:向下搜索“字符串”的功能;
- ?字符串:向上搜索“字符串”的功能;
- n:重复前一个搜索(与/或?有关的)
- q:quit表示退出
十、head指令
head + 文本 ------ 默认打印文本的前10行;
常用用法:
head [数字] [文本]
打印文本的前n行;
十一、tail指令
tail + 文本 ------ 默认打印文本的后10行;
常用用法:
tail [数字] [文本]
打印文本的后n行内容;
如果有一个大文本(几万行),我们需要看其中的1000~1020行(共21行),怎么使用head和tail获得呢?
方法一:
head -1020 log.txt > temp.txt
tail -20 temp.txt
创建一个临时文件temp来保存temp的前1020行,再通过tail取后21行;
方法二:(管道)
head -1020 log.txt | tail -21
(|被称为管道文件,也叫管道 ------ 内存级的,存放在内存中,没有真实存在)
(将左边程序的输出交给管道文件,然后右边的文件再从管道中把数据读取到自己的程序当中)
要对文件进行修改,先将文件加载到内存中,然后修改,修改完后再存入磁盘中;(不是直接从磁盘中修改)
(所有的文件在某段时间内都是内存级的,都需要加载到内存中用来处理)
在Linux中,wc-l是一个用于统计文本文件行数的命令。
例如:
cat log.txt | head -50 | tail -20
最后获得log.txt文本的31~50行取出来;
cat log.txt | head -50 | tail -20 | wc-l
最后显示结果为20(直接按照最后一个管道右边的程序显示行数)
(管道通常支持流水线工作:数据不断向后面加工,最终得到我们想要的数据)
拷贝多个文件时,建议先全部打包再拷贝。