zoukankan      html  css  js  c++  java
  • linux文件连接

    链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

    硬 连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户 就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和 其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。

    与硬连接相对应,Lnux系统中还存在另一种连接,称为符号连接(Symbilc Link),也叫软连接。软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

     touch f1(创建一个f1的文件)
    ln f1 f2 创佳一个f2的硬连接
    ln -s f1 f3 创建一个f3的软连接
    此 时如果删除f3,对f1,f2无影响;如果删除f2,对f1,f3也无影响,如果删除f1,那么因为f2也应用f1,所以并不影响f2节点的,touch 创建的文件仍然存在;但是此时f3因为是软连接,导致f3失效。如果删除f1,f2 ,那么touch 创佳的文件会被删除。




    指令 名称 : ln
      
      使用权限 : 所有使用者
      
      使用方式 : ln [options] source dist,其中 option 的格式为 :
      
      [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
      [--help] [--version] [--]
       说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档 案系统中,而软连结却可以跨越不同的档案系统。
      ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。
      
      不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
      
      参数 :
      
       -f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时,将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本
      范例 :
      将档案 yy 产生一个 symbolic link : zz
       ln -s yy zz
      
      将档案 yy 产生一个 hard link : zz
       ln yy xx

    业务使用实例:

    backup:源文件存放文件夹,里面存放的是话单文件。

    billing:符号连接存放文件夹,里面存放的是符号连接。

    例如:

    1、linux目录相对于  “/” 根目录的/opt/billNew/lj 下新建两个目录,backup和billing。

    2、在backup里面新建两个文件,aa.txt和bb.txt

    创建单个文件的符号连接命令:

    ln -s /opt/billNew/lj/backup/aa.txt   /opt/billNew/lj/billing/


    创建整个文件夹的符号连接命令:

    ln -s /opt/billNew/lj/backup/*   /opt/billNew/lj/billing/

    注意:一定要写相对于根目录路径/opt/billNew/lj/backup/ ,而不是当前lj的目录路径 ln -s backup/*   billing/

    java调用liunux命令:

    Linux下的top命令,top命令是top -n 1 >test.txt



    Runtime.getRuntime().exec("top -n 1>text.txt");



    Java调用linux命令ffmpeg视频转码

    import java.io.*;
    import java.lang.*;
    import java.util.*;
    import java.text.*;
    import java.net.*;
    public class MediocreExecJavac
    {
     //运行命令
     public void runCmd(String command){
      try
            {           
                Runtime rt = Runtime.getRuntime();
       Process proc = rt.exec(command);
       InputStream stderr = proc.getErrorStream();
                InputStreamReader isr = new InputStreamReader(stderr);
                BufferedReader br = new BufferedReader(isr);
                String line = null;
                System.out.println("<ERROR>");
                while ( (line = br.readLine()) != null)
                    System.out.println(line);
                System.out.println("</ERROR>");
                int exitVal = proc.waitFor();
                System.out.println("Process exitValue: " + exitVal);
            } catch (Throwable t)
      {
       t.printStackTrace();
      }
     }
     
     //视频转码,infile输入文件(包括完整路径),outfile输出文件
     public boolean transfer(String infile,String outfile){
      String avitoflv = "ffmpeg -i "+infile+" -ar 22050 -ab 56 -f flv -y -s 320x240 "+outfile;
      String flvto3gp = "ffmpeg -i " + infile + " -ar 8000 -ac 1 -acodec amr_nb -vcodec h263 -s 176x144 -r 12 -b 30 -ab 12 " + outfile;
      String avito3gp = "ffmpeg -i " + infile + " -ar 8000 -ac 1 -acodec amr_nb -vcodec h263 -s 176x144 -r 12 -b 30 -ab 12 " + outfile;
      //avi -> jpg
      String avitojpg = "ffmpeg -i " + infile + " -y -f image2 -ss 00:00:10 -t 00:00:01 -s 350x240 " + outfile;
      try
            {           
                Runtime rt = Runtime.getRuntime();
       Process proc = rt.exec(avitoflv);
       InputStream stderr = proc.getErrorStream();
                InputStreamReader isr = new InputStreamReader(stderr);
                BufferedReader br = new BufferedReader(isr);
                String line = null;
                System.out.println("<ERROR>");
                while ( (line = br.readLine()) != null)
                    System.out.println(line);
                System.out.println("</ERROR>");
                int exitVal = proc.waitFor();
                System.out.println("Process exitValue: " + exitVal);
            } catch (Throwable t)
      {
       t.printStackTrace();
       return false;
      }
      return true;
     }
     
     //读取文件,fileName输入文件,id行数
     public static String readFile(String fileName,int id)
     {
      String dataStr = "";
      FileInputStream fis = null;
      try
      {
       FileReader file = new FileReader(fileName);//建立FileReader对象,并实例化为fr
       BufferedReader br=new BufferedReader(file);//建立BufferedReader对象,并实例化为br
       int i=1;
       String Line=br.readLine();//从文件读取一行字符串
       //System.out.println("Line1="+Line+"="+Line);
       //判断读取到的字符串是否不为空
       //while(Line!=null){
        //System.out.println(Line + "<br>");//输出从文件中读取的数据
        //if(i==line){dataStr=Line;break;}else{i=i+1;}
        //Line=br.readLine();//从文件中继续读取一行数据
       //}
       dataStr=Line;
       br.close();//关闭BufferedReader对象
      }
      catch(Exception e){
      }finally{
       try
       {
        if(fis!=null)
           fis.close();
       }catch(Exception e){}
      }
      return dataStr;
       }

       //读时长信息
     public String readtime(String file)
     {
      String str="/opt/cgogo/test/info.txt";
      String timelen = "";
      String cmd = "timelen "+file;
      runCmd(cmd);
      timelen=readFile(str,1);

      return timelen;
     }

        public static void main(String args[])
        {
      MediocreExecJavac me = new MediocreExecJavac();
      String infile = "/opt/cgogo/test/02.avi";
      String outfile = "01.flv";

      //时长
      String timelen = me.readtime(infile);
      System.out.println("02.avi timelen is :" + timelen);
      //转码
      if(me.transfer(infile,outfile)){
       System.out.println("the transfer is ok!");
      }else{
       System.out.println("the transfer is error!");
      }
        }
    }

  • 相关阅读:
    go os/exec执行外部程序
    Go signals 信号
    选择注册协议
    全选功能
    字符限制
    JS 数字,金额 用逗号 隔开(数字格式化)
    placeholder 不支持IE修复
    JS设置弹出小窗口。
    IE 文档模式
    js报错:email() is not a function
  • 原文地址:https://www.cnblogs.com/cuker919/p/4878585.html
Copyright © 2011-2022 走看看