Linux实训笔记第一周

前言

我个人在实训之前对Linux是不太熟悉的,即便是学Android的时候也没有对Linux的机制有深入系统的研究,谁知学校竟然有这门课,👨笑了,三个星期能学啥啊?而且是上华清的网课,听吹牛吧!算了,就将听到的有用的暂且记录之。扬帆,启航!
(安装VM后打开Ubuntu,这页面,啧啧,习惯Windows的我手足无措啊!!)

1.常用命令

1.pwd:(print working directory)打印当前工作目录

farsight@ubuntu:~$ pwd

2.ls:列出当前工作目录的文件

farsight@ubuntu:~$ ls

ls+目录名:列出指定目录内文件

ls YQYUN

ls -l:列出当前工作目录内的详细文件信息

farsight@ubuntu:~$ ls -l

3.mkdir+文件夹名:在当前工作目录创建文件夹

farsight@ubuntu:~/YQYUN$ mkdir day5
farsight@ubuntu:~/YQYUN$ ls
day1  day2  day3  day4  day5

4.touch+文件名:在当前工作目录创建文件

farsight@ubuntu:~/YQYUN/day5$ touch day5.c
farsight@ubuntu:~/YQYUN/day5$ ls
day5.c

5.rm+文件名/ -r+文件夹名(rmdir效果一样)

farsight@ubuntu:~/YQYUN/day5$ rm day5.c
farsight@ubuntu:~/YQYUN/day5$ ls

farsight@ubuntu:~/YQYUN$ rm -r day5
farsight@ubuntu:~/YQYUN$ ls
day1  day2  day3  day4

6.cd+目录名:切换工作目录

farsight@ubuntu:~/YQYUN$ cd day5
farsight@ubuntu:~/YQYUN/day5$ 

cd:回到开机时的默认工作目录
cd+ …:回到上一级目录

farsight@ubuntu:~/YQYUN/day5$ cd
farsight@ubuntu:~$ cd YQYUN
farsight@ubuntu:~/YQYUN$ cd ..
farsight@ubuntu:~$ 

7.mv+移动的文件名+目标目录:移动文件到指定目录

farsight@ubuntu:~/YQYUN/day5$ ls
day0.c  day5.c  dir
farsight@ubuntu:~/YQYUN/day5$ mv day5.c dir
farsight@ubuntu:~/YQYUN/day5$ cd dir
farsight@ubuntu:~/YQYUN/day5/dir$ ls
day5.c

mv+已存在的文件名+不存在的文件名:重命名文件

farsight@ubuntu:~/YQYUN/day5$ ls
day5.c
farsight@ubuntu:~/YQYUN/day5$ mv day5.c day0.c
farsight@ubuntu:~/YQYUN/day5$ ls
day0.c

8.su:切换成root权限(系统的最高权限,为所欲为)

farsight@ubuntu:~/YQYUN/day5/dir$ su
Password: 
root@ubuntu:/home/farsight/YQYUN/day5/dir# (注意工作的路径变了)

su+用户名:切换用户
换回来了

root@ubuntu:/home/farsight/YQYUN/day5/dir# su farsight
farsight@ubuntu:~/YQYUN/day5/dir$ 

9.Ctrl+l或clear:清屏(实际上只是页面上拉腾出来干净的一页)
10.Ctrl+shift+n/t:创建新的终端或标签(鼠标右键第一选项和第二选项)
11.Ctrl+空格:切换Linux中的输入法(在上方状态栏点击键盘图标亦可)
12.方向键上下:选择最近的命令
13.ifconfig:查看网络信息

farsight@ubuntu:~/YQYUN/day5/dir$ ifconfig 
eth0      ~~~~自己看~~~~~

lo        ~~~~~自己看~~~~

14.ps:查看进程状态
top:实时查看内存状态

farsight@ubuntu:~/YQYUN/day5/dir$ ps
  PID TTY          TIME CMD
 4838 pts/2    00:00:01 bash
 5150 pts/2    00:00:00 su
 5158 pts/2    00:00:00 bash
 5246 pts/2    00:00:01 ps

15.kill+PID:杀死进程
应用卡住就可以强制退出了

farsight@ubuntu:~/YQYUN/day5/dir$ top

top - 23:55:31 up  6:14,  2 users,  load average: 0.23, 0.14, 0.09
Tasks: 211 total,   2 running, 208 sleeping,   0 stopped,   1 zombie
Cpu(s):  1.5%us,  0.3%sy,  0.0%ni, 98.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1026452k total,   920768k used,   105684k free,    98684k buffers
Swap:  1046524k total,     1700k used,  1044824k free,   373356k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                              
 3441 farsight  20   0  204m  54m  25m S    2  5.4   9:53.48 codeblocks

 farsight@ubuntu:~/YQYUN/day5/dir$ kill 3441(之后PID对应的应用就强制停止了)
        

16.TAB键可以补全命令,连按两次可以给出所有相关的命令

farsight@ubuntu:~/YQYUN/day5/dir$ k
kbd_mode           kbdrate            kerneloops         kerneloops-submit  kill               killall            killall5           koi8rxterm

2.编辑器及编译器

一、编辑器
(个人不喜欢Linux自带的编辑器和编译器,界面丑且管理工程不方便,还是喜欢简单方便的跨平台IDE,像codeblock就很好)
1.gedit:进入方式:geit+文件名(和记事本差不多)
2.装了很多插件勉强和IDE媲美的VI/VIM:进入方式:vi/vim+文件名(有则打开,无则创建并打开)

farsight@ubuntu:~/YQYUN/day5$ ls
farsight@ubuntu:~/YQYUN/day5$ vim day5.c

在这里插入图片描述
(哦,上帝,瞧瞧这狗屎一样界面,我发誓要狠狠的打他的屁股!)
vi/vim的三种模式:命令行模式,插入模式,低行模式
(1)命令行模式是默认模式,可以对代码进行复制、粘贴、剪切、撤销等文本级操作,但不能从键盘输入代码:
复制:[num]yy:从光标所在行开始的[num]行进行复制,[num]为1可省略;
粘贴:p:从光标所在行后的下一行开始粘贴;
删除/剪切:[num]dd::从光标所在行开始的[num]行进行删除剪切,[num]为1可省略;
删除光标所在的字符:x;
撤销:u,反撤销:Ctrl+r;
(2)插入模式:在命令行模式下按 a(光标后一个位置进入)/i(光标所在行进入)/0(光标下一行),都可进入(其实都没啥区别!!);
退出插入模式:esc键;
(3)低行模式:在屏幕低行,所有命令以“:”开头,常用如下;
保存文件-> :w;
退出vi/vim-> :q(强制退出:q!,不保存文件修改);
保存并退出-> :x或:wp;
分屏显示-> :vsp+文件名;
列出/取消行号-> :set number/ nonumber;
二、编译器
GCC编译器被很多IDE直接集成了,编译链接运行直接一气呵成,在shell中通过如下命令使用GCC;
用法:gcc [-选项] 文件名
编译基本步骤:
1.gcc +文件名:默认生成一个叫a.out的可执行文件;
gcc -o +不带后缀新文件名+源文件:编译源文件,并生成一个不带后缀的新文件

farsight@ubuntu:~/YQYUN/day5$ gcc -o day5 day5.c
ls
farsight@ubuntu:~/YQYUN/day5$ ls
day5  day5.c

2…/a.out:执行a.out

farsight@ubuntu:~/YQYUN/day5$ ./day5
hello Linux

3.使用C99标准编译

for(int i=0;i<2;i++)
printf("hello Linux");

编译

farsight@ubuntu:~/YQYUN/day5$ gcc -std=c99 -o day5 day5.c
farsight@ubuntu:~/YQYUN/day5$ ./day5
hello Linux
hello Linux

4.gcc -wall:显示更多的警告信息
gcc编译的4个过程:
(1)预处理(头文件展开,宏替换)

farsight@ubuntu:~/YQYUN/day5$ ls
day5.c  day5.h  day5.i  test.c  test.h  文件夹
farsight@ubuntu:~/YQYUN/day5$ 

(2)编译(进行语法检测,然后汇编)

farsight@ubuntu:~/YQYUN/day5$ gcc -S day5.i -o day5.s
farsight@ubuntu:~/YQYUN/day5$ ls
day5.c  day5.h  day5.i  day5.s  test.c  test.h  文件夹

(3)汇编(汇编代码翻译成机器语言)

farsight@ubuntu:~/YQYUN/day5$ gcc -c day5.s -o test.o
farsight@ubuntu:~/YQYUN/day5$ ls
day5.c  day5.h  day5.i  day5.s  test.c  test.h  test.o  文件夹

(4)链接(链接库函数,系统函数,和自己生成的.o文件)

farsight@ubuntu:~/YQYUN/day5$ gcc test.o -o test

3.工程管理make和gdb调试

1.make:工程管理器,管理较多文件,也是一个“自动编译管理器”(根据文件的时间戳自动选择已经编译过的,通过读取Makefile文件批量编译)
2.Makefile:3种简单语法如下,注释用#

#目标:依赖
#	执行语句
#语法一:
#目标名:main.c +各种.c文件
#	gcc main.c+各种.c文件 -o+可执行文件名		
#eg:
day: day5.c test.c
	gcc day5.c test.c -o day

#语法二:
#目标名:main.o +各种.o文件
#	gcc main.o+各种.o文件 -o+可执行文件名
#同上不举例了
#
#语法三:
#SRC=main.o +各种.o文件
#目标名:$(SRC)
#	gcc $(SRC) -o+可执行文件名
#eg:
SRC=day5.o test.o
day:$(SRC)
	gcc $(SRC) -o day

编写好makefile之后,直接使用命令make编译整个项目

farsight@ubuntu:~/YQYUN/day5$ vim makefile
farsight@ubuntu:~/YQYUN/day5$ make

2.gdb调试,
进入方式:
在编译时加 -g (默认生成a.out文件),随后用 gdb a.out进入调试界面
可用功能:
(1)设置断点(b+行号)
(2)查看代码(l)
(3)运行至断点(r)
(4)查看变量的值和地址(p+变量名)
(5)单步运行(s)
(6)退出调试(q)
(…)…
OK,介绍完了这无聊的vi/vim和GCC,我还是用codeblocks吧。👨

4.ANSI C基础回顾

这简直就是多余了啊,都要毕业了,还给我们整C,👨笑了!

  • C基础:{
    1.关键字:int char float if else for while
    2.用户标识符:注意命名规则
    3.标准输入输出:%d %c %f %s }

    1.运算符:{ + - * / % /:只取整数部分 %:只取余数,不能是浮点型 }

    2.控制语句:{ 顺序 分支 循环
    1.控制语句:{
    1.if-else:{ 语法结构:
    if (表达式1)
    {
    if(表达式3)
    {
    语句序列3;
    }
    }
    else if(表达式2)
    {
    语句序列2;
    } 注意:1.if可以没有else,但是else就不能没有if
    2.else总是与上一个未配对的if配对
    3.if后有表达式,else后面就没有表达式 }
    2.switch-case:{ 语法结构:
    switch(表达式/值)
    {
    case 表达式1:
    语句序列1;
    break;
    case 表达式2:
    语句序列2;
    break;

    case 表达式n:
    语句序列n;
    break;
    default:
    语句序列n+1;
    break; //可写可不写
    }
    注意:switch遇到break或者default才退出 }
    3.for:{ 语法结构:
    for(表达式1; 表达式2; 表达式3)
    {
    语句序列;
    } }
    4.while:{ 语法结构:{
    while(表达式)
    {
    语句序列;
    } } } }
    2.数组:{
    1.数组的定义:数据类型 数组名[元素个数];
    2.数组元素的访问:数组[下标]//下标的下限0 } }

    1.指针:{ 提供一种访问变量的方法 int a; a = 10;//直接访问 a = 5;
    0.0.地址:每一字节的内存编号
    0.1:& *:{ &:取地址运算符 用法:&变量名 eg:&a;
    *:解引用//取地址里的内容 用法:*指针名
    eg:*p }

    1.什么是指针:{ 指针:就是地址 指针变量的定义:数据类型 指针名;//这里的是标志变量是一个指针 如何区分的两种用法:
    1.如果
    前面有数据类型,那就是在定义一个指针变量
    2.其他情况就是在取指针所指向变量的内容 }
    2.指针和变量的关系:{ int a = 10;//0x1000 int *p; //0x2000 p = &a; *p = 5;//间接访问
    关系:p = &a = 0x1000;
    *p = a = 10;
    &p = 0x2000;//二级指针保存一级指针的地址 }
    3.指针和一维数组的关系:{ int a[10] = {1,2,3,4,5};//数组名代表整个序列的首地址 int *p; p = a;//p = &a[0]; 在某些情况下,指针名和数组名可以相互转换 } }

    2.函数:{
    1.函数的定义:{ 语法结构: 数据类型 函数名(形参说明) {
    语句序列;
    return (表达式/值); } 数据类型:函数的返回值类型
    无返回值:void
    有返回值:int char short 地址/指针… 函数名:遵循命名规则 形参说明:数据类型 形参名//如果有多个形参,中间以逗号隔开 语句序列:函数体,可以没有 return :返回可以是表达式,也可以是变量值
    eg: int sum(int a, int b)
    {
    int result = a+b;
    return result;
    //return (a+b);
    } }
    2.函数声明:数据类型 函数名(形参说明); 注意:函数声明要放在main函数之前
    如果不写函数声明,直接函数实现,也要放在main函数之前
    eg:int sum(int a, int b);
    3.函数调用:函数名(实际要处理的参数);//简称实参
    eg:sum(a, b);
    sum(666, 999);
    注意:如果函数无返回值,必须自成一行
    如果函数有返回值,可以自成一行
    4.函数传参:{ 值传递:仅仅把实参的值,拷贝一份给形参,对形参的修改是不会影响实参 地址传递:把实参的地址传过去,形参是指针//通过指针访问变量 }
    5.指针函数:返回值是地址 }

    3.分文件:{

    1. .h文件:函数声明、全局变量定义、数据类型定义…

    2. .c文件:进行函数实现

    3. .c文件:含有main的文件 … }
      1.结构体:{
      1.为啥要使用结构体:处理复杂的数据结构
      2.结构体的一般形式:{
      struct 结构体名{
      数据类型1 成员1;
      数据类型2 成员2;

      数据类型n 成员n;
      };

      大括号内的内容成成员列表或者域表
      数据类型可以基本的数据类型和数组类型,也可以是结构体类型
      不要忘了最后有个分号
      }
      3.定义结构体变量
      4.访问结构体成员
      }

2.typedef:取别名
用法:typedef 已有的数据类型名 要取的别名

哎呀,基础就是这!其他的什么指针数组,数组指针,函数指针,指针函数的区别也是很重要的,特别是函数指针,这可是C中可以媲美其他语言的类的方法的存在,OK,坐等实训第二周

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

搬砖工人_0803号

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

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

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

打赏作者

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

抵扣说明:

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

余额充值