Linux基础编程

1、shell核心命令
        pwd            查看当前路径

        cd            改变当前路径
            cd        回到当前用户主目录
            cd -        回到刚才的目录

        mkdir            创建新目录
        rm dir            删除空目录
        rm dir -r        递归删除非空目录

        ls            查看文件
            -a        所有文件
            -l        详细信息
            -R        该目录及所有子目录的文件名

        tree            以树形的方式显示文件
        touch             创建空文件、更新三个时间

        mv             移动、重命名文件
            -f        强制覆盖已有文件
            -v        输出移动信息

        cp             拷贝文件
            -r        拷贝目录
            -a        拷贝所有

        rm            删除文件
            -f        删除前不提示,直接删除


        file            查看文件类型
        cat            查看文本内容(concatenate连接)
            -n        对所有行编号
            -b        对非空白行编号

        more            逐屏查看文件内容
        less            逐行查看文本内容
        head            显示文件开头部分内容(默认显示十行)
            -n n        显示前n行
            -v        显示文件名

        tail            显示文件结尾部分内容(默认显示十行)
            -n n        显示后n行
            -v        显示文件名
            -f         实时更新(用追加重定向测试)

        chown             改变文件的拥有者,只有当前文件的拥有者和root才可以
            -R        递归修改子目录的文件
            user :group    同时修改拥有者和拥有组
        chgrp            改变文件的拥有组
            -R        递归修改子目录的文件
        find [路径] [参数]    最常用的文件查找工具
            -name filename        查找文件名为filename的文件
            -type [fdlpsbc]        根据文件类型查找
            -perm –xxxx        查找权限为xxxx 的文件
            -user     username    查找username用户的文件
            -group groupname    查找groupname组用户的文件
            -exec command {} \;    每查找一个文件就执行一次command

        tar
        功能:打包,根据不同选项实现打包压缩或解压解包
        用法:
            tar -jxvf a.tar.bz2
            tar -zcvf b.tar.gz xxx/
                j----处理的是bzip2格式的
                z----处理的是gz格式的
                x----解包解压
                c----打包压缩
                v----显示过程信息
                f----指定操作对象文件的名字

        ps
        功能:查看进程状态
        用法:    ps -ef
            ps aux
            ps ajx

        diff/patch  制作补丁/打补丁
        diff old/ new/ -ruN > patch.old
        cd old
        patch -p1 < ../patch.old
        patch -p1 < ../patch.old -R  //打补丁的反操作
        
        ln 
        软链接:相当于win的快捷方式
        ln -s target softlink
        ln -s a.txt  a.soft

        硬链接:复制+同步更新
        ln a.c a.hard
        a.hard 与a.c 的inode相同,链接数也一样

        ifconfig 查看/修改IP
        sudo ifconfig ens33 192.168.23.4

        ls  | cat 把ls的输出通过管道(|)给到cat命令作为其输入
        head -n 10 a.txt | tail -n 1

        ls | xargs grep "hello" -Hrnw 
        在ls列出的各个文件的内容中搜索“hello”,(把一个命令的输出,作为另一个命令的参数)
        
        /         ---根目录结构内容
        ├── bin   ---可执行的程序
        ├── boot  ---系统启动相关文件
        ├── cdrom
        ├── dev    ---设备文件
        ├── etc        ---配置文件
        ├── home    
        ├── initrd.img -> boot/initrd.img-4.10.0-37-generic
        ├── initrd.img.old -> boot/initrd.img-4.10.0-35-generic
        ├── lib     ---库
        ├── lib32
        ├── lib64
        ├── lost+found 
        ├── media  
        ├── mnt  ---常用的挂载目录
        ├── opt   
        ├── proc  ---虚拟文件系统,系统运行的各种信息都在该目录下
        ├── root ---超级用户的家
        ├── run
        ├── sbin ---只有root有权限执行的可执行程序
        ├── snap
        ├── srv
        ├── sys ------系统中内核驱动相关信息在此目录下
        ├── tmp
        ├── usr-------用户程序、头文件 库
        ├── var------易变的,例如系统日志文件
        ├── vmlinuz -> boot/vmlinuz-4.10.0-37-generic
        └── vmlinuz.old -> boot/vmlinuz-4.10.0-35-generic
    2、动态库与静态库
        gcc main.c -o main -I dir1/ -L dir2  -lxxx
            -I 告诉gcc头文件在dir1目录下 
            -L 告诉gcc需要的库在dir2目录下
            -lxxx 告诉gcc链接的是xxx库而不是yyy库

    静态库的制作与使用
        gcc -c add.c
        gcc -c sub.c
        ar rcsv libxxx.a add.o sub.o//静态库xxx制作OK
        gcc main.c -o main -I dir1/ -L dir2  -lxxx

    动态库的制作与使用
        gcc -fpic -Wall -c yyy.c
        得到yyy.o 
        gcc -shared -o libxxx.so yyy.o
        得到了动态库libxxx.so
    使用:
    编译:gcc main.c -o main -I dir1/ -L dir2  -lxxx    ------相同目录下,同名的动态库和静态库,优先链接动态库
    如果想要链接静态库:编译:gcc main.c -o main -I dir1/ -L dir2  -lxxx -static
    把libxxx.so拷贝到系统默认的库路径下/lib 或/usr/lib
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:dir/     ----dir为动态库所在路径,写绝对路径,不用共享目录
    修改/etc/ld.so.conf 把动态库所在路径追加到最后
    sudo ldconfig ---使新修改的配置生效
    gcc -Wl,-rpath,dir/ main.c -o main -I dir1/ -L dir2  -lxxx   ---dir为动态库所在路径
        其中-Wl,-rpath,dir1/:dir2/.....
        env -----查看系统中所有环境变量
        echo $PATH ----打印出PATH环境变量的值
    3、make工具(makefile的编写)
        make工具默认在当前目录下依照下列顺序读取内容
         GNUmakefile makefile Makefile 
        makefile基本格式
        目标:依赖文件  -----makefile中第一个出现的目标是最终目标
            TAB命令
        命令执行的条件(满足其一):
                    目标不存在
                    依*新

        makefile的变量
            自定义变量
                DEP=main.o add.o sub.o
                $(DEP)
                $(CC) $(CFLAGS)
            系统预定义变量
            自动变量
                $@    ----目标文件的完整名
                $<    ----依赖的第一个文件的完整名
                $^    ----依赖的所有的文件,并以空格隔开
        makefile 的规则     
            普通规则
            模式规则
                VAR=main.o add.o sub.o
                main:$(VAR)
                gcc -o $@ $(VAR)
                %.o:%.c    
                gcc -c $< -o $@
                .PHONY:clean
                clean:
                    rm -f *.o main
            隐式规则
                main:
            注意:隐式规则使用时不能有其它编译选项,目标名与源文件名相同
        make 的常用选项
            make -f xxx
            make -C dir/
        以dir_makefile目录下的simplemakefile作为makefile来组织编译程序
        make -C ./dir_makefile/  -f simplemakefile
        双目标
            main::a.c
                gcc -o main a.c
            main::b.c
                gcc -o main b.c
    4、gdb调试器
        编译时:gcc -g main.c -o main
            gdb main
            l (list)---查看代码
            b 20 ---在20行设置断点
            b 9 if i>98
            info b ---查看断点信息
            d 断点编号----删除断点
            r run ---运行程序
            next/step/continue
            n--不进入函数内部,一次执行完一句 
            s--进入函数内部单步执行
            c--从断点继续执行到程序结束
            print i---- 打印变量i的值
            display i
            q quit--退出调试状态
    5、服务器搭建(在有网络的基础上)
        设置开发板IP
        ifconfig eth0 192.168.23.xxx   ---------开发板的IP重启后失效
        可修改/etc/profile
        添加ifconfig eth0 192.168.23.xxx
        重新启动

        nfs服务器
            确保虚拟机能够上外网
            sudo apt-get update
            sudo apt-get install nfs-kernel-server nfs-common 
            sudo gedit /etc/exports 
            在末尾加上
            /opt/nfs       *(rw,sync,no_subtree_check)
                    Rw-------客户端对该目录可读可写
                    Sync----双方同步更新
                    no_subtree_check--------客户端与系统中当前用户权限相同
            重启
            sudo service nfs-kernel-server restart
            查看设置好的nfs服务器目录
            showmount -e
            看到
            /opt/nfs *  

            修改/opt/nfs的权限
            sudo chmod 777 /opt/nfs -R
        开发板端
            mount -t nfs -o nolock   192.168.23.4:/opt/nfs    /mnt
            把ip为192.168.23.4的主机上的/opt/nfs目录,挂载到开发板的/mnt就可以通过/mnt访问到虚拟机中/opt/nfs目录下的内容

        tftp服务器
            sudo apt-get install tftp tftpd openbsd-inetd 
            sudo gedit /etc/inetd.conf 
            添加:
            tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd   /opt/tftp
            sudo mkdir /opt/tftp
            sudo chmod 777 /opt/tftp/ -R
            重启tftp
            sudo service openbsd-inetd reload
            sudo service openbsd-inetd restart
            查看tftp服务是否启动
            netstat -a
            netstat -a | grep "tftp"
            sudo cp aaa.txt /opt/tftp/
            开发板端
            tftp -g -r aaa.txt 192.168.23.4
            从IP为192.168.23.4主机的tftp服务器目录下,下载文件aaa.txt到开发板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值