shell命令,IO流

1.Linux系统上的软件开发
    操作系统:屏蔽底层不同的硬件平台  
    Linux内核:Linux操作系统的核心代码,包括对CPU管理、硬件设备管理、内存管理、文件系统管理、进程调度管理等
    用户直接操作内核:
        1.不安全
        2.接口功能复杂
    Shell作用:
        1.保护内核 
        2.命令解释器

shell(大多操作命令),库函数(提供很多函数接口)



 

用户将命令交给shell,shell交给内核,内核去操作硬件,硬件再反馈给用户

 

2. Shell命令
    1.基本的shell命令:
       ls,mv,cp,cd等等


    2.文件查看命令:
        1.cat 文件名  :cat filed.txt
            查看文件中的内容
        2.grep 字符串 文件名 :grep "printf" /usr/include/stdio.h
            在文件名对应的文件中查找字符串相关的行
        3.head -n 文件名
            查看文件中的前n行
        4.tail -n 文件名
            查看文件中的最后n行

    3.文件查找命令:
        1.find 路径 -name 文件名 
            在路径下查找文件名对应的文件
        2.locate 文件名
              查找文件名对应的文件所在的路径                       
        3.whereis 文件名
            查找已经安装的二进制文件(软件)所在路径

    4.压缩解压命令:
        .tar.gz 
        .tar.bz2 
    
    压缩:
        tar -zcvf 文件名.tar.gz 文件名/*  例:tar -zcvf homework.tar.gz homework/*
        tar -jcvf 文件名.tar.bz2 文件名/*
    解压:
        tar -zxvf 文件名.tar.gz
        tar -jxvf 文件名.tar.bz2
    5.其余命令:
        du -m/k 文件名          查看文件占用的空间大小(Mb/Kb)          
        echo                          类似printf的功能,打印
   
    6.通配符:
        *:匹配任意长度任意字符的文件名
        ?:匹配一位长度任意字符的文件名 
        [a-z]:匹配a-z之间的任意字符 例:ls [a-z][1-9].txt
        [1-9]:匹配1-9之间的任意字符

    7.管道(|):
        将前面命令的输出作为后续命令的输入 
        ps -ef 查看所有进程
        ps -ef | grep bash 查看进程中与bash相关的进程

    8.重定向:
        >  覆盖重定向   例:echo helloworld > c.txt //c.txt中有helloworld
        >> 追加重定向                  

注意:可以通过查看man 手册来查看命令或函数具体用法,调用man的方法例:man cat,

man printf

IO:输入输出
操作对象:文件

1.Linux系统一切皆是文件:
    文件分类:
    1.block     b     块设备文件        按块扫描设备信息的文件
    2.char      c     字符设备文件      按字符扫描设备信息的文件 
    3.directory d     目录文件          保存或管理文件
    4.          -     普通文件          保存数据信息的文件(代码、图片、音视频、压缩包等)
    5.link      l     链接文件          指向其他文件的文件 
    6.socket    s     套接字文件        用于进程间通信 
    7.pipe      p     管道文件          用于进程间通信
2..特殊的流 
    stdin       标准输入流          行缓存
    stdout      标准输出流          行缓存
    stderr      标准错误流          不缓存

    gets、getchar、scanf是基于stdin实现的
    puts、putchar、printf是基于stdout实现的 
    perror是基于stderr

注:这些特殊流默认打开,不用使用fopen打开文件

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

例:

4. fgetc、fputc
      int fputc(int c, FILE *stream);
      功能:
        向流中写入一个字符 
      参数:
        c:写入的字符
        stream:文件流指针
      返回值:
        成功返回写入字符的ASCII码值
        失败返回EOF(-1) 
例:


      fgetc 
      int fgetc(FILE *stream);
      功能:
        从流中读取下一个字符 
      参数:
        stream:文件流指针
      返回值:
        成功返回读到字符的ASCII码值
        失败或者读到文件末尾返回EOF

例:



    

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过Runtime和ProcessBuilder类来调用Shell命令和脚本。下面是一个简单的示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ShellCommand { public static void main(String[] args) { try { // 执行Shell命令 Process process = Runtime.getRuntime().exec("ls -al"); // 读取Shell命令的输出 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } // 等待Shell命令执行完毕 int exitCode = process.waitFor(); System.out.println("Shell命令执行完毕,退出码为:" + exitCode); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 在上述示例中,我们通过Runtime类的exec()方法执行了一个Shell命令,然后通过Process类的getInputStream()方法获取了Shell命令的输出流,并通过BufferedReader类逐行读取了输出内容。最后,我们通过Process类的waitFor()方法等待Shell命令执行完毕,并获取了Shell命令的退出码。 类似地,我们也可以使用ProcessBuilder类来执行Shell脚本。以下是一个示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class ShellScript { public static void main(String[] args) { try { // 执行Shell脚本 ProcessBuilder builder = new ProcessBuilder(Arrays.asList("/bin/bash", "-c", "./test.sh")); Process process = builder.start(); // 读取Shell脚本的输出 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } // 等待Shell脚本执行完毕 int exitCode = process.waitFor(); System.out.println("Shell脚本执行完毕,退出码为:" + exitCode); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 在上述示例中,我们使用ProcessBuilder类创建了一个Shell进程,并指定了要执行的Shell脚本。然后通过Process类的getInputStream()方法获取了Shell脚本的输出流,并通过BufferedReader类逐行读取了输出内容。最后,我们通过Process类的waitFor()方法等待Shell脚本执行完毕,并获取了Shell脚本的退出码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值