Linux基础(一)


在这里插入图片描述

嵌入式

以应用为中心,以专用计算机技术为基础,软硬件可裁剪(功能需求、成本(材料、人力、宣传、测
试)、维护、体积、代码量等)

linux系统的历史

unix
面向学校
1969年,AT&T公司的贝尔实验室与MIT合作开发的Unix,旨在于创建一个用于大型、并行、多用户的操作系统。
gun
面向人民
1991年,芬兰赫尔辛基大学的学生Linus Torvals为了能在家里的PC机上使用与学校一样的操作系统,开始编写了类UNIX。
ubuntu
直到至今
核心宗旨:人道待人

shell命令

一般形式

指令 选项 对象
选项和对象可以没有,指令和选项、对象之间都要空开

复习:
我是谁(查看当前用户)—woami
我在哪儿(查看当前用户所在路径)—pwd
我有什么(查看当前用户所在路径下的子文件)–ls

ls -l:显示文件属性查看
ls -a:显示文件,包括隐藏文件(以.开头的)
ls -R:递归形式查看文件目录的子文件
我要去哪儿(进入一个路径或文件目录)---cd
cd ..--返回上一级目录
cd -:返回上一次目录
cd:直接回到家目录
touch--创建普通文件
rm---删除普通文件
mkdir---创建目录文件
rmdir--删除目录文件,但是只能删除空目录
rm -r:删除目录文件
cp:文件的复制
cp 文件1 文件2---把文件1的内容复制到文件2,如果没有文件2,先创建,再复制
mv--文件的剪切(重命名)
mv 文件1 文件2---把文件1的内容移动到文件2,如果没有文件2,先创建,再移动
cat--查看普通文件的内容
man

快捷键

ctrl+c:终止进程回到终端
ctrl+l:清屏
ctrl+shift+n/t:新建一个终端
alt+tab:切换终端
tab:补全命令
ctrl+shift+‘+’:调大字体
ctrl+‘-’:缩小字体
上下键:翻找历史指令

vi编辑器

.vimrc--配置文件
source .vimrc:让配置文件生效打开一个文件,如果没有这个文件,才会新建文件再打开命令行模式
yy
nyy
p
dd
ndd
gg--回到代码开头
G--去到代码末尾
gg=G--自动缩进代码

插入模式

i(insert)---从光标前开始插入
a(append)--从光标后开始插入
o(other)--从光标下一行开始插入
底行模式
shift+:
w--保存
q--退出
q!--强制退出
x--保存并退出
vsp 文件名:打开另一个文件
ctrl+w w:切换光标所在的文件位置
set mouse=a:鼠标使能
set mouse-=a:鼠标失效
set number--显示代码行数
set nonumber--不显示代码行数

替换:

s/str1/str2:替换光标所在的一行的第一个str1
s/str1/str2/g:替换光标所在的一行的所有str1
%s/str1/str2/g:替换程序里面所有的str1
gedit编辑器
和word文档类似
操作简单,但是不会自动缩进,代码的可观性比较差

gcc编译器

编译成功自动生成一个a.out的执行文件,编译失败显示错误信息
gcc编译的四个步骤:
预处理
展开头文件gcc -E 1.c -o 1.i
编译:找出代码错误gcc -S 1.i -o 1.s
汇编将代码转成计算机能识别的二进制语言

gcc -c 1.s -o 1.o

链接:生成代码的可执行文件

gcc 1.o -o zc

文件管理
linux下一切皆文件
根目录:

bin:二进制文件或二进制可执行程序
etc:配置文件
mnt:挂在文件
lib:库文件
dev:设备文件
home:用户的家目录文件
root:权限文件
boot:启动文件
ls -l
-rw-rw-r-- 1 hqyj hqyj 387 4月 15 10:57 1.c
-rw-rw-r--

第一个字符:代表文件的类型

-:普通文件
d:目录文件
b:块设备文件
c:字符设备文件
l:链接文件
s:套接字文件
p:管道文件
九个字符:代表文件的权限
r:可读权限
w:可写权限
x:可执行权限

前三个是用户自己的权限,中间三个是用户组的权限,最后三个是其他用户的权限
文件的权限用八进制表示:
例如:rw-rw-r--
二进制表示为110110100转成八进制0664
文件权限的修改:chmod
1、通过进制修改文件权限例如:chmod 0777 1.c
2、通过算术符修改文件权限

u:用户自己
g:用户组
o:其他用户

例如:

chmod u+x 1.c:代表只给用户自己增加执行权限

链接文件–ln

ln 原文件 硬链接文件名

生成硬链接,硬链接文件类型和原文件一样都是普通文件,硬链接文件大小和原文件一样,修改其中的
一个文件,另一个文件也会跟着被修改,删除原文件,链接文件依旧可以使用

ln 原文件 -s 软链接文件名

生成软链接文件,软链接文件类型为链接文件,大小和源文件不同,一般会小很多,修改其中一个文件,另一个文件也跟着被修改,删除原文件,软链接文件失效

hqyj hqyj 387 4月 15 10:57 1.c
用户名 用户组名 文件大小 时间戳 文件名

进程管理

ps:查看前台进程,一般为(bash,ps)
ps -aux:查看所有进程
top:以cpu占比从高到低排序
kill -9:杀死一个进程
pstree:以树的形式查看进程
ps -ef:查看所有进程

用户管理

linux系统是一个多用户、多任务的操作系统
sudo:暂时赋予当前用户超级用户的权限
adduser:增加一个用户
sudo adduser 用户名
输入密码,一直按回车
su 用户名:切换用户,su不加用户名默认回到root用户,root用户可以访问其他用户的文件,不需要输入
密码
exit:退出当前用户
deluser:只能删除空用户,
--remove-home:删除用户下的文件或者备份文件
彻底删除:/etc/passwd--删除用户,/etc/group--删除用户组
passwd:修改用户密码
只有超级用户不需要输入以前的用户密码,其他用户在修改密码时都需要输入以前的密码
修改用户名:
sudo usermod -d /home/day1 -m -l day1 zcc
sudo usermod -d /home/[新用户名] -m -l 【新用户名】 【老用户名】

shell命令的特殊字符

通配符:
*:通配所有字符

{m..n}:通配m到n之间的连续的字符
【】:只通配一个字符
【12345】:通配【】里面所有的字符
【1-5】:通配的是1-5之间连续的字符
【^7】:除了7.c的文件不删,其它都删
?:通配一个字符
例如:
rm.c:删除所有以一个字符命名的c语言文件
|:把前者的输出作为后者输入
例如:
ls | cat===把ls显示出来的文件名显示到终端
` `:命令置换符
把后者的输出作为前者的参数
例如:
cat `ls`===查看所有ls显示的文件的内容输入输出重定向
>:覆盖
>>:追加

例如:

cat >>1.c===把在终端上输入的内容重定向到1.c这个文件

shell的其它指令

echo:终端输出
1、echo hello world--会自动缩进空格保留一个
2、echo “hello world”---原样输出
grep:查找代码的字符串
一般形式:
grep “查询的字符串” 查询的文件1 查询的文件2.。。。
例如:grep “hello” 1.c 2.c
file:查询文件的类型
find:查找目录文件的子文件

重难点

shell脚本

本质:一系列shell命令的集合
怎么去写一个shell脚本

1、创建.sh的shell脚本文件
2、在脚本里面写shell命令
3、执行shell脚本

执行方式:

a、先给shell脚本文件添加执行权限
chmod 0777 shell脚本文件名
再执行:./文件名.sh
b、用bash解释器解释shell脚本文件
bash 1.sh

解释器和编译器的区别:

编译器:gcc c语言、c++语言
解释器:shll脚本、python

解释器会报错误地方但不会说明错误原因,并且出错也会继续执行shell脚本,直到结束
例如:

#!/bin/bash---解释器的路径,不加默认为/bin/bash,加了一定要加对,不然用修改权限的方法执行会报错
ls
cat 1.c
ajskdhakd
echo "hello world"

shell变量

自定义变量:

用户自己定义的变量
变量的定义:

变量名=值
没有数据类型,shell脚本里面所有变量默认为字符串类型
=两边不能留空
没有分号,一般以换行结束一条shell语句

变量的调用:

$变量名

一般在调用变量的时候用{}括起来,防止和其它变量后者字符串连在一起
变量的赋值:
不能直接变量=变量,右边一定是一个值

1 #!/bin/bash
2
3 val=12
4 echo "val=${val}asda"

练习:交换两个变量的值(shell脚本)

1 #!/bin/bash
2
3 val1=12
4 val2=34
5 temp=$val1
6 val1=$val2
7 val2=$temp
8 echo "val1=$val1 val2=$val2"

位置变量

把命令行参数的值通过终端传递给特定的变量,变量从0开始调用,超过9以上需要用{}括起来
例如:

1 #!/bin/bash
2
3 echo $0 $1 $2 $3 $4 $5 $6 ${10}

结果:

hqyj@ubuntu:~/240201/day2$ bash 3.sh 12 34 hello world 56 78 90 100 200 300
3.sh 12 34 hello world 56 78 300

预定义变量

计算机自己定义好的一些特殊的变量名

$@:命令行参数的内容,不包括$0
$*:命令行参数的内容,不包括$0
$#:命令行参数的个数,不包括$0
$?:打印上一条shell语句的返回状态,0为真,其它为假(0~127)

环境变量

env可以查看所有的环境变量
在调用的时候也需要加$

变量的四则运算

变量进行

+-*/%

(())

能进行+-*/%运算
能进行幂数运算
不能进行浮点型运算
在调用的时候需要也加$
例如:

1 #!/bin/bash
2 val1=2
3 val2=34
4 val3=$(($val1+$val))
5 echo $val3

【】

能进行+-*/%运算
能进行幂数运算
不能进行浮点型运算
在调用的时候需要也加$
例如:

1 #!/bin/bash
2 val1=2
3 val2=34
4 val3=$[$val1+$val2]
5 echo $val3

expr进行运算

需要使用命令置换符把结果置换出来
运算符两边需要空开
在进行乘法运算的时候需要给*加\转义
不能进行幂数运算
不能浮点型运算
例如:

1 #!/bin/bash
2 val1=2
3 val2=34
4 val3=`expr $val1 \* 2`
5 echo $val3

练习:提取一个四位数的千位百位十位个位出来(shell脚本)

1 #!/bin/bash
2 val1=9645
3 th=$[$val1/1000]
4 hu=$[$val1/100%10]
5 ten=$[$val1/10%10]
6 num=$[$val1%10]
7 echo "千位=$th"
8 echo "百位=$hu"
9 echo "十位=$ten"
10 echo "个位=$num"

shell语句

解释型语句

注释一行

#

注释多行

:<<!

shell语句块

!
:<<EOF
shell语句块
EOF

功能型语句

read–变量的输入

可以有多个变量,前面依次赋值,最后一个变量会接受所有没有被赋值的值(字符串)

1 #!/bin/bash
2 read val1 val2 val3
3 th=$[$val1/1000]
4 hu=$[$val1/100%10]
5 ten=$[$val1/10%10]
6 num=$[$val1%10]
7 echo "千位=$th"
8 echo "百位=$hu"
9 echo "十位=$ten"
10 echo "个位=$num"
11 echo $val2
12 echo $val3
结果:
1234 5678 9010 8765
千位=1
百位=2
十位=3
个位=4
5678
9010 8765
-p:增加提示语
1 #!/bin/bash
2 read -p "请输入一个值" val1
3 th=$[$val1/1000]
4 hu=$[$val1/100%10]
5 ten=$[$val1/10%10]
6 num=$[$val1%10]
7 echo "千位=$th"
8 echo "百位=$hu"
9 echo "十位=$ten"
10 echo "个位=$num"
-t:限制时间输入
read -t 5 val1
-n:限制字符个数输入
-s:隐藏输入

test—测试语句

字符串

等号两边都需要空开,不然就是赋值
字符串相等

test 字符串1 = 字符串2
1 #!/bin/bash
2
3 str1="hello"
4 str2="hello"
5 test $str1 = $str2
6 echo $?

字符串不相等

test 字符串1 != 字符串2
-z:字符串是否为空
-n:字符串是否不为空

整型

-eq:相等
-ne:不相等
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于

逻辑判断:

-a
-o
!
1 #!/bin/bash
2
3 str1=12
4 str2=34
5 test ! $str1 -gt $str2 -o 23 -gt 34
6 echo $?

文件
作业:
复习今天的指令
实现一个函数,十进制转二进制和十进制转十六进制

#include <stdio.h>
#include <string.h>
#define N 100
#define C 8
int func()
{ 
    int a,b,d;
    int Z[N];
    int Y[N];
    printf("请告诉我要转换的进制类型(2或16):\n");
    scanf("%d",&a);
    if(a==2)
    {   
        printf("请输入一个数:\n");
        scanf("%d",&b);
        int e=b;
        for(int i=0;i<C;i++)
        {
            d=e%2;
            e=e/2;
            Z[C-i-1]=d;    
        } 
        printf("十进制数字%d的二进制数为:",b);
        for(int i=0;i<C;i++)
        {
            printf("%d", Z[i]);
        }
    }
    else if(a==16)
    {
        printf("请输入一个数:\n");
        scanf("%d",&b);
        int e=b;
        for (int i=0;i<C;i++)
        {
            d=e%16;
            e=e/16;
            Z[C-i-1]=d;
            if(Z[i]>10)
            {
                Z[i]=Z[i]-10+'A';
            }
        }
        printf("十进制数字%d的十六进制数为:",b);
        for(int i=0;i<C;i++)
        {
            if (Z[i] >= 'A')
            {
                printf("%c", Z[i]);
            }
            else
            {
                printf("%d", Z[i]);
            } 
        }
    }
    else
    {
        printf("输入有误,请重新输入");
    }
    puts(" ");
    return 0;
} 

int main(int argc, char *argv[])
{
    while(1)
    {
        func();
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

磁铁的朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值