day 2

复习

命令

ls 查看文件夹的文件列表

ls -a 显示全部文件

ls -l 显示详情

chmod 改变文件的权限 d - rw-rw-r–

chmod +x 文件名

chmod 664 文件名

man 查看文档 1 3 7

info 查看命令

help 查看命令 ls --help

cd 改变文件夹

绝对路径 从根开始的路径 /

相对路径 以当前位置为起点 . 当前位置 …上一级

pwd 查看当前路径的绝对路径

touch 创建文件或者改变文件的时间戳

mkdir 创建目录

mv 移动或者重命名

目标文件夹存在就是移动,不存在就是重命名

rm 删除文件 删除目录rm -r

cp 拷贝文件或者目录

cat 查看文件信息

more 查看文件信息

less 查看文件信息

head 查看文件的前几行

tail 查看文件的后几行

vim

三种模式

命令模式 yn dn p 88G ZZ

插入模式 A a I i O o

底行模式

作业

选择题

1.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是( B )

A)7 B)8 C)6 D)2

2.下列四组选项中,均不是C语言关键字的选项是 ( A )

预处理的指令不是关键字

A)define IF type B) getc char printf

C)include scanf case D) while go pow

3.下面四个选项中,均是C语言关键字的选项是 ( B )

A) auto enum include B) switch typedef continue

C) signed union scanf D) if struct type

4.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 ( C )

A)必须为字母 B)必须为下划线

C)必须为字母或下划线 D)可以是字母,数字和下划线中任一种字符

5.执行以下语句后a的值为( C )

int a,b,c;

a=b=c=1;

++a || ++b &&++c ;

&&的优先级高于||的优先级

A)错误 B)0 C)2 D)1

6.逻辑运算符两侧运算对象的数据类型( C )。

A)只能是0或1

B)只能是0或非0正数

C)只能是整型或字符型数据

D)可以是任何类型的数据

7.设x,y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是 ( D )

A) ‘y’&&‘y’ B) x<=y

C) x||y+z&&y-z D) !(x<y)&&(!z||1)

8.已知x=43,ch=‘A’,y=0则表达式(x>=y&&ch<‘B’&&!y)的值是 ( C )

A)0 B)语法错 C)1 D)“假”

9.若希望当A的值为奇数时,表达式的值为"真",A的值为偶数?表达式的值为"假"。则以下不能满足要求的表达式是

( C )

!(A%2)   当A是偶数  A%2 0    1

A) A%21 B)!(A%20) C)!(A%2) D)A%2

10.判断char型变量c1是否为小写字母?正确表达式为( D )

​ A) ‘a’<=c1<=‘z’ B) (c1>=a)&&(c1<=z)

​ C) (‘a’>=c1)||(‘z’<=c1) D) (c1>=‘a’)&&(c1<=‘z’)

作业:

​ 1 工作目录下创建目录shared及shared1

linux@ubuntu:~$ mkdir shared shared1

​ 2 在shared1目录中创建9个子目录a1-a9

linux@ubuntu:~$ cd shared1

linux@ubuntu:~/shared1$ mkdir a1 a2 a3 a4 a5 a6 a7 a8 a9

​ 3 在a5中创建3个文件file1-file3

linux@ubuntu:~/shared1$ touch a5/file1 a5/file2 a5/file3

​ 4 在shared目录中创建两个目录old和new

linux@ubuntu:~/shared1$ cd …/shared

linux@ubuntu:~/shared$ mkdir old new

​ 5 将shared目录更名为back

linux@ubuntu:~/shared$ cd …

linux@ubuntu:~$ mv shared back

​ 6 拷贝/usr/include/stdio.h 到old内

linux@ubuntu:~$ cp /usr/include/stdio.h back/old

​ 7 移动shared1目录到back目录内 删除a1-a4 a6-a9

linux@ubuntu:~$ mv shared1 back

linux@ubuntu:~$ rm -r back/shared1/a[^5]

​ 8 将a5目录改名为front 并移动到new目录内

linux@ubuntu:~$ mv back/shared1/a5 back/new/front

1、进程管理

1)概念:

进程: 程序运行,系统会为程序预备一些资源(内存、cpu。。。),是我们程序运行所需要的一些资源,也可以 理解成程序运行的环境。

线程:线程是在进程中运行逻辑的单位。

进程中至少需要一个线程,任何线程都不可以脱离进程。

pid : 进程id (process id) 叫做进程号。 进程号由操作系统进行分配。用来识别唯一的进程。

ppid : 父进程id . (parent process id)

init进程: 此进程 的进程id 为 1. 这个进程不可以被 kill

父子进程: 创建出新进程的进程就是父进程。 被创建出来的,叫做子进程。

僵尸进程: 一个已经不再运行的进程。但是还没有消亡。还占用着系统资源。

正常情况下当父进程死掉的时候,会让子进程也死掉。当父进程死掉但是子进程没死,称之为孤儿进程。

孤儿进程: 是一个没有父进程的进程。 他会被 init 进程领养。

2)命令:

查看进程: ps aux ps -ef

查看进程树: pstree

杀掉进程: kill kill 2619 kill -9 2581 //必杀 kill -9 pid

ctrl + c 结束进程

ctrl + z 将进程暂停,并扔到后台。

fg 将进程调回前台。

练习:

编写一个程序,运行起来,找到该进程的进程id,并终止该进程。

#include <stdio.h>

int main()
{
	while(1)
	{
		printf("还活着\n");
		sleep(1);
	}
	return 0;
}

linux 3343 0.0 0.0 1988 280 pts/0 S+ 18:28 0:00 ./a.out

kill 3343 杀死这个进程

2、文件管理

1.查找文件

find

查找格式: find 路径 选项 选项值

示例: find /usr -name stdlib.h

find是搜索每个文件夹,慢。

which

查找可执行文件,一般用来查找命令 (相比较而言,查找速度快。因为which 只在指定的路径下查找,查找的是可执行文件)

which并不是在路径里搜索文件,它是去环境变量里找。

示例:which ls

locate

	sudo updatedb

​ locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。

​ locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,

​ 所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库

练习:

使用不同的办法,找到 unistd.h 文件、 ps 可执行文件、 passwd 文件 所在位置。

locate unistd.h

which ps

locate passwd

2. 压缩文件

tar

压缩: tar cvfz dir.tar.gz dir

解压缩: tar xvfz dir.tar.gz

tar xzvf test809.tar.gz -C test 解压到指定路径下

​ c 创建压缩文件

​ x 解压缩

​ v 显示压缩过程

​ f 将多个文件打包生成一个文件

​ z 以gzip格式压缩

练习:

将工作目录下的 Desktop 目录压缩。 然后将压缩文件移动到 /tmp 下。 然后在此目录下,解压文件。

linux@ubuntu:~$ tar cvfz desktop.tar.gz Desktop

linux@ubuntu:~$ sudo tar xvfz desktop.tar.gz -C /tmp

3.链接文件

ln

建立硬链接: ln an.c an.bak // 根据物理编号inode 节点,建立连接

​ 此时 an.c 和an.bak 是同一个文件的两个inode节点(文件节点)

建立软链接: ln -s an.c an.lnk // 根据路径 建立连接。 windows快捷方式一个概念

硬链接实验:

linux@ubuntu:~/22011$ ln test4.c test4.bak
linux@ubuntu:~/22011$ ls -l test4.c
-rw-rw-r-- 2 linux linux 111 Jan 18 17:35 test4.c
linux@ubuntu:~/22011$ rm test4.c
linux@ubuntu:~/22011$ vi test4.bak
linux@ubuntu:~/22011$ gcc test4.bak
test4.bak: file not recognized: File format not recognized
collect2: ld returned 1 exit status
linux@ubuntu:~/22011$ mv test4.bak test4.c
linux@ubuntu:~/22011$ gcc test4.c

软连接:

linux@ubuntu:~/22011$ ln -s test4.c test4.bak
linux@ubuntu:~/22011$ ls
a (3rd copy).c a (7th copy).c a.out t1.c t5.c t9.c test4.c
a (4th copy).c a (another copy).c b.c t2.c t6.c test2.c test.c
a (5th copy).c a.c c.c t3.c t7.c test3.c testdir
a (6th copy).c a (copy).c t10.c t4.c t8.c test4.bak
linux@ubuntu:~/22011$ ls -l test4.c
-rw-rw-r-- 1 linux linux 111 Jan 18 19:47 test4.c
linux@ubuntu:~/22011$ vi test4.bak
linux@ubuntu:~/22011$ rm test4.c
linux@ubuntu:~/22011$ ls
a (3rd copy).c a (7th copy).c a.out t1.c t5.c t9.c test.c
a (4th copy).c a (another copy).c b.c t2.c t6.c test2.c testdir
a (5th copy).c a.c c.c t3.c t7.c test3.c
a (6th copy).c a (copy).c t10.c t4.c t8.c test4.bak
linux@ubuntu:~/22011$ vi test4.bak
linux@ubuntu:~/22011$ cat test4.bak
cat: test4.bak: No such file or directory

总结:

硬链接文件,相当于一个实时备份文件。 同时,文件的链接数+1 。 如果想删除文件,需要删除所有的索引域。

​ 索引域为0时,数据域才真正的被删除。如果文件多于1个索引。 而只删除了其中一个索引。文件的数据域并不会丢失。

软链接文件:相当于一个快捷方式。 它并不会增加文件的链接数。 是一个独立的快捷方式。 如果源文件被删除掉,

​ 这个文件就真的被删除掉了。 此时软链接文件失效。 只要在原来的路径下,创建相同名字的文件,则软链接文件重新生效 。

4.管道符

|

作用: 前一个命令的输出,作为第二个命令的输入。

grep 在文本中查找关键字

cat test.c|grep for 查看test.c的内容,将查找到的内容作为grep的输入。

管道符的作用,将cat test.c的输出作为输入传给grep命令,grep命令会在输入中查找for关键字

练习:

查找根目录下是否存在 etc 这个文件。

linux@ubuntu:~/22011$ ls /|grep etc

练习:

查找 /etc 下是否存在 passwd 这个文件。

linux@ubuntu:~/22011$ ls /etc|grep passwd

练习:

查找 所有进程中是否存在 bash 这个进程。

linux@ubuntu:~/22011$ ps aux|grep bash

练习:

查找 /etc/passwd 文件中,是否存在 deamon 这个用户。

linux@ubuntu:~/22011$ cat /etc/passwd|grep deamon

5. 重定向符号 :

>

> 重定向 会覆盖原来的内容

>> 追加重定向 会在原有内容的后面追加新内容

示例: ls / > file.txt

3、网络管理

1.查看网络配置信息

ifconfig

eth0 : 第一块物理网卡

Ethernet :以太网

HWaddr 00:0c:29:82:8f:99 物理地址

inet addr:192.168.30.234 ipv4 地址

Bcast:192.168.30.255 广播地址

Mask:255.255.255.0 子网掩码

inet6 addr: fe80::20c:29ff:fe82:8f99/64 ipv6 地址

Local Loopback 本地环回

inet addr:127.0.0.1 本地环回地址

2.修改ip 命令:

sudo ifconfig eth0 192.168.40.199

ip地址就是我们的计算机在网络上的身份标识。

3.ping 测试连通性

ping 192.168.40.101

这个命令的目的是测试网络是否通畅。

4.安装包问题

a) ubuntu software center ubuntu 软件应用中心

b) sudo dpkg -i *.deb 本地安装

c) sudo apt-get install sl 网络安装

4、Gcc编译器

gcc(是一个编译器, 是GNU组织主要的编译工具)

​ gcc 是一个跨平台(跨软件平台 和 硬件平台)的编译器

跨平台,代码可以通过不同的编译器编译到适合不同平台运行的程序。

1.编译命令

gcc 编译在不指定生成的可执行文件的名字时,默认的名字是 a.out

​ -o 指定生成文件的名称

​ gcc hello.c -o hello

2.gcc 编译步骤

​ 经过了四步 1 预处理 2 编译 3 汇编 4 链接

​ (1) 预处理

​ 如果只做预处理 gcc -E -o hello.i hello.c

​ 1) 如果有头文件包含,就将头文件内容 copy 到预处理文件中

​ 预处理文件通常 .i

​ 2) 如果程序中有注释,会去掉注释

​ 3) 如果程序中有宏定义,用宏值替换宏名

​ (2) 编译(将c 文件变成汇编文件)

​ 如果只做编译 gcc -S -o hello.s hello.c

​ hello.s 是汇编语言源文件

​ 汇编语言:是最低层的编程语言,不容易理解

​ (3) 汇编(将c 文件变成机器码文件(二进制文件))

​ 如果只做汇编 gcc -c hello.c, 会自动生成hello.o (机器码文件, 二进制文件)

​ hello.o (机器码文件, 二进制文件)

​ 机器码文件 是 计算机硬件可以识别的代码

​ hello.o 又称为目标文件

​ (4) 链接 ///将多个.o目标文件、库文件,链接在一起, 生成一个可执行文件

​ gcc -o hello hello.c

-o 需要生成可执行文件的名字 hello 最终生成的可执行文件的名字

hello可执行文件是需要运行的 ./hello

​ 库文件:printf 是系统实现的,系统会将printf做成库,给开发者用

3. gcc编译多个文件

main.c add.c del.c

main.c
void add();
void del();

int main()
{
    add();
    del();
    return 0;
}

///add.c//
#include <stdio.h>
void add()
{
	printf("add\n");
}

///del.c/
#include <stdio.h>
void del()
{
	printf("del\n");
}

​ gcc -o main main.c add.c del.c

4.程序编类型问题

​ (1) 错误(error) , 如果有error程序编译通不过,运行不了

​ (2) 警告(warning), 如果程序有警告,可以编译通过,并运行

​ 可能会有问题,或者代码不规范,都是警告

​ error:

​ 1)

​ hello.c:6:17: error: ‘b’ undeclared (first use in this function)

​ hello.c 的第6行,有一个error, b 未定义 (通常是单词写错了)

​ 2)

​ hello.c:4:1: error: expected declaration specifiers or ‘…’ before ‘{’ token

​ 通常是语法错误,少写了 ; } )

​ 3 )

​ hello.c:(.text+0x21): undefined reference to `prntf’

​ collect2: ld returned 1 exit status

​ 链接时的错误,找不到prntf, 通常也是单词写错了

​ 默认情况gcc代码检查不是很严格的,有些警告不显示

​ 如果想显示警告

​ -Wall 显示所有警告, 建议加-Wall

​ -w 忽略所有警告, 建议不加此选项

​ 1

​ hello.c: In function ‘main’:

​ hello.c:7:1: warning: control reaches end of non-void function [-Wreturn-type]

​ 在main函数中,有一个警告,在第7行,没写返回值

​ 2

​ hello.c:6:8: warning: ‘a’ is used uninitialized in this function [-Wuninitialized]

​ a 变量没有被初始化

​ 3

​ hello.c:5:6: warning: unused variable ‘a’ [-Wunused-variable]

​ 定义了一个变量a,但没使用

5、认识shell脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6KVIuwEq-1645664391912)(C:\Users\mudonghai\Desktop\linux&C高级\day2\image-20220119163308435.png)]

1. 什么是脚本

脚本:新华词典解释——表演戏剧、曲艺,摄制电影等所依据的本子,里面记载台词、故事情节等。

脚本文件,编写脚本代码-----------相当于剧本

解析器,阅读脚本中的代码,根据代码中的指令做事---------相当于演员

常见的脚本语言:

python

js ----- javascript

脚本语言的特点(解释型语言):

脚本语言不需要编译,脚本语言的解析器可以直接阅读脚本语言并按照指令执行。解析器本身就是一个程序,被CPU执行的程序。脚本语言的特点注定脚本语言的执行效率不可能比编译型语言高。

脚本语言简单易学。

编译型语言:

C语言

C++语言

java 是半编译半解释型语言,java虚拟机(jvm)运行java。java虚拟机不是直接运行java代码,java代码也需要编译,但是不是编译给cpu看,而是编译给java虚拟机看。

什么是 shell 脚本 ? linux命令的有序集合。用来批处理linux命令。

shell脚本是专门为了批处理linux指令而诞生的脚本语言,并不适合表达复杂逻辑。

shell脚本的解析器 bash

编程语言分类:

(1)解释性语言: 无需编译,执行即可。

shell

python

html5 (标签语言)

(2)编译型语言: 先编译,在没有错误之后,才能正确运行。

c

c++

2.初识 shell 脚本

1. 开头

#!/bin/bash # 告诉系统,当前脚本由哪个程序运行。

2. 示例:

vi test.sh

#! /bin/bash #告诉系统,使用bash解析器作为当前脚本的解析器

clear # 执行clear命令,清屏

ls # 执行ls 命令

date # 执行date命令 输出日期

touch file.txt #执行touch file.txt

ls # 执行ls命令

3. 脚本的执行

方式一; 添加权限: chmod +x test.sh ./test.sh

方式二: 脚本解释bash : bash test.sh

4. 注释:

#

5. 变量

(1) 为了方便识别变量,变量名通常用大写字符

(2) 不能以数字开头,开头必须是字母或者下划线

(3) 不能使用标点符号

脚本语言是弱类型,定义变量不需要指定类型,直接赋值就可以。

示例:

#! /bin/bash

NUMBER=2 #定义了一个变量,变量里的值是2

echo NUMBER #输出NUMBER 既没有写变量也没有读变量,所以这一行和变量没有关系,仅仅是输出 NUMBER

echo KaTeX parse error: Expected 'EOF', got '#' at position 11: NUMBER #̲在变量前,是读取变量的值,所以这一行输出2

echo 输出一行内容

6. 位置参数 与 预设变量

1)位置参数: 0 1 2 3 4 …

位置参数的值,如何取值: 用$

示例代码:

echo $0

echo $1

echo $2

echo $3

2)预设变量: # *

$# : 位置参数的个数。

$* : 位置参数都有谁,用空格隔开,把所有的位置参数都保存在这个预设变量里

练习:

请编写shell脚本: 创建目录文件,目录文件的名字由位置参数决定。

创建完目录之后,在目录中再创建一个普通文件,名字也由位置参数决定。

7. 功能语句

输出: echo 输出一行

输入: read 输入

示例:

vi read.sh

#! /bin/bash

read -p "enter string1 and string2: " STRING1 STRING2

echo $STRING1 $STRING2

练习:

创建一个目录文件,然后,在此目录下创建一个普通文件。 文件名字由输入决定。

8. “” 与 ''

示例:

#! /bin/bash

FILE=m.txt

echo “$FILE” #不完全输出 用变量的值代替变量

echo ‘$FILE’ #完全输出 完全按照写的样子输出

作业:选择题

1.请阅读以下程序:

main()

{

​ int a=5,b=0,c=0;

​ if(a=b+c) printf("***\n");

​ else printf("$$$\n");

}

以上程序: ( )

A)有语法错不能通过编译 C) 可以通过编译但不能通过连接

B)输出*** D) 输出$$$

2.一个C语言程序是由 ( ) 。

A)一个主程序和若干子程序组成 B)函数组成

C)若干过程组成 D)若干子程序组成

3.若x,i,j和k都是int型变量,则执行下面表达式后x的值为( )。

x=(i=4,j=16,k=32)

A)4 B)16 C)32 D)52

4.0xff的二进制码是( ), 十进制是( )。

  1. 一个C程序的入口地址是( )。

  2. int a = 5 / 3, 执行后a的值为( ), int b = 5 % 3, 执行后b的值为( )

  3. 下面程序错误的地方有

#include <stdio.h>

int mian()

{

​ a = 10;

​ printf(“a is %d\n”, a);

}

  1. sizeof(char) = ( ), sizeof(short) = ( ), sizeof(long) = ( )

    sizeof(float) = ( ), sizeof(double) = ( )

9 unsigned char表示( ),unsigned char a, a的取值范围是( )

  1. x = 6, y = 8;

z = ++x + y++;

运行后x的值是( ), y的值是( ),z的值是( )

作业1:

选村长:

请输入三个要竞选村长名字

进行投票10次,相当于选票,统计出结果打印出村长是谁

作业2:

echo “$FILE” #不完全输出 用变量的值代替变量

echo ‘$FILE’ #完全输出 完全按照写的样子输出

作业:选择题

1.请阅读以下程序:

main()

{

​ int a=5,b=0,c=0;

​ if(a=b+c) printf("***\n");

​ else printf("$$$\n");

}

以上程序: ( )

A)有语法错不能通过编译 C) 可以通过编译但不能通过连接

B)输出*** D) 输出$$$

2.一个C语言程序是由 ( ) 。

A)一个主程序和若干子程序组成 B)函数组成

C)若干过程组成 D)若干子程序组成

3.若x,i,j和k都是int型变量,则执行下面表达式后x的值为( )。

x=(i=4,j=16,k=32)

A)4 B)16 C)32 D)52

4.0xff的二进制码是( ), 十进制是( )。

  1. 一个C程序的入口地址是( )。

  2. int a = 5 / 3, 执行后a的值为( ), int b = 5 % 3, 执行后b的值为( )

  3. 下面程序错误的地方有

#include <stdio.h>

int mian()

{

​ a = 10;

​ printf(“a is %d\n”, a);

}

  1. sizeof(char) = ( ), sizeof(short) = ( ), sizeof(long) = ( )

    sizeof(float) = ( ), sizeof(double) = ( )

9 unsigned char表示( ),unsigned char a, a的取值范围是( )

  1. x = 6, y = 8;

z = ++x + y++;

运行后x的值是( ), y的值是( ),z的值是( )

作业1:

选村长:

请输入三个要竞选村长名字

进行投票10次,相当于选票,统计出结果打印出村长是谁

作业2:

实现一个随机点名程序,每次运行程序随机打印班级一位同学的名字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

encounter♌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值