1.Linux体系结构
1.1组成部分
(1)Linux内核:管理着操作系统的性能
(2)shell:命令行解释器
(3)文件系统:存储和管理数据的一种方式
(3.1)添加新的管理系统的方式:挂载(计算机使自身的目录和文件被程序员用自身的文件系统去访问的一个过程)
(4)实用程序:gcc编译器,vim编译器
2.基础命令
1.1软件包操作
(1)软件包安装:sudo(增加权限)+apt-get install +安装文件
(2)更新软件包:sudo apt-get update
1.2用户相关命令
(1)切换用户
(1.1)sudo su/su:不会改变目录的位置
(1.2)sudo -:会改变目录的位置,默认的切换到家目录下
(2)添加用户
(2.1)虚假添加:/mkdir aaa(此时用户并没有建立)
(2.2)真实添加:sudo adduser aaa(此时已经添加完成,并可以在/etc/password下查看)
(3)删除用户
(3.1)第一步:deluser aaa显示的删除成功,但是文件夹还存在
第二步:使用 rm -rf删除aaa,才能成功删除
(3.2)一步删除:sudo deluser --remove-home aaa
(4)环境变量:env,会列出所有的环境
(4.1)暂时添加环境变量:在终端上添加 exprot PATH=/home/linux/test:$PATH
(4.2)永久添加环境变量:在配置文件当中添加 exprot PATH=/home/linux/test:$PATH
3.shell命令
(1)echo:输出
(1.1)输出环境变量
(1.11)不带引号:此时是环境变量,输出此环境变量所在的绝对路径
(1.12)带了单引号:此时是字符串,所以原样输出
(1.13)带了双引号:此时是环境变量,输出此环境变量所在的绝对路径
(1.2)输出普通字符串
(1.21)不带引号:此时是普通字符串,所以原样输出
(1.22)带了单引号:此时是普通字符串,所以原样输出
(1.23)带了双引号:此时是普通字符串,所以原样输出
(1.3)空格和斜杠
(1.31)不带引号:不管输入多少空格,只输出一个,斜杠偶数两两结合,奇数单独一个不输出
(1.32)带了单引号:空格和斜杠原样输出
(1.33)带了双引号:空格输入多少,就输出多少,斜杠偶数两两结合,奇数单独一个输出
(2)cat:查看指定文件的内容,并显示在终端上
(3)grep:查找指定文件里面的内容
(3.1)格式:grep -n/v/c +参数(路径)
(4)find:查找指定文件
(4.1)格式:find +路径+文件名
(5)chmod:给普通文件和文件夹添加权限,文件最高权限666,文件夹最高权限777。
(5.1)符号标记法:chmod +u+x +文件//chmod +u+x +文件夹
(5.2)数字表示法:chmod 666 +文件//chmod 777 +文件夹
(6)tar:打包 tar -cvf file.tar*.c;解包 tar -xvf file.tar -C
(7)bzip2/gzip:打包压缩 tar -cvf file.tar.gz/bz2 *.c 解包压缩 tar -cvf file.tar.gz/bz2 -C
(8)ln:创建链接文件
(8.1)软链接文件:ln -s (绝对路径/相对路径)源文件 目标文件
(8.2)硬链接文件:ln (绝对路径/相对路径)源文件 目标文件
(9)输入输出重定向
(9.1)>(覆盖)/>>(追加):两者都只会保留正确的信息,而一旦出现错误的信息,前者会清空所有内容,后者会清除错误内容,保留正确内容
(9.2)2>/2>>:两者都只会保留错误的信息,而一旦出现正确的信息,前者会清空所有内容,后者会清除正确内容,保留错误内容
4.shell脚本
(1)书写步骤:创建文件 文件名.sh;写脚本;更改文件的权限 给文件加上可执行的权限;运行 ./文件名.sh
5.shell变量
(1)普通变量:定义变量名;赋值;
(2)位置变量:通过位置去给变量赋值
(3)系统预定义变量:系统已经预先定义好的变量
(3.1)$@:显示命令行提示符除了执行文件之外的其他内容
(3.2)$#:统计除了执行文件之外其他内容的个数
(3.3)$*:和$@一样
(3.4)$?:返回上一行代码的退出状态,而不是脚本的退出状态
(4)环境变量
6.shell程序和语句
(1)说明性语句:指明注释器的位置——#!/bin/bash
(2)功能性命令:实现一定功能的命令
(2.1)输入输出:read(输入);echo(输出)
(2.2)算术命令:+;-;\*;/;%
(2.3)测试命令([ n1 选项 n2 ])=Test n1 选项 n2
(2.4)逻辑:&&([ a -gt 10 ] && [ a -lt 50 ]);||([ a -gt 10 ] || [ a -lt 50 ])
7.功能性语句
(1)选择
(1.1)if else
If 条件 (一般时测试命令)
Then
命令表
elif 条件
Then
命令表
。。。。。。
else
命令表
Fi
(1.2)case 选项 in
①Case 选项 in
模式1)
命令表
;;
模式2)
命令表
;;
。。。。。。。。
*)-------->和C->switch-case里的default一样的效果
命令表
;;
Esac
(2)循环
(2.1)for 命令 in 单词表
For 命令 in 命令表
Do
命令表
Done
(2.2)while 条件/(true)
(1)While 条件
Do
命令表
Done
(2)While true ---->死循环
Do
命令表
Done
8.shell函数
(1)格式
函数名()
{
命令表
}
Add()
{
Add_value= `expr a + b`
}
(2)赋值方法:直接赋值;位置变量;Read输入
(3)调用函数的方法:命令置换的方式;直接赋值;位置变量;Read输入
9.递归函数(计算阶乘)
#include<stdio.h>
int func(int n)
{
if(1==n || 0==n)
{
return 1;
}
return n*func(n-1);
}
int main(int argc,const char *a[])
{
int n;
printf("输入阶乘\n");
scanf("%d",&n);
printf("%d的阶乘是%d\n",n,func(n));
}
10.
(1)malloc运用
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int n;
int i;
printf("输入数字\n");
scanf("%d",&n);
int *p=(int *)malloc(sizeof(int)*n);
if(p==NULL)
{
printf("error\n");
}
memset(p,0,sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf ("%d",&p[i]);
}
for(i=0;i<n;i++)
{
printf ("%d\n",p[i]);
}
}
(2)free运用
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int *get_memory(int n)
{
int *p,i;
if((p=(int *)malloc(sizeof(int)*n))==NULL)
{
printf("error\n");
}
memset(p,n,sizeof(int)*n);
for(i=0;i<n;i++)
{
p[i]=i+1;
}
return p;
}
int main()
{
int n;
int i;
int *p;
printf("输入数字\n");
scanf("%d",&n);
if((p= get_memory(n))==NULL)
{
return 0;
}
for(i=0;i<n;i++)
{
printf ("%d\n",p[i]);
}
}
11.结构体
(1)格式
Struct 结构体名
{
数据类型1 变量名;
数据类型2 变量名;
。。。。。。。。
};