目录
什么是管道文件?
打包和压缩
文本编辑器
nano的安装
nano的使用
退出nano编辑,ctrl+x
普通用户无法sudo,该怎么解决
Linux小程序-进度条
预备知识
1.回车换行
2.缓冲区
准备工作
代码实现
1.processBar.h代码编写
2.main.c代码编写
3. processBar.c代码编写
结果展示
什么是管道文件?
当我们需要从提取的数据信息再进行提取时,我们就需要一个临时文件来存储第一次提取的数据信息,以供第二次进行提取,如下:
在不创建临时文件的前提下,我们使用管道文件,代码如下:
head -1020 log.txt | tail -20
上述代码中," | "是一种符号 ,后面会被"系统"解释称为 管道文件,管道文件不会真的在磁盘中存在,属于内存级的文件。
管道:与现实生活中的管道一样,有一个入口和一个出口,数据从管道的入口进入,另一方从管道的出口拿取数据。
管道也可以实现连续提取数据,如下:
cat log.txt | head -50 | tail -20 | wc -l
通常支持上述的流水线工作。
打包和压缩
为什么?
- 能被打包和压缩的,一定是一个整体,由多个文件 -> 一个文件,好处是不容易造成文件缺失
- 打包压缩,体积变小 --如果未打包压缩,下载时间变长,存储空间变大
安装zip/unzip
yum install -y zip unzip
打包和压缩的方案有很多
tar czf xxx ----打包压缩
tar tzf xxx.tgz ----预览
tar xzf xxx.tgz ----解压解包
tar -> 打包后缀
.gz -> 压缩后缀
xxx.tar.gz ---> xxx.tgz
文本编辑器
Linux下的记事本 nano
nano的安装
nano --version //判断是否已经安装了nano,如以下情况是已经安装了
//安装指令
yum install -y nano
nano的使用
nano text.c //进入文件开始编写
退出nano编辑,ctrl+x
普通用户无法sudo,该怎么解决
把用户添加进用户信任列表里 ,即白名单里,而Linux所谓的白名单就在
/etc/sudoers
普通用户是无法修改配置文件的,需要在管理员身份root下
vim /etc/sudoers
进入配置文件后,找到如下位置
在这里添加需要执行sudo命令的用户,下图所示是用户名
Linux小程序-进度条
预备知识
1.回车换行
回车换行是两个动作;
回车是将光标移至当前行的最左侧,
换行是将当前光标位置移至下一行的相同位置。
2.缓冲区
由c语言维护的一段内存
1.stdout:标准输出
2.stdin :标准输入
3.stderr:标准错误
linux系统中,一般是缓冲区满或者程序运行结束后进行刷新,这样达不到我们想要的效果,于是我们用fflush清空缓冲区,强制刷新。
准备工作
1.创建三个文件
2.在processBar.h 和 main.c 中写入以下内容
3.创建makefile文件,将上述processBar.c和main.c两个文件一次编译形成可执行文件
代码实现
1.processBar.h代码编写
1 #pragma once //防止头文件重复包含
2 #include<stdio.h>
3 #define BODY '-' //设置进度条的身体样式
4 #define RIGHT '>' //设置进度条的头部样式
5 #define NUM 102
6 #define TOP 100 //设置倒计时时长
7 void processbar(int speed); //声明进度条函数
2.main.c代码编写
1 #include "processBar.h"
2 int main()
3 {
4 processbar(50000); //调用倒计时函数
5 return 0;
6 }
3. processBar.c代码编写
#include "processBar.h"
#include <string.h>
#include <unistd.h>
//设置进度条的颜色
#define YELLOW "\033[1;33m"
#define NONE "\033[m"
//设置进度条旁边的转动圈
char *lable="|/-\\";
void processbar(int speed)
{
char bar[NUM];
memset(bar,'\0',sizeof(bar));
int cnt=0;
int len=strlen(lable);
while(cnt<=TOP)
{
printf("["YELLOW"%-100s"NONE"]""[%d%%][%c]\r",bar,cnt,lable[cnt%len]);
fflush(stdout); //强制刷新
bar[cnt++]=BODY;
if(cnt<100) bar[cnt]=RIGHT;
usleep(speed); // sleep(1) 这边采用毫秒为单位快一点
}
printf("\n");
}