因为本人工作中要涉及到很多东西,审计(日志、数据神马的)、源代码审计、渗透测试、开发一大堆东西,有些东西,越是深入去做,越会发现,没有工具或脚本,工作起来是有多么的坑。

工作的这段时间,自己写了几个工具:Web日志分析、linux服务器安全检查脚本、webshell查杀和webshell文件监控工具,接下来找机会,我会慢慢的都给大家共享出来。

其实我遇到的情况,很多管理员都会遇到,一堆服务器,尤其是linux的,没办法像windows那样便捷,现成的工具也没有辣么多,有些工具呢,你还得装环境,但是,无论是在客户那里,还是在自己的服务器上,都不天愿意装一堆环境,纯手工检查吧,有点慢,也枯燥,所以诞生了这个脚本。

脚本大致内容:基本信息统计(IP地址、MAC地址、端口信息、服务信息等)、主机安全检查(包括等保三级要求主机相关的检查点)、系统性能统计(暂时未加入分析)、恶意代码、程序检查等检查点。

脚本内容涉及到:

1、查看系统密码文件修改时间

2、查看是否开启了ssh服务

3、查看系统SSH远程访问设置策略(host.deny拒绝列表)

4、查看shell是否设置超时锁定策略

5、查看syslog日志审计服务是否开启

6、查看syslog日志是否开启外发

7、查看passwd文件中有哪些特权用户

8、查看系统中是否存在空口令账户

9、PHP、JSP、perl、Python、HTML、以及linux下可执行文件内容的检查

里面列举了一些常见webshell、提权EXP、以及Python扫描工具、嗅探工具的特征,如果发现此类相关的文件,则会显示出来,或者拷贝一份到/tmp/目录下

例如:能扫描到的linux下提权工具:

一共是172个文件。都可以扫描的到。。。。

其实整个脚本相对起来比较简单,主要用到的命令为

find / -type

if语句

awk命令

more

egrep

等命令组成。

比如说awk命令,我们用more或cat命令,读取某个文件内容,然后通过awk进行筛选和输出,来显示我们想要看的东西

例如:

more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' '  '{if($2!=90){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'

从这里我们可以看到,通过more来打开/etc/login.defs文件,并查找关键字“PASS_MAX_DAYS”,用awk命令,筛选以”为分隔符的内容,用作判断,如果$2第二个分隔符位置的内容不等于90,则输出该内容。

同理,任意针对文件内容做筛选的结果,都可以通过这样的方式去显示我们想要显示的内容。

又例如:

echo "查看系统中存在哪些非系统默认用户"

echo "root:x:“该值大于500为新创建用户,小于或等于500为系统初始用户”"

more /etc/passwd |awk -F ":" '{if($3>500){print "/etc/passwd里面的"$1 "的值为"$3",请管理员确认该账户是否正常。"}}'

echo ------------------------------------------------------------------------

if语句相关:

echo --------------------------------------------------------------------------

echo "检查系统文件完整性2(MD5检查)"

echo "该项会获取部分关键文件的MD5值并入库,默认保存在/etc/md5db中"

echo "如果第一次执行,则会提示md5sum: /sbin/portmap: 没有那个文件或目录"

echo "第二次重复检查时,则会对MD5DB中的MD5值进行匹配,来判断文件是否被更改过"

file="/etc/md5db"

if [ -e "$file" ]; then md5sum -c /etc/md5db 2>&1;

else

md5sum /etc/passwd >>/etc/md5db

md5sum /etc/shadow >>/etc/md5db

md5sum /etc/group >>/etc/md5db

md5sum /usr/bin/passwd >>/etc/md5db

md5sum /sbin/portmap>>/etc/md5db

md5sum /bin/login >>/etc/md5db

md5sum /bin/ls >>/etc/md5db

md5sum /bin/ps >>/etc/md5db

md5sum /usr/bin/top >>/etc/md5db;

fi

echo ----------------------------------------------------------------------

这里呢,对部分敏感文件的MD5值做了下验证,大致思路是,先检查/etc/md5db是否存在,如果不存在的话,则将所涉及文件的MD5值入库,并保存到/etc/md5db文件中,当我们第二次对服务器进行检查时,则会对比两次的MD5值,如果MD5值发生变化,则会进行提醒。

脚本本身没什么复杂的东西,我先贴出部分内容,供大家参考下。

#!/bin/bash

echo "         (__)"

echo "         (oo)"

echo "   /------\/ "

echo "  / |    ||  "

echo " *  /\---/\  "

echo "   ~~   ~~   "

echo "...."Are You Ready?"..."

read key

echo "警告:本脚本只是一个检查的操作,未对服务器做任何修改,管理员可以根据此报告进行相应的设置。"

echo ---------------------------------------主机安全检查-----------------------

echo "系统版本"

uname -a

echo --------------------------------------------------------------------------

echo "本机的ip地址是:"

ifconfig | grep --color "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"

echo --------------------------------------------------------------------------

awk -F":" '{if($2!~/^!|^*/){print "("$1")" " 是一个未被锁定的账户,请管理员检查是否需要锁定它或者删除它。"}}' /etc/shadow

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' '  '{if($2!=90){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E "PASS_MIN_LEN" | grep -v "#" |awk -F' '  '{if($2!=6){print "/etc/login.defs里面的"$1 "设置的是"$2"个字符,请管理员改成6个字符。"}}'

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E "PASS_WARN_AGE" | grep -v "#" |awk -F' '  '{if($2!=10){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员将口令到期警告天数改成10天。"}}'

echo --------------------------------------------------------------------------

grep TMOUT /etc/profile /etc/bashrc > /dev/null|| echo "未设置登录超时限制,请设置之,设置方法:在/etc/profile或者/etc/bashrc里面添加TMOUT=600参数"

echo --------------------------------------------------------------------------

if ps -elf |grep xinet |grep -v "grep xinet";then

echo "xinetd 服务正在运行,请检查是否可以把xinnetd服务关闭"

else

echo "xinetd 服务未开启"

fi

echo --------------------------------------------------------------------------

echo "查看系统密码文件修改时间"

ls -ltr /etc/passwd

echo --------------------------------------------------------------------------

echo  "查看是否开启了ssh服务"

if service sshd status | grep -E "listening on|active \(running\)"; then

echo "SSH服务已开启"

else

echo "SSH服务未开启"

fi

echo --------------------------------------------------------------------------

echo "查看是否开启了TELNET服务"

if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"; then

echo  "TELNET服务已开启 "

else

echo  "TELNET服务未开启 "

fi

echo --------------------------------------------------------------------------

echo  "查看系统SSH远程访问设置策略(host.deny拒绝列表)"

if more /etc/hosts.deny | grep -E "sshd: ";more /etc/hosts.deny | grep -E "sshd"; then

echo  "远程访问策略已设置 "

else

echo  "远程访问策略未设置 "

fi

echo --------------------------------------------------------------------------

脚本运行截图

主机安全检查

恶意程序、代码检查

关键文件修改时间查看

系统性能检查

完整脚本代码

#!/bin/bash

echo "         (__)"

echo "         (oo)"

echo "   /------\/ "

echo "  / |    ||  "

echo " *  /\---/\  "

echo "   ~~   ~~   "

echo "...."Are You Ready?"..."

read key

echo "警告:本脚本只是一个检查的操作,未对服务器做任何修改,管理员可以根据此报告进行相应的设置。"

echo ---------------------------------------主机安全检查-----------------------

echo "系统版本"

uname -a

echo --------------------------------------------------------------------------

echo "本机的ip地址是:"

ifconfig | grep --color "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"

echo --------------------------------------------------------------------------

awk -F":" '{if($2!~/^!|^*/){print "("$1")" " 是一个未被锁定的账户,请管理员检查是否需要锁定它或者删除它。"}}' /etc/shadow

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' '  '{if($2!=90){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E "PASS_MIN_LEN" | grep -v "#" |awk -F' '  '{if($2!=6){print "/etc/login.defs里面的"$1 "设置的是"$2"个字符,请管理员改成6个字符。"}}'

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E "PASS_WARN_AGE" | grep -v "#" |awk -F' '  '{if($2!=10){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员将口令到期警告天数改成10天。"}}'

echo --------------------------------------------------------------------------

grep TMOUT /etc/profile /etc/bashrc > /dev/null|| echo "未设置登录超时限制,请设置之,设置方法:在/etc/profile或者/etc/bashrc里面添加TMOUT=600参数"

echo --------------------------------------------------------------------------

if ps -elf |grep xinet |grep -v "grep xinet";then

echo "xinetd 服务正在运行,请检查是否可以把xinnetd服务关闭"

else

echo "xinetd 服务未开启"

fi

echo --------------------------------------------------------------------------

echo "查看系统密码文件修改时间"

ls -ltr /etc/passwd

echo --------------------------------------------------------------------------

echo  "查看是否开启了ssh服务"

if service sshd status | grep -E "listening on|active \(running\)"; then

echo "SSH服务已开启"

else

echo "SSH服务未开启"

fi

echo --------------------------------------------------------------------------

echo "查看是否开启了TELNET服务"

if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"; then

echo  "TELNET服务已开启 "

else

echo  "TELNET服务未开启 "

fi

echo --------------------------------------------------------------------------

echo  "查看系统SSH远程访问设置策略(host.deny拒绝列表)"

if more /etc/hosts.deny | grep -E "sshd: ";more /etc/hosts.deny | grep -E "sshd"; then

echo  "远程访问策略已设置 "

else

echo  "远程访问策略未设置 "

fi

echo --------------------------------------------------------------------------

echo  "查看系统SSH远程访问设置策略(hosts.allow允许列表)"

if more /etc/hosts.allow | grep -E "sshd: ";more /etc/hosts.allow | grep -E "sshd"; then

echo  "远程访问策略已设置 "

else

echo  "远程访问策略未设置 "

fi

echo "当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准。"

echo -------------------------------------------------------------------------

echo "查看shell是否设置超时锁定策略"

if more /etc/profile | grep -E "TIMEOUT= "; then

echo  "系统设置了超时锁定策略 "

else

echo  "未设置超时锁定策略 "

fi

echo -------------------------------------------------------------------------

echo "查看syslog日志审计服务是否开启"

if service syslog status | egrep " active \(running";then

echo "syslog服务已开启"

else

echo "syslog服务未开启,建议通过service syslog start开启日志审计功能"

fi

echo -------------------------------------------------------------------------

echo "查看syslog日志是否开启外发"

if more /etc/rsyslog.conf | egrep "@...\.|@..\.|@.\.|\*.\* @...\.|\*\.\* @..\.|\*\.\* @.\.";then

echo "客户端syslog日志已开启外发"

else

echo "客户端syslog日志未开启外发"

fi

echo -------------------------------------------------------------------------

echo "查看passwd文件中有哪些特权用户"

awk -F: '$3==0 {print $1}' /etc/passwd

echo ------------------------------------------------------------------------

echo "查看系统中是否存在空口令账户"

awk -F: '($2=="!!") {print $1}' /etc/shadow

echo "该结果不适用于Ubuntu系统"

echo ------------------------------------------------------------------------

echo "查看系统中root用户外连情况"

lsof -u root |egrep "ESTABLISHED|SYN_SENT|LISTENING"

echo ----------------------------状态解释------------------------------

echo "ESTABLISHED的意思是建立连接。表示两台机器正在通信。"

echo "LISTENING的"

echo "SYN_SENT状态表示请求连接"

echo ------------------------------------------------------------------------

echo "查看系统中root用户TCP连接情况"

lsof -u root |egrep "TCP"

echo ------------------------------------------------------------------------

echo "查看系统中存在哪些非系统默认用户"

echo "root:x:“该值大于500为新创建用户,小于或等于500为系统初始用户”"

more /etc/passwd |awk -F ":" '{if($3>500){print "/etc/passwd里面的"$1 "的值为"$3",请管理员确认该账户是否正常。"}}'

echo ------------------------------------------------------------------------

echo "检查系统守护进程"

more /etc/xinetd.d/rsync | grep -v "^#"

echo ------------------------------------------------------------------------

echo "检查系统是否存在入侵行为"

more /var/log/secure |grep refused

echo ------------------------------------------------------------------------

echo "-----------------------检查系统是否存在PHP脚本后门---------------------"

if find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|专用网马|udf.dll|class PHPzip\{|ZIP压缩程序 荒野无灯修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木马|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木马|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn 1>/dev/null 2>&1;then

echo "检测到PHP脚本后门"

find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|专用网马|udf.dll|class PHPzip\{|ZIP压缩程序 荒野无灯修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木马|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木马|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn

find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|专用网马|udf.dll|class PHPzip\{|ZIP压缩程序 荒野无灯修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木马|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木马|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn |awk '{print $2}' | xargs -I{} cp {} /tmp/

echo "后门样本已拷贝到/tmp/目录"

else

echo "未检测到PHP脚本后门"

fi

echo ------------------------------------------------------------------------

echo "-----------------------检查系统是否存在JSP脚本后门---------------------"

find / -type f -name *.jsp | xargs egrep -l "InputStreamReader\(this.is\)|W_SESSION_ATTRIBUTE|strFileManag|getHostAddress|wscript.shell|gethostbyname|cmd.exe|documents and settings|system32|serv-u|提权|jspspy|后门" |sort -n|uniq -c |sort -rn 2>&1

find / -type f -name *.jsp | xargs egrep -l "InputStreamReader\(this.is\)|W_SESSION_ATTRIBUTE|strFileManag|getHostAddress|wscript.shell|gethostbyname|cmd.exe|documents and settings|system32|serv-u|提权|jspspy|后门" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/  2>&1

echo ------------------------------------------------------------------------

echo "----------------------检查系统是否存在HTML恶意代码---------------------"

if find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" 1>/dev/null 2>&1;then

echo "发现HTML恶意代码"

find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" |sort -n|uniq -c |sort -rn

find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/

echo "后门样本已拷贝到/tmp/目录"

else

echo "未检测到HTML恶意代码"

fi

echo "----------------------检查系统是否存在perl恶意程序----------------------"

if find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;" 1>/dev/null 2>&1;then

echo "发现perl恶意程序"

find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;"|sort -n|uniq -c |sort -rn

find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;"|sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/

echo "可疑样本已拷贝到/tmp/目录"

else

echo "未检测到perl恶意程序"

fi

echo "----------------------检查系统是否存在Python恶意程序----------------------"

find / -type f -name *.py | xargs egrep -l "execCmd|cat /etc/issue|getAppProc|exploitdb" |sort -n|uniq -c |sort -rn

find / -type f -name *.py | xargs egrep -l "execCmd|cat /etc/issue|getAppProc|exploitdb" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/

echo ------------------------------------------------------------------------

echo "-----------------------检查系统是否存在恶意程序---------------------"

find / -type f -perm -111  |xargs egrep "UpdateProcessER12CUpdateGatesE6C|CmdMsg\.cpp|MiniHttpHelper.cpp|y4'r3 1uCky k1d\!|execve@@GLIBC_2.0|initfini.c|ptmalloc_unlock_all2|_IO_wide_data_2|system@@GLIBC_2.0|socket@@GLIBC_2.0|gettimeofday@@GLIBC_2.0|execl@@GLIBC_2.2.5|WwW.SoQoR.NeT|2.6.17-2.6.24.1.c|Local Root Exploit|close@@GLIBC_2.0|syscall\(\__NR\_vmsplice,|Linux vmsplice Local Root Exploit|It looks like the exploit failed|getting root shell" 2>/dev/null

echo ------------------------------------------------------------------------

echo "检查网络连接和监听端口"

netstat -an

echo "--------------------------路由表、网络连接、接口信息--------------"

netstat -rn

echo "------------------------查看网卡详细信息--------------------------"

ifconfig -a

echo ------------------------------------------------------------------------

echo "查看正常情况下登录到本机的所有用户的历史记录"

last

echo ------------------------------------------------------------------------

echo "检查系统中core文件是否开启"

ulimit -c

echo "core是unix系统的内核。当你的程序出现内存越界的时候,操作系统会中止你的进程,并将当前内存状态倒出到core文件中,以便进一步分析,如果返回结果为0,则是关闭了此功能,系统不会生成core文件"

echo ------------------------------------------------------------------------

echo "检查系统中关键文件修改时间"

ls -ltr /bin/ls /bin/login /etc/passwd /bin/ps /usr/bin/top /etc/shadow|awk '{print "文件名:"$8"  ""最后修改时间:"$6" "$7}'

echo "ls文件:是存储ls命令的功能函数,被删除以后,就无法执行ls命令,黑客可利用篡改ls文件来执行后门或其他程序。

login文件:login是控制用户登录的文件,一旦被篡改或删除,系统将无法切换用户或登陆用户

user/bin/passwd是一个命令,可以为用户添加、更改密码,但是,用户的密码并不保存在/etc/passwd当中,而是保存在了/etc/shadow当中

etc/passwd是一个文件,主要是保存用户信息。

sbin/portmap是文件转换服务,缺少该文件后,无法使用磁盘挂载、转换类型等功能。

bin/ps 进程查看命令功能支持文件,文件损坏或被更改后,无法正常使用ps命令。

usr/bin/top  top命令支持文件,是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。

etc/shadow shadow 是 /etc/passwd 的影子文件,密码存放在该文件当中,并且只有root用户可读。"

echo --------------------------------------------------------------------------

echo "-------------------查看系统日志文件是否存在--------------------"

log=/var/log/syslog

log2=/var/log/messages

if [ -e "$log" ]; then

echo  "syslog日志文件存在! "

else

echo  "/var/log/syslog日志文件不存在! "

fi

if [ -e "$log2" ]; then

echo  "/var/log/messages日志文件存在! "

else

echo  "/var/log/messages日志文件不存在! "

fi

echo --------------------------------------------------------------------------

echo "检查系统文件完整性2(MD5检查)"

echo "该项会获取部分关键文件的MD5值并入库,默认保存在/etc/md5db中"

echo "如果第一次执行,则会提示md5sum: /sbin/portmap: 没有那个文件或目录"

echo "第二次重复检查时,则会对MD5DB中的MD5值进行匹配,来判断文件是否被更改过"

file="/etc/md5db"

if [ -e "$file" ]; then md5sum -c /etc/md5db 2>&1;

else

md5sum /etc/passwd >>/etc/md5db

md5sum /etc/shadow >>/etc/md5db

md5sum /etc/group >>/etc/md5db

md5sum /usr/bin/passwd >>/etc/md5db

md5sum /sbin/portmap>>/etc/md5db

md5sum /bin/login >>/etc/md5db

md5sum /bin/ls >>/etc/md5db

md5sum /bin/ps >>/etc/md5db

md5sum /usr/bin/top >>/etc/md5db;

fi

echo ----------------------------------------------------------------------

echo "------------------------主机性能检查--------------------------------"

echo "CPU检查"

dmesg | grep -i cpu

echo -----------------------------------------------------------------------

more /proc/cpuinfo

echo -----------------------------------------------------------------------

echo "内存状态检查"

vmstat 2 5

echo -----------------------------------------------------------------------

more /proc/meminfo

echo -----------------------------------------------------------------------

free -m

echo -----------------------------------------------------------------------

echo "文件系统使用情况"

df -h

echo -----------------------------------------------------------------------

echo "网卡使用情况"

lspci -tv

echo ----------------------------------------------------------------------

echo "查看僵尸进程"

ps -ef | grep zombie

echo ----------------------------------------------------------------------

echo "耗CPU最多的进程"

ps auxf |sort -nr -k 3 |head -5

echo ----------------------------------------------------------------------

echo "耗内存最多的进程"

ps auxf |sort -nr -k 4 |head -5

echo ----------------------------------------------------------------------

echo ---------------------------------------------------------------------

echo "COPY RIGHT  鬼魅羊羔"

echo "QQ:183126820"

echo ---------------------------------------------------------------------

关于脚本使用的几个问题

直接上传到服务器中,有时候出现中文乱码的情况

乱码情况解决办法:

dos文件转换成 unix 文件格式

dos 格式 文件 传输到 unix 系统时 , 会在每行的结尾多一个 ^M , 当然也有可能看不到 , 但是在 vi 的时候 , 会在下面显示此文件的格式 , 比如   "dos.txt" [dos] 120L, 2532C 字样 , 表示是一个 [dos] 格式文件 , 如果是 MAC 系统的 , 会显示 [MAC] , 因为文件格式的原因有时会导致我们的 unix 程序 , 或者 shell 程序出现错误 , 那么需要把这些 dos 文件格式转换成 unix 格式 , 方法是

vi   dos.txt

:set fileformat=unix

:w

这样文件就转换成 unix 格式 文件了 ,一般在 windows 机器上编写好了文件传到 unix 下就可能会出现这样的情况 , 而一般我们使用 ftp 命令, 常常会加上 bin 参数表示二进制传输, 可是试一下不加 bin 参数 , 可能传到 unix 下就是 unix 格式

Linux打开txt文件乱码的解决方法

Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致。Linux下使用的编码是utf8,而Windows使用的是gb18030。因此,解决Linux打开txt文件中文乱码可有如下两种方法。

方法一:

在附件终端中,进入到txt文件所在目录,使用命令符“iconv -f gb18030  -t utf8 1.txt -o 2.txt”把gb18030编码的1.txt转换成utf8的2.txt。这样2.txt就成为Linux支持的编码。

方法二:

在附件终端中,使用命令符“gconf-editor”,进入环境配置,依次展开“/apps/gedit-2/preferences/encodings/”,编辑右侧的“auto_detected”将“gb18030”添加到最顶上。以后文本编辑器就可以正常显示中文了。

其实脚本还能增加很多实用的东西,由于最近事儿太多,就没做改动。

等这段时间忙完了,再上来更新新的东西。

原文  http://www.freebuf.com/sectool/108564.html

如何编写自己的Linux安全检查脚本?的更多相关文章

  1. Linux 用脚本编写搭建yum本地仓库

    Linux 用脚本编写搭建yum本地仓库 源码如下: #!/bin/bash #该脚本用于自动化搭建本地yum仓库 #挂载光盘 #作者:雨中落叶 #博客:https://www.cnblogs.com ...

  2. 如何在linux下编写一个简单的Shell脚本程序

    在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...

  3. Linux | Shell脚本的编写

    Shell 脚本的介绍 Shell脚本通过Shell终端解释器当作人与计算机硬件之间的翻译官,用户可以通过它执行各种命令,不仅有简单的,还有复杂的,比如:判断.循环.分支等这些高级编程中才有的特性.S ...

  4. Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)

    本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...

  5. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  6. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  7. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  8. 读《Linux Shell脚本攻略》(第2版) 总结

    前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...

  9. 【学习】Linux Shell脚本编程

    1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...

随机推荐

  1. Visual Studio Profiler 跟踪检查每个exe dll 性能 执行时间 CPU占用情况的方法

  2. 关于使用base36的技巧 生成 优惠券兑换码的相关讨论

    关于优惠券的生成后台的制作问题,已经拖了很久了还没有合并.但是持续暴露出来的问题 也很多,我的代码以及前面的一个人的代码被持续review暴露出了大量问题.昨天晚上在

  3. Scene View Navigation

    [Scene View Navigation] Hold the right mouse button to enter Flythrough mode. This turns your mouse ...

  4. 如何在Centos上安装python3.4

    Centos上面默认的Python版本是2.6,本文介绍如何安装3.4版本. 0.下载前准备 需要安装以下库,不然会有问题. yum -y install zlib-devel bzip2-devel ...

  5. linux 下查找大于100M的文件

    命令行如下 find . -type f -size +100M Linux系统下查找大文件或目录的技巧 当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢?以易读 ...

  6. JS、OnClientClick、OnClick

    OnClientClick是客户端事件处理方法,一般采用JavaScript来进行处理,也就是直接在浏览器端运行,一点击就运行: OnClick是服务器端事件处理方法,在服务器端也就是IIS中运行,点 ...

  7. MFC下的各种字符串类型和相互转换

    MFC下的常用字符串数据类型表示的含义: L:Long  长 P:Point  指针 C:Const  常量 W:Wchar_t  宽字符 T:TCHAR  STR:String  字符串 在看看MF ...

  8. hdu 2881 Jack's struggle(DP)

    对于所有的任务所在的地点按照时间排序,可以将其看成是一道非常简单的“天上掉馅饼”的题的二维版本. 将这些任务看成从天而降的馅饼,统计有哪些之前馅饼掉落的位置可以在两者时间差内到达该点的点,取其最大值. ...

  9. Ajax.ActionLink与Ajax.BeginForm使用场所的思考

    Ajax.ActionLink使用在提交参数明确的情况下,如: Ajax.ActionLink("加入购物车", "AddToCart", "Cart ...

  10. css初始化代码方案

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期 2014-06-24) 为了消除各浏览器对css默认的设置,保持网页在各浏览器中的外观保持一致,初始化css就显得非常必要了!很多时候 ...