[omcr@lnlte2dmr-tdl legacy]$ cat -A ums_del_mr_files_cfg.ini
MrFileDiskMountPoint=/home^M$
MrFileDiskSpaceQuotaThresholdRatio=70^M$
MrFileReserveDayMin=7^M$
MrFileReserveDayMax=31^M$
MRF_Path=/home/mrftp/mrfile/dtmrfile^M$
MRE_Path=/home/mrftp/mrfile/MRE^M$
MRO_Path=/home/mrftp/mrfile/MRO^M$
MRS_Path=/home/mrftp/mrfile/MRS^M$
^M$
TDMRSWITCH=OFF^M$
TDMRORIGINALFILE=/home/mrftp/tdmrfile/backup^M$
TDMRFILE=/home/mrftp/tdmr/download^M$
TDMRNORTHFILE=/home/mrftp/tdmr/mrfile^M$

  在Linux下可以是用“cat –A filename” 来查看某个文件中的隐含字符,UNIX格式的话,每行结尾是 “$”符号,而DOS格式则是 “^M”符号。

这个 “^M”是怎么来的,为啥.sh脚本文件就没有?

solaris修改后的*.ini文件,换行符变成了dos模式。

为啥嘞?

是从solaris传输到windows时,ftp采用自动模式传输,实际上ftp采用ascii模式传输,结果传输的ini文件被改写了,

这个现象是使用flashfxp从solaris下载到windows才发生的,从windows上传到solaris没有这种情况,linux与windows互传也没有这种情况。

得好好研究一下ftp的ascii模式和binary模式。

ASCII模式
复制时候会进行调整,主要体现为对不同操作系统的回车/换行/结束符等进行转译。
比如,回车符号在Unix下是\n(0A),Windows下是\r\n(0D0A),Mac下是\r(0D)。当在一个Windows操作系统上用 ASCII方式从Unix服务器上下载文件时——无论是文本文件还是二进制文件——都会进行检测和转换:每检测到一个0A,则认为是回车符号,自动插入 0D形成Windows下的回车符。显然,如果下载的是文本文件,这种转换是很有用的——我们能在Windows下看到分行后的文本,否则我们看到的是中间夹杂着小黑方块的不换行的一堆文字;然而如果下载的是二进制文件(比如exe或rar),这种转换无异于画蛇添足,破坏了整个文件。(PS:我的FlashFXP设置的是默认,估计就是按文件的特征信息来判断是文本还是二进制,但它向linux传却用了windows的newLine符,可能是个bug吧)

-------------------------------------------------------------以下是我总结的一点儿经验------------------------------------------------------------------------------------------

从linux下载ini文本文件到windows,或从windows上传到ini文本文件linux,尽管我设置为ascii模式,但最终传输还是使用binary模式。

但windows与solaris之间传输ini文本文件时ascii模式是起作用的,不论是从windows上传到solaris,还是从solairs下载到windows:

我把一个unix格式的ini文件也通过ascii模式从windows上传到solaris,flashfxp的消息窗口还有warning警告,提示发现13出换行符有误。

如果把.ini后缀名换为.sh,则自动模式下,flashfxp采用binary模式从solaris下载到windows。看来如果让flashfxp自动判断,flashfxp不把.sh当成文件文件。

如果把传输模式设定为ascii,则从solaris下载到windows的.sh文件也会被修改换行符。

最终结论,从windows上传到solaris用自动传输模式应该是没有问题的,前提是上传的文件原来的格式是正确的。比如.sh文件上传前就应该使用UNIX换行符。

当然用ascii传输模式上传script脚本,如.sql文件,也可以二次检验一下是否使用UNIX换行符,传输过程中把发现的windows换行符都改成UNIX换行符。

但是,如果传输.jar包之类的程序文件,千万不能用ascii模式。用自动模式也行,binary模式也行,因为flashfxp的自动模式会判断传输文件的后缀是不是文本文件类型,jar包不算文本类型,所以实际传输时还是binary模式。

要是不想麻烦,就用自动模式,让程序去判断哪些是文本文件,哪些不是文本文件。

如果你明白了这个道理,就可以选定传输模式。

-------------------------------------------------------------以上是我总结的一点儿经验-----------------------------------------------------------------------------------

因此,如果服务器和客户端的OS不相同,对于ASCII文件(文本文件)采用ASCII模式下载,对于非文本文件采用BINARY模式下载;如果两端OS相同,两种方式具有同样效果。

如何解决:
有些经常游走在两个OS之间的人员采取的习惯做法是:将在Windows下编辑的文件转换成Unix模式,而FTP默认用BINARY模式传输。(PS:最终我也选择这种模式,好处两点,1newLine符我控制,清晰;2不用ascii方式的转换,速度也快)。

FTP的两种传输模式:BINARY和ASCII

http://blog.chinaunix.net/uid-20546486-id-4256823.html

Linux上如何进行换行符转换

https://wdp107.iteye.com/blog/892133

文件

ini文件多了个dos的^M结尾符号,导致linux下脚本程序不能运行的更多相关文章

  1. 【java】 linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

  2. 位图文件(BMP)格式以及Linux下C程序实现(转)

    源:位图文件(BMP)格式以及Linux下C程序实现 说到图片,位图(Bitmap)当然是最简单的,它是Windows显示图片的基本格式,其文件扩展名为*.BMP.由于没有经过任何的压缩,故BMP图 ...

  3. Linux下脚本文件第一行的作用

    Linux下脚本文件第一行的作用 在Linux/Unix系统中,你可以在脚本hello.py顶部添加以下命令让Python脚本可以像SHELL脚本一样可直接执行: #! /usr/bin/env py ...

  4. windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式

    常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...

  5. Linux下修改默认字符集--->解决Linux下Java程序种中文文件夹file.isDirectory()判断失败的问题

    一.问题描述: 一个项目中为了生成树状目录,调用了file.listFiles()方法,然后利用file.isDirectory()方法判断是否为目录,该程序在windows下运行无问题,在Linux ...

  6. linux 下启动程序的时候会显示坏的解释器,或者没有那个文件

    又一次开发的时候在windowns上编写完的程序放到linux下运行的时候,比如:./start.sh的时候显示:"坏的解释器,没有那个文件"错误, 原因是windowns下写的s ...

  7. linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

  8. Linux下中断程序导致写文件失败的分析

    案例: 一个普通linux C程序,执行期间会进行多次printf操作,利用bash脚本重定向功能,将stdout重定向到一个另一个文件中去.在运行途中用ctrl+C终止程序,发现定向文件始终为空,即 ...

  9. openwrt 下python程序后台运行,并将打印信息保存文件

    python -u gw20191223.py  > test.log 1 2 & "python" 表示执行python代码 "-u" 表示不启 ...

随机推荐

  1. nagios客户端安装监控

    1.在客户端机器上安装epel扩展源 yum install -y epel-release2.yum安装nagios及依赖包软件 yum install -y nagios-plugins nagi ...

  2. 自己用canvas写的贪吃蛇代码

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 二叉搜索树倒序O(nlogn)建树

    由于在某些糟糕情况下,二叉查找树会退化成链,故而朴素建树过程其复杂度可能会退化成\(O(n^2)\). 采用倒序连边建树的方法可以使得二叉查找树建树复杂度稳定在\(O(nlogn)\). 具体思路如下 ...

  4. FESCAR

    FESCAR:阿里重磅开源分布式事务解决方案 FESCAR名字的由来:Fast & EaSy Commit And Rollback FESCAR是啥? 被用在微服务架构中的高性能分布式事务解 ...

  5. mongodb增删改查常用命令总结

    前言 去年我还折腾过mongodb,后来用不到也就没碰了,这就导致了我忘的一干二净,不得不感叹,编程这东西只要不用,就会忘没了.现在我想重拾mongodb,来总结一下常用命令,主要就是增删改查. 另外 ...

  6. 【6.18校内test】T3细胞分裂

    尽管T1T2很简单,但还是阻止不了我T3wa一片 细胞分裂[题目链接] xcg同学有一个80pts的代码 他说他的代码和我的很像,可惜我比较笨,只有30pts 其实这道题考场上是想到要分解质因数了,然 ...

  7. Python笔记(二)

    python笔记 函数式编程 函数 函数是Python内建支持一种封装(将大段代码拆成函数) 通过函数的调用,可以将复制的任务分解. 函数式编程(Functional Programming) 计算机 ...

  8. 组合&多态&封装

    目录 组合&多态&封装 一.组合 1.1什么是组合 1.2 为什么要用组合 1.3 如何使用组合 1.4 继承和组合都在什么时候用 二.多态与多态性 2.1 什么是多态 2.2 如何用 ...

  9. [.net core]10.请求静态文件, 自定义默认文件名

    何谓静态文件,文件系统上的文件,  css, javascript , image. html  这些都属于静态文件, .net core web app 默认是不处理文件请求的.  我们来做一个实验 ...

  10. centos安装mysql以及授权登录用户

    CentOS第一次安装MySQL的完整步骤 目录     1.官方安装文档    2.下载 Mysql yum包    3.安转软件源    4.安装mysql服务端    5.首先启动mysql   ...