《Linux软件编程》的初步认识

一,Linux的认知:

Linux 实际上来说是操作系统的内核,ubuntu是操作系统(包括redhat,centos,freebsd等)

Linux(操作系统化的内核):
                1.管理CPU  2.管理内存  3.管理硬件设备   4.管理文件系统  5.任务调度

shell在linux内核外保护内核,用户不直接操作linux内核,而是通过操作shell,shell和内核交互。以防止不当的操作导致操作系统的崩溃。还作为命令解释器。

《Linux软件编程》的初步认识_第1张图片


二,shell命令:

man 手册: 1.标准命令 2.系统调用 3.库函数 4.设备说明 5.文件格式 6.娱乐  7.杂项 8.管理员命令
1.基本命令: ls  ;  cd  ;  touch/rm  ;   mkdir/rmdir    ;   cp   ;   mv
2.文件查看命令:1.cat : 查看文件内容(字符);ASCII码文件(内容在终端显示的是ASCII字符)
                                     .c   .txt 文本文件
           拓展:二进制文件(文件内容不能在终端显示,或者显示的是乱码)
                                      图片,视频,压缩包

         2.od -c :以字符或者ASCII码形式显示文件
         3.head/tail :查看文件 开头/末尾 内容(默认十行)   -n 查看n行
            eg:head/tail  filename           head/tail  -n(行数) filenam 

3.文件查找命令:1.find   查找一个文件的路径   eg:find 文件夹 -name 文件名
                 eg;find .(当前文件目录)-name  '*.txt'
                           通配符(配合使用的):* --- 匹配任意长度字符的文件名
                           ?---- 匹配一位长度任意字符的文件名 ; 【】匹配一位长度的指定字符的文件名
                           【1,2,3...】匹配指定字符的文件名  【1-4】1到4的文件名
                           【^2】除了2以外的字符
                   2.whereis:查找指定内容的路径           eg:二进制 程序名/软件名
                   3.grep:查找文件中内容                        eg:grep ‘printf’ stdio.h

4.重定向: 将原本要输出在终端的内容重定向到一个文件中
       >> 追加重定向:在原定向内容的基础上追加新的内容
         > 覆盖重定向:将原来内容覆盖掉
         eg : ls  >>(>)  file.txt

5.管道: 将前面命令的输出作为后续命令的输入
              eg:ps - ef | grep bash

6.其余命令:1. ps - ef 查看进程信息
练习:一条shell命令,将/usr/include/stdio.h文件后208行中与extern相关的内容记录到file.txt文件中 
tail -n 200 /usr/include/stdio.h | grep 'extern' > file.txt 
                      2.echo  在终端打印内容
                      3.du -k/-m  测试文件大小

7.压缩解压命令:Linux中的压缩包形式:.tar.gz    .tar.bz2
               压缩名令:tar -zcvf   压缩文件包名.tar.gz 文件夹
                                 tar - jcvf   压缩文件包名.tar.bz2 文件夹
               解压命令:tar - zxvf  解压文件包名.tar.gz 文件夹
                                 tar - jvxf   解压文件包名.tar.bz2 文件夹

8.让虚拟机上网:1.ifconfig(查看网卡信息)
                            2.ping www.baidu.com (检测linux是否可以上网)

NAT模式:Windows有网,Ubuntu就有网                 桥接模式:Windows和Ubuntu网络独立
《Linux软件编程》的初步认识_第2张图片


三,虚拟机连上网的步骤:

a.将虚拟机设置为NAT模式:点击"虚拟机"->点击"设置"->.点击"网络适配器"->选择"NAT模式"->点击"确定"
b.

1.sudo vim /etc/network/interfaces
              打开网卡配置文件
2.修改文件内容为:
                auto lo 
                iface lo inet loopback 

                auto ens33 
                iface ens33 inet dhcp 
3.保存退出
                ESC
                :wq
4.重启网络服务
                sudo /etc/init.d/networking restart 
5.测试与百度是否连通
                ping www.baidu.com 

9.apt - get 工具集:自动下载软件,能够分析软件的依赖关系
        1.设置apt - gte 工具的源:1.让虚拟机上网
                                        2.在Ubuntu左侧找到"Ubuntu Software"
                                        3.在Ubuntu上方找到"Ubuntu Software" 右键选择"Software & Updates"
                                        4.DownLoad Form 选择 "Others" -> "China" -> "mirrors.aliyun.com"

         2.执行命令: 1.sudo apt-get autoclean,清除旧源
                             2.sudo apt-get update , 更新新源
                             3.sudo apt-get install -f ,重建软件源依赖关系
                             4.安装软件  sudo apt-get install wireshark (安装Wireshark软件)
                                                sudo apt-get install valgrind (安装valgrind内存泄露检测工具)

                             5.卸载软件: sudo apt-get remove 软件名 
                             6.查看是否安装成功:  dpkg -l 软件名
                             7.安装:sudo dpkg -i 软件包名.deb


四,IO:输入输出   :

1. 操作对象-->文件

2.linux文件类型:

        b   block       块设备文件
                        按块扫描设备信息的文件
                        存储设备

        c   character   字符设备文件
                        按字符扫描设备信息的文件 

        d   directory   目录文件 
                        存放文件

        -               普通文件 
                        存放数据
                        图片、音视频、压缩包、文本文件

        l   link        链接文件 
                        快捷方式

        s   socket      套接字文件
                        用来套接字通信

        p   pipe        管道文件
                        用来进程间通信
             2.

2..普通文件:.ASCII码文件( ASCII码文件是特殊的二进制文件)
                    文件中所有的字符均为能够在终端上显示的字符
                    文本文件、程序.c 
                    二进制文件
                    文件中存放数据的二进制形式
                    图片、音视频、压缩包 

3.标准IO,文件IO
                 标准IO是库函数 , 文件IO时系统调用
                 系统调用:功能强大,应对复杂场景不够灵活 ;库函数:针对系统调用的封装,使用方便灵活
                   标准IO可以在Windows或者Linux平台使用,文件IO只能在Linux系统平台使用


五,标准IO(有缓存的):

eg:getchar putchar scanf  printf gets puts ...等-->标准IO
主要学习的有:fopen/fclose ; fgetc/fputc ; fgets/fputs ; fscanf/fprintf ;fread/fwrite 
fseek/rewind/ftell

从文件读写数据的流程:
打开文件->读写文件->关闭文件
fopen                             fclose
读写文件:fgetc/fputc     单个字符的读写 ;  fgets/fputs     字符串的读写 ;  fscanf/fprintf  格式化字符串的读写 ;  fread/fwrite    二进制文件的读写

2.函数接口:

1.fopen
          FILE *fopen(const char *pathname, const char *mode);
          功能:
            打开pathname对应的文件并与其建立一个文件流
          参数:
            pathname:要打开文件路径的字符串
            mode:
                r       只读            文件不存在报错,文件存在只读打开
                r+      读写
                w       只写            文件不存在创建,文件存在将文件内容清空,只写打开
                w+      写读
                a       追加只写        文件不存在创建,文件存在追加只写打开
                a+      追加写读
          返回值:
              成功返回打开的文件流指针
              失败返回NULL

 2.fclose 
          int fclose(FILE *stream);
          功能:
            关闭文件,释放文件流指针
          参数:
            stream:文件流指针
          返回值:
            成功返回0 
            失败返回EOF(-1)

3.文件流:1.具有方向性(读写)    2.具有连续性    3.具有顺序性
              句柄:操作对象的一个抽象化
 valgrind --tool=memcheck --leak-check=full ./a.out  检查内存是否流失

4.特殊的三个流(不需要fopen就已经打开i的流):
stdin 标准输入流(从终端读取数据)   ;  stdout 标准输出流(从终端输出数据)   ;  stderr 标准出错流(从终端数据)
-------和终端建立的三个流

5.标准IO缓存:
缓存分3类:

      1.全缓存  4k(大小)(缓存区满刷新)
                刷新条件:
                    1.缓存区存满刷新(全缓存大小:4096)
                    2.fflush函数强制刷新
                    3.程序结束/fclose刷新
                       与文件建立的缓存

       2.行缓存  1k (遇到\n刷新)  
                刷新条件:
                    1.缓存区存满刷新(行缓存大小:1024)
                    2.遇到\n刷新 
                    3.fflush函数强制刷新
                    4.程序结束/fclose刷新
                       与终端建立的缓存            stdin   stdout 

        3.不缓存 0k (直接刷新)
                  stderr
                  人机交互、界面控制、出错处理

         4.setvbuf
              int setvbuf(FILE *stream, char *buf, int mode, size_t size);
              功能:
                改变一个流的缓存类型
              参数:
                stream:文件流指针
                buf:指定缓存空间的首地址
                mode:
                    _IONBF  不缓存
                    _IOLBF  行缓存
                    _IOFBF  全缓存
                size:
                    设定缓存区的大小
              返回值:
                成功返回0 
                失败返回非0 

《Linux软件编程》的初步认识_第3张图片

      .5.fputc 
       int fputc(int c, FILE *stream);
       功能:
        向流中写入一个字符
       参数:
        c:写入字符的ASCII码值
        stream:文件流指针 
       返回值:
        成功返回写入字符的ASCII码值
        失败返回EOF
       注意: 1.fputc只能写入一个字符,写入多个字符需要多次调用fputc  2.fputc只能写入字符

你可能感兴趣的:(linux,运维,服务器,学习,arm,阿里云)