2018-04-18 14:27:48 P5dEyT322JACS 阅读数 504
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20720 人正在学习 去看看 马永亮

(点击上方公众号,可快速关注)


英文:Vivek Gite,翻译:Linux中国/pygmalion666

linux.cn/article-9510-1.html


有些误解认为 shell 脚本仅用于 CLI 环境。实际上在 KDE 或 Gnome 桌面下,你可以有效的使用各种工具编写 GUI 或者网络(socket)脚本。shell 脚本可以使用一些 GUI 组件(菜单、警告框、进度条等),你可以控制终端输出、光标位置以及各种输出效果等等。利用下面的工具,你可以构建强壮的、可交互的、对用户友好的 UNIX/Linux bash 脚本。


制作 GUI 应用不是一项困难的任务,但需要时间和耐心。幸运的是,UNIX 和 Linux 都带有大量编写漂亮 GUI 脚本的工具。以下工具是基于 FreeBSD 和 Linux 操作系统做的测试,而且也适用于其他类 UNIX 操作系统。


1、notify-send 命令


notify-send 命令允许你借助通知守护进程发送桌面通知给用户。这种避免打扰用户的方式,对于通知桌面用户一个事件或显示一些信息是有用的。在 Debian 或 Ubuntu 上,你需要使用 apt 命令 或 apt-get 命令 安装的包:


sudo apt-get install libnotify-bin


CentOS/RHEL 用户使用下面的 yum 命令:


sudo yum install libnotify


Fedora Linux 用户使用下面的 dnf 命令:


`$ sudo dnf install libnotify`

In this example, send simple desktop notification from the command line, enter:

### 发送一些通知 ###

notify-send "rsnapshot done :)"


示例输出:


640?wx_fmt=png

notify-send: Shell Script Get Or Send Desktop Notifications


下面是另一个附加选项的代码:


...

alert=18000

live=$(lynx --dump http://money.rediff.com/ | grep 'BSE LIVE' | awk '{ print $5}' | sed 's/,//g;s/\.[0-9]*//g')

[ $notify_counter -eq 0 ] && [ $live -ge $alert ] && { notify-send -t 5000 -u low -i   "BSE Sensex touched 18k";  notify_counter=1; }

...


示例输出:


640?wx_fmt=png

Linux / UNIX: Display Notifications From Your Shell Scripts With notify-send


这里:


  • -t 5000:指定超时时间(毫秒) (5000 毫秒 = 5 秒)

  • -u low: 设置紧急等级 (如:低、普通、紧急)

  • -i gtk-dialog-info: 设置要显示的图标名称或者指定的图标(你可以设置路径为:-i /path/to/your-icon.png)


关于更多使用 notify-send 功能的信息,请参考 man 手册。在命令行下输入 man notify-send 即可看见:


man notify-send


2、tput 命令


tput 命令用于设置终端特性。通过 tput 你可以设置:


  • 在屏幕上移动光标。

  • 获取终端信息。

  • 设置颜色(背景和前景)。

  • 设置加粗模式。

  • 设置反转模式等等。


下面有一段示例代码:


#!/bin/bash

# clear the screen

tput clear

# Move cursor to screen location X,Y (top left is 0,0)

tput cup 3 15

# Set a foreground colour using ANSI escape

tput setaf 3

echo "XYX Corp LTD."

tput sgr0

tput cup 5 17

# Set reverse video mode

tput rev

echo "M A I N - M E N U"

tput sgr0

tput cup 7 15

echo "1. User Management"

tput cup 8 15

echo "2. Service Management"

tput cup 9 15

echo "3. Process Management"

tput cup 10 15

echo "4. Backup"

# Set bold mode

tput bold

tput cup 12 15

read -p "Enter your choice [1-4] " choice

tput clear

tput sgr0

tput rc


示例输出:


640?wx_fmt=png

Linux / UNIX Script Colours and Cursor Movement With tput


关于 tput 命令的详细信息,参见手册:


man 5 terminfo

man tput


3、setleds 命令


setleds 命令允许你设置键盘灯。下面是打开数字键灯的示例:


setleds -D +num


关闭数字键灯,输入:


setleds -D -num


  • -caps:关闭大小写锁定灯

  • +caps:打开大小写锁定灯

  • -scroll:关闭滚动锁定灯

  • +scroll:打开滚动锁定灯


查看 setleds 手册可看见更多信息和选项 man setleds。



4、zenity 命令


zenity 命令显示 GTK+ 对话框,并且返回用户输入。它允许你使用各种 Shell 脚本向用户展示或请求信息。下面是一个 whois 指定域名目录服务的 GUI 客户端示例。


#!/bin/bash

# Get domain name

_zenity="/usr/bin/zenity"

_out="/tmp/whois.output.$$"

domain=$(${_zenity} --title  "Enter domain" \

             --entry --text "Enter the domain you would like to see whois info" )

if [ $? -eq 0 ]

then

  # Display a progress dialog while searching whois database

  whois $domain  | tee >(${_zenity} --width=200 --height=100 \

                    --title="whois" --progress \

                        --pulsate --text="Searching domain info..." \

                                    --auto-kill --auto-close \

                                    --percentage=10) >${_out}

  # Display back output

  ${_zenity} --width=800 --height=600  \

         --title "Whois info for $domain" \

         --text-info --filename="${_out}"

else

  ${_zenity} --error \

         --text="No input provided"

fi


示例输出:


640?wx_fmt=png

zenity: Linux / UNIX display Dialogs Boxes From The Shell Scripts


参见手册获取更多 zenity 信息以及其他支持 GTK+ 的组件:


zenity --help

man zenity


5、kdialog 命令


kdialog 命令与 zenity 类似,但它是为 KDE 桌面和 QT 应用设计。你可以使用 kdialog 展示对话框。下面示例将在屏幕上显示信息:


kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."


示例输出:


640?wx_fmt=png

Kdialog: Suppressing the display of a dialog



6、Dialog


Dialog 是一个使用 Shell 脚本的应用,显示用户界面组件的文本。它使用 curses 或者 ncurses 库。下面是一个示例代码:


#!/bin/bash

dialog --title "Delete file" \

--backtitle "Linux Shell Script Tutorial Example" \

--yesno "Are you sure you want to permanently delete \"/tmp/foo.txt\"?" 7 60

# Get exit status

# 0 means user hit [yes] button.

# 1 means user hit [no] button.

# 255 means user hit [Esc] key.

response=$?

case $response in

   0) echo "File deleted.";;

   1) echo "File not deleted.";;

   255) echo "[ESC] key pressed.";;

esac


参见 dialog 手册获取详细信息:man dialog。


关于其他用户界面工具的注意事项


UNIX、Linux 提供了大量其他工具来显示和控制命令行中的应用程序,shell 脚本可以使用一些 KDE、Gnome、X 组件集:


  • gmessage - 基于 GTK xmessage 的克隆

  • xmessage - 在窗口中显示或询问消息(基于 X 的 /bin/echo)

  • whiptail - 显示来自 shell 脚本的对话框

  • python-dialog - 用于制作简单文本或控制台模式用户界面的 Python 模块



7、logger 命令


logger 命令将信息写到系统日志文件,如:/var/log/messages。它为系统日志模块 syslog 提供了一个 shell 命令行接口:


logger "MySQL database backup failed."

tail -f /var/log/messages

logger -t mysqld -p daemon.error "Database Server failed"

tail -f /var/log/syslog


示例输出:


Apr 20 00:11:45 vivek-desktop kernel: [38600.515354] CPU0: Temperature/speed normal

Apr 20 00:12:20 vivek-desktop mysqld: Database Server failed


可以查看 logger 手册获取详细信息:man logger


8、setterm 命令


setterm 命令可设置不同的终端属性。下面的示例代码会强制屏幕在 15 分钟后变黑,监视器则 60 分钟后待机。


setterm -blank 15 -powersave powerdown -powerdown 60


下面的例子将 xterm 窗口中的文本以下划线展示:


setterm -underline on;

echo "Add Your Important Message Here"

setterm -underline off


另一个有用的选项是打开或关闭光标显示:


setterm -cursor off


打开光标:


setterm -cursor on


参见 setterm 命令手册获取详细信息:man setterm


9、smbclient:给 MS-Windows 工作站发送消息


smbclient 命令可以与 SMB/CIFS 服务器通讯。它可以向 MS-Windows 系统上选定或全部用户发送消息。


smbclient -M WinXPPro <<eof

Message 1

Message 2

...

..

EOF



echo "${Message}" | smbclient -M salesguy2


参见 smbclient 手册:man smbclient


10、Bash 套接字编程


在 bash 下,你可以打开一个套接字并通过它发送数据。你不必使用 curl 或者 lynx 命令抓取远程服务器的数据。bash 和两个特殊的设备文件可用于打开网络套接字。以下选自 bash 手册:


  1. /dev/tcp/host/port - 如果 host 是一个有效的主机名或者网络地址,而且端口是一个整数或者服务名,bash 会尝试打开一个相应的 TCP 连接套接字。

  2. /dev/udp/host/port - 如果 host 是一个有效的主机名或者网络地址,而且端口是一个整数或者服务名,bash 会尝试打开一个相应的 UDP 连接套接字。


你可以使用这项技术来确定本地或远程服务器端口是打开或者关闭状态,而无需使用 nmap 或者其它的端口扫描器。


# find out if TCP port 25 open or not

(echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"


下面的代码片段,你可以利用 bash 循环找出已打开的端口:


echo "Scanning TCP ports..."

for p in {1..1023}

do

  (echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open"

done


示例输出:


Scanning TCP ports...

22 open

53 open

80 open

139 open

445 open

631 open


下面的示例中,你的 bash 脚本将像 HTTP 客户端一样工作:


#!/bin/bash

exec 3<> /dev/tcp/${1:-www.cyberciti.biz}/80

printf "GET / HTTP/1.0\r\n" >&3

printf "Accept: text/html, text/plain\r\n" >&3

printf "Accept-Language: en\r\n" >&3

printf "User-Agent: nixCraft_BashScript v.%s\r\n" "${BASH_VERSION}"   >&3

printf "\r\n" >&3

while read LINE <&3

do

   # do something on $LINE

   # or send $LINE to grep or awk for grabbing data

   # or simply display back data with echo command

   echo $LINE

done


参见 bash 手册获取更多信息:man bash


关于 GUI 工具和 cron 任务的注意事项


如果你 使用 crontab 来启动你的脚本,你需要使用 export DISPLAY=[用户机器]:0 命令请求本地显示或输出服务。举个例子,使用 zenity 工具调用 /home/vivek/scripts/monitor.stock.sh:


@hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh


你有喜欢的可以增加 shell 脚本趣味的 UNIX 工具么?请在下面的评论区分享它吧。


关于作者


本文作者是 nixCraft 创始人、一个老练的系统管理员、Linux 操作系统和 UNIX shell 编程培训师。他服务来自全球的客户和不同的行业,包括 IT 、教育、防务和空间探索、还有非营利组织。你可以在 Twitter,Facebook,Google+ 上面关注他。



看完本文有收获?请分享给更多人

关注「Linux 爱好者」,提升Linux技能640?wx_fmt=png


2019-03-02 18:05:00 ZZXin_ 阅读数 1196
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20720 人正在学习 去看看 马永亮

由于本人记性不好,所以将深度学习环境配置过程中的活生生教训记录下来,避免以后再在相同的地方栽跟头,时间如金,且行且珍惜。
这个方法在环境配置环境完成后才发现的,一般来讲啊,亲测有效的一般含金量都比较高,至于适合不适合就是另外一回事了。Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)

1、安装显卡驱动
安装显卡驱动的方式有很多,网上的教程也大同小异,可是各个教程都一一试过之后,竟然没有一个安装成功,这运气…回想一下各个教程依次安装中都会出现一个神奇的界面,secure boot密钥的设置界面,然后就都失败了,无一幸免。在这个接近崩溃,几乎想要放弃的时候竟然发现了他——华硕主板禁用UEFI安全启动(Disable Secure Boot for ASUS Motherboard),还有,他的情况不是和我一样么:华硕主板禁用UEFI安全启动(Disable Secure Boot for ASUS Motherboard),终于问题在两天的挣扎中得以解脱,成功关闭掉UEFI,现在想想还莫名的兴奋。

  • 关闭UEFI;
    Make sure the “OS Type” is “Windows UEFI”
    Enter “Key Management”
    Select “Clear Secure Boot keys” (You will have the option “Install default Secure Boot keys” to restore the default keys after you cleared the Secure Boot Keys)
    After you cleared the Secure Boot Keys, Secure Boot will be automatically disabled. You can set the OS Type to Other OS now.
  • 安装显卡驱动 [专业亲测]Ubuntu16.04安装Nvidia显卡驱动(cuda)–解决你的所有困惑
    硬件配置:Ubuntu16.04、显卡1080Ti
    安装步骤:
    1.从NVIDIA官网查找并下载相对应的显卡驱动;
    2.删除旧的驱动:
    sudo apt-get purge nvidia*
    3.禁用nouveau:
    sudo vim /etc/modprobe.d/blacklist-nouveau.conf
    填写以下禁止配置的内容:
    blacklist nouveau
    options nouveau modeset=0
    
    更新配置文件:
    sudo update-initramfs -u
    最后进行重启;
    电脑重启之后执行:
    lsmod | grep nouveau #没有输出,即说明安装成功
    4.安装驱动:
    进入命令行页面:
    Ctrl-Alt+F1,之后输入用户名和密码登录即可(Ubuntu 16.04适用)
    sudo telinit 3 #停止可视化界面,进入命令行界面,只能进不能出,重启可恢复图形化界面(Ubuntu18.04适用)
    
    在命令行模式下输入用户名,密码进入后:
    进入NVIDIA驱动下载文件夹下,修改解压后的文件权限:
    sudo chmod 777 NVIDIA-Linux-x86_64-418.43.run 
    
    安装NVIDIA驱动(注意参数)
    sudo ./NVIDIA-Linux-x86_64-375.20.run –no-opengl-files
    –no-opengl-files 只安装驱动文件,不安装OpenGL文件。这个参数最重要
    –no-x-check 安装驱动时不检查X服务
    –no-nouveau-check 安装驱动时不检查nouveau
    后面两个参数可不加;
    安装完成后重启即可。
    5.检验驱动安装完成:
    nvidia-smi
    nvidia驱动安装成功

2、安装cudn和cudnn Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)
参考所给教程链接进行安装即可,在此不作赘述,将里面需要注意的几个关键的要点给出:

  • 安装cuda之前必须先确保NVIDIA显卡驱动安装成功,否则安装会中止;
  • 安装的cuda版本务必与所安装的nvidia显卡驱动版本相匹配;
  • 安装完成cuda后注意设置环境变量;
  • cudnn作为gpu的加速器,属于cudn的增强版本吧,对于他的安装只需要从官网下载几个文件,并且将相应的文件复制到cuda相应的安装文件夹下即可。

Linux 安装Matlab

2018-04-19 19:59:21 m0_37962554 阅读数 314
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20720 人正在学习 去看看 马永亮

英文:Vivek Gite,翻译:Linux中国/pygmalion666

linux.cn/article-9510-1.html


有些误解认为 shell 脚本仅用于 CLI 环境。实际上在 KDE 或 Gnome 桌面下,你可以有效的使用各种工具编写 GUI 或者网络(socket)脚本。shell 脚本可以使用一些 GUI 组件(菜单、警告框、进度条等),你可以控制终端输出、光标位置以及各种输出效果等等。利用下面的工具,你可以构建强壮的、可交互的、对用户友好的 UNIX/Linux bash 脚本。


制作 GUI 应用不是一项困难的任务,但需要时间和耐心。幸运的是,UNIX 和 Linux 都带有大量编写漂亮 GUI 脚本的工具。以下工具是基于 FreeBSD 和 Linux 操作系统做的测试,而且也适用于其他类 UNIX 操作系统。


1、notify-send 命令


notify-send 命令允许你借助通知守护进程发送桌面通知给用户。这种避免打扰用户的方式,对于通知桌面用户一个事件或显示一些信息是有用的。在 Debian 或 Ubuntu 上,你需要使用 apt 命令 或 apt-get 命令 安装的包:


sudo apt-get install libnotify-bin


CentOS/RHEL 用户使用下面的 yum 命令:


sudo yum install libnotify


Fedora Linux 用户使用下面的 dnf 命令:


`$ sudo dnf install libnotify`

In this example, send simple desktop notification from the command line, enter:

### 发送一些通知 ###

notify-send "rsnapshot done :)"


示例输出:


640?wx_fmt=png

notify-send: Shell Script Get Or Send Desktop Notifications


下面是另一个附加选项的代码:


...

alert=18000

live=$(lynx --dump http://money.rediff.com/ | grep 'BSE LIVE' | awk '{ print $5}' | sed 's/,//g;s/\.[0-9]*//g')

[ $notify_counter -eq 0 ] && [ $live -ge $alert ] && { notify-send -t 5000 -u low -i   "BSE Sensex touched 18k";  notify_counter=1; }

...


示例输出:


640?wx_fmt=png

Linux / UNIX: Display Notifications From Your Shell Scripts With notify-send


这里:


  • -t 5000:指定超时时间(毫秒) (5000 毫秒 = 5 秒)

  • -u low: 设置紧急等级 (如:低、普通、紧急)

  • -i gtk-dialog-info: 设置要显示的图标名称或者指定的图标(你可以设置路径为:-i /path/to/your-icon.png)


关于更多使用 notify-send 功能的信息,请参考 man 手册。在命令行下输入 man notify-send 即可看见:


man notify-send


2、tput 命令


tput 命令用于设置终端特性。通过 tput 你可以设置:


  • 在屏幕上移动光标。

  • 获取终端信息。

  • 设置颜色(背景和前景)。

  • 设置加粗模式。

  • 设置反转模式等等。


下面有一段示例代码:


#!/bin/bash

# clear the screen

tput clear

# Move cursor to screen location X,Y (top left is 0,0)

tput cup 3 15

# Set a foreground colour using ANSI escape

tput setaf 3

echo "XYX Corp LTD."

tput sgr0

tput cup 5 17

# Set reverse video mode

tput rev

echo "M A I N - M E N U"

tput sgr0

tput cup 7 15

echo "1. User Management"

tput cup 8 15

echo "2. Service Management"

tput cup 9 15

echo "3. Process Management"

tput cup 10 15

echo "4. Backup"

# Set bold mode

tput bold

tput cup 12 15

read -p "Enter your choice [1-4] " choice

tput clear

tput sgr0

tput rc


示例输出:


640?wx_fmt=png

Linux / UNIX Script Colours and Cursor Movement With tput


关于 tput 命令的详细信息,参见手册:


man 5 terminfo

man tput


3、setleds 命令


setleds 命令允许你设置键盘灯。下面是打开数字键灯的示例:


setleds -D +num


关闭数字键灯,输入:


setleds -D -num


  • -caps:关闭大小写锁定灯

  • +caps:打开大小写锁定灯

  • -scroll:关闭滚动锁定灯

  • +scroll:打开滚动锁定灯


查看 setleds 手册可看见更多信息和选项 man setleds。



4、zenity 命令


zenity 命令显示 GTK+ 对话框,并且返回用户输入。它允许你使用各种 Shell 脚本向用户展示或请求信息。下面是一个 whois 指定域名目录服务的 GUI 客户端示例。


#!/bin/bash

# Get domain name

_zenity="/usr/bin/zenity"

_out="/tmp/whois.output.$$"

domain=$(${_zenity} --title  "Enter domain" \

             --entry --text "Enter the domain you would like to see whois info" )

if [ $? -eq 0 ]

then

  # Display a progress dialog while searching whois database

  whois $domain  | tee >(${_zenity} --width=200 --height=100 \

                    --title="whois" --progress \

                        --pulsate --text="Searching domain info..." \

                                    --auto-kill --auto-close \

                                    --percentage=10) >${_out}

  # Display back output

  ${_zenity} --width=800 --height=600  \

         --title "Whois info for $domain" \

         --text-info --filename="${_out}"

else

  ${_zenity} --error \

         --text="No input provided"

fi


示例输出:


640?wx_fmt=png

zenity: Linux / UNIX display Dialogs Boxes From The Shell Scripts


参见手册获取更多 zenity 信息以及其他支持 GTK+ 的组件:


zenity --help

man zenity


5、kdialog 命令


kdialog 命令与 zenity 类似,但它是为 KDE 桌面和 QT 应用设计。你可以使用 kdialog 展示对话框。下面示例将在屏幕上显示信息:


kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."


示例输出:


640?wx_fmt=png

Kdialog: Suppressing the display of a dialog



6、Dialog


Dialog 是一个使用 Shell 脚本的应用,显示用户界面组件的文本。它使用 curses 或者 ncurses 库。下面是一个示例代码:


#!/bin/bash

dialog --title "Delete file" \

--backtitle "Linux Shell Script Tutorial Example" \

--yesno "Are you sure you want to permanently delete \"/tmp/foo.txt\"?" 7 60

# Get exit status

# 0 means user hit [yes] button.

# 1 means user hit [no] button.

# 255 means user hit [Esc] key.

response=$?

case $response in

   0) echo "File deleted.";;

   1) echo "File not deleted.";;

   255) echo "[ESC] key pressed.";;

esac


参见 dialog 手册获取详细信息:man dialog。


关于其他用户界面工具的注意事项


UNIX、Linux 提供了大量其他工具来显示和控制命令行中的应用程序,shell 脚本可以使用一些 KDE、Gnome、X 组件集:


  • gmessage - 基于 GTK xmessage 的克隆

  • xmessage - 在窗口中显示或询问消息(基于 X 的 /bin/echo)

  • whiptail - 显示来自 shell 脚本的对话框

  • python-dialog - 用于制作简单文本或控制台模式用户界面的 Python 模块



7、logger 命令


logger 命令将信息写到系统日志文件,如:/var/log/messages。它为系统日志模块 syslog 提供了一个 shell 命令行接口:


logger "MySQL database backup failed."

tail -f /var/log/messages

logger -t mysqld -p daemon.error "Database Server failed"

tail -f /var/log/syslog


示例输出:


Apr 20 00:11:45 vivek-desktop kernel: [38600.515354] CPU0: Temperature/speed normal

Apr 20 00:12:20 vivek-desktop mysqld: Database Server failed


可以查看 logger 手册获取详细信息:man logger


8、setterm 命令


setterm 命令可设置不同的终端属性。下面的示例代码会强制屏幕在 15 分钟后变黑,监视器则 60 分钟后待机。


setterm -blank 15 -powersave powerdown -powerdown 60


下面的例子将 xterm 窗口中的文本以下划线展示:


setterm -underline on;

echo "Add Your Important Message Here"

setterm -underline off


另一个有用的选项是打开或关闭光标显示:


setterm -cursor off


打开光标:


setterm -cursor on


参见 setterm 命令手册获取详细信息:man setterm


9、smbclient:给 MS-Windows 工作站发送消息


smbclient 命令可以与 SMB/CIFS 服务器通讯。它可以向 MS-Windows 系统上选定或全部用户发送消息。


smbclient -M WinXPPro <<eof

Message 1

Message 2

...

..

EOF



echo "${Message}" | smbclient -M salesguy2


参见 smbclient 手册:man smbclient


10、Bash 套接字编程


在 bash 下,你可以打开一个套接字并通过它发送数据。你不必使用 curl 或者 lynx 命令抓取远程服务器的数据。bash 和两个特殊的设备文件可用于打开网络套接字。以下选自 bash 手册:


  1. /dev/tcp/host/port - 如果 host 是一个有效的主机名或者网络地址,而且端口是一个整数或者服务名,bash 会尝试打开一个相应的 TCP 连接套接字。

  2. /dev/udp/host/port - 如果 host 是一个有效的主机名或者网络地址,而且端口是一个整数或者服务名,bash 会尝试打开一个相应的 UDP 连接套接字。


你可以使用这项技术来确定本地或远程服务器端口是打开或者关闭状态,而无需使用 nmap 或者其它的端口扫描器。


# find out if TCP port 25 open or not

(echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"


下面的代码片段,你可以利用 bash 循环找出已打开的端口:


echo "Scanning TCP ports..."

for p in {1..1023}

do

  (echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open"

done


示例输出:


Scanning TCP ports...

22 open

53 open

80 open

139 open

445 open

631 open


下面的示例中,你的 bash 脚本将像 HTTP 客户端一样工作:


#!/bin/bash

exec 3<> /dev/tcp/${1:-www.cyberciti.biz}/80

printf "GET / HTTP/1.0\r\n" >&3

printf "Accept: text/html, text/plain\r\n" >&3

printf "Accept-Language: en\r\n" >&3

printf "User-Agent: nixCraft_BashScript v.%s\r\n" "${BASH_VERSION}"   >&3

printf "\r\n" >&3

while read LINE <&3

do

   # do something on $LINE

   # or send $LINE to grep or awk for grabbing data

   # or simply display back data with echo command

   echo $LINE

done


参见 bash 手册获取更多信息:man bash


关于 GUI 工具和 cron 任务的注意事项


如果你 使用 crontab 来启动你的脚本,你需要使用 export DISPLAY=[用户机器]:0 命令请求本地显示或输出服务。举个例子,使用 zenity 工具调用 /home/vivek/scripts/monitor.stock.sh:


@hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh


你有喜欢的可以增加 shell 脚本趣味的 UNIX 工具么?请在下面的评论区分享它吧。


关于作者


本文作者是 nixCraft 创始人、一个老练的系统管理员、Linux 操作系统和 UNIX shell 编程培训师。他服务来自全球的客户和不同的行业,包括 IT 、教育、防务和空间探索、还有非营利组织。你可以在 Twitter,Facebook,Google+ 上面关注他。


2012-03-10 19:06:35 qq85609655 阅读数 0
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20720 人正在学习 去看看 马永亮

在Linux中也可以读取Windows分区,包括fat32格式的和ntfs格式的。首先你得知道Linux下对硬盘分区的称呼。比如Windows下的C盘通常是hda1,D盘是hda5,E盘是hda6,等等。

 

 

要让Linux系统启动时自动挂载windows分区,可以把上述的命令写入 /etc/fstab 文件中,下面是一个例子

/dev/disk/by-id/ata-HITACHI_HTS723225L9SA61_FDE_090521FC1D20NJG943JG-part1 /windows/C           ntfs-3g    users,gid=users,fmask=133,dmask=022,locale=en_US.UTF-8 0 0
/dev/disk/by-id/ata-HITACHI_HTS723225L9SA61_FDE_090521FC1D20NJG943JG-part5 /windows/D           ntfs-3g    users,gid=users,fmask=133,dmask=022,locale=en_US.UTF-8 0 0
#/dev/disk/by-id/ata-HITACHI_HTS723225L9SA61_FDE_090521FC1D20NJG943JG-part6 /windows/E           ntfs-3g    users,gid=users,fmask=133,dmask=022,locale=en_US.UTF-8 0 0
/dev/disk/by-id/ata-HITACHI_HTS723225L9SA61_FDE_090521FC1D20NJG943JG-part6 /windows/E           ntfs-3g    users,gid=users,fmask=0,dmask=0,locale=en_US.UTF-8 0 0
/dev/disk/by-id/ata-HITACHI_HTS723225L9SA61_FDE_090521FC1D20NJG943JG-part7 /windows/F           ntfs-3g    users,gid=users,fmask=133,dmask=022,locale=en_US.UTF-8 0 0

 默认挂载是 root 拥有读写权限,当没有执行权限,其它用户只有可读权限。

 

第三行注释,第四行: 默认用户拥有所有权限

 

解释如下:

dmask是目录的mask,fmask是文件的mask
mask是权限掩码,由3个八进制的数字所组成,
当前访问权限去掉权限掩码所表示的权限之后,
即可产生建立文件时预设的权限。
第一位表示自己访问的权限
第二位表示同组访问的权限
第三位表示其他所有人访问的权限

每位表示为二进制,又可以有三位,分别表示读、写和可执行。
例如-r-----r-x表示文件
自己可以读,不能写,不能执行
同组人不能读,不能写,不能执行
其他人可以读,不能写,可以执行
因为挂载的是windows的盘符,是ntfs分区,
linux为了安全起见,分区只读,默认访问模式为555
可以执行可以读但是不能写入,而且中间一位不能改动。

2014-10-21 14:05:48 l_andscape125 阅读数 195
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20720 人正在学习 去看看 马永亮

1.基础

chmod 666 /文件目录/* 设置所有权限


cmd : jar -cvf market.jar . 打包

linux:jar -xvf market.jar 解压

linux-delete : rm -rf 文件夹 rm 文件

 cp -rf /home/wangshiming/Downloads/* /home/wangshiming/tools 复制
 cp -rf resource to 复制

mkdir  file  建立文件夹
先ESC

: q 在未作修改的情况下退出

: q! 放弃所有修改,退出编辑程序

关机:halt

2.tomcat

cd /java/tomcat
#执行
sh权限 chmod u+x *.sh
bin/startup.sh #启动tomcat
bin/shutdown.sh #停止tomcat
tail -f logs/catalina.out #看tomcat的控制台输出;
 
#看是否已经有tomcat在运行了
ps -ef |grep tomcat
#如果有,用kill;
kill -9 pid #pid 为相应的进程号

log显示:到log目录下,tail -f catalina.out ctrl+c 退出。

3.挂载

linux共享文件映射


linux 挂载  winserver2003
mount -t cifs -o username=lxy,password=123456 //192.168.0.220/marketCache /usr/weixin/wechat
umount /usr/weixin/wechat/remote


linux 挂载windows
 mount -t cifs -o username=administrator //88.9.1.230/cleardata /usr/data/remote
 mount -t cifs -o username=administrator //88.9.1.230/cleardata /usr/data/remote
 
 mount -t cifs -o username=administrator //11.9.1.225/hq /usr/data/hq

--------------------------------------------------

linux共享文件映射至linux

  vi   /etc/exports  #在此文件中进行设置
/home/work  *(rw,sync,no_root_squash)
此句是代表所有的主机都可以对A主机上的/home/work进行共享,其权限如下:

rw:读写权限 ,只读权限是ro;

sync:表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;

no_root_squash:表示允许挂接此目录的客户机享有该主机的 root 身份。

编辑保存,执行以下命令:

servicenfs restart    ----开启nfs服务

showmount -e 172.16.50.21 (此命令可以查主机上的全部挂载目录)

//linux1服务器上做的工作

# mount–t nfs 192.168.0.20:/home/work /mnt/nfs
 mount -t nfs 88.9.1.225:/export/install4wx /usr/data/soft
 
4.解压缩

#tar zxvf /bbs.tar.zip -C /zzz/bbs

5.vi操作

vi打开编辑文件
vi <filePathAndName>

示例:vi test.conf,vi /tmp/test.conf,...

如果指定的filePathAndName存在则会自动载入该文件内容,如果不存在则会自动创建。

注:每行前显示波浪符号的表示该行为空行。

二、vi进入输入模式
vi工作于两种模式:指令模式和输入模式。指令模式是打开文件后的默认模式模式,此时输入任何字符均被视为控制指令。输入模式就是普通的编辑模式,此时输入字符默认为输入内容。

三、vi编辑指令
1、屏幕翻页
Ctrl+u: 向上翻半屏
Ctrl+f: 向上翻一屏
Ctrl+d: 向下翻半屏
Ctrl+b: 向下翻一屏
2、移动光标指令
移动光标普遍使用的是方向键,考虑兼容问题,vi定义太多的方向指令,下面只是一小小部分(常用的几个):

space: 光标右移一个字符
Backspace: 光标左移一个字符
Enter: 光标下移一行
nG: 光标移至第n行首
n+: 光标下移n行
n-: 光标上移n行
n$: 光标移至第n行尾
0: 光标移至当前行首
$: 光标移至当前行尾
3、插入删除指令
常用插入、删除指令如下:

i:在当前光标前插入,光标后文本向后移
a:从当前光标后插入,光标后文本后移
I:在光标所在行首插入(第一个非空白字符前)
A:从光标所在行末插入
o: 在光标所在行下面新增一行(并进入输入模式)
O: 在光标所在行上方新增一行(并进入输入模式)
x: 删除光标所在字符,等同于[Delete]功能键
X: 删除光标前字符,相当与[Backspace]
dd: 删除光标所在的行
r: 修改光标所在字符
R: 替换当前字符及其后的字符,直到按 [ESC]
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符
S: 删除指定数目的行,并以所输入文本代替之
do: 删至行首
d$: 删至行尾
四、vi退出
退出输入模式,先按一下[ESC]键(有时要多按两下),然后执行:

:w ——保存当前文件
:wq —— 存盘退出(与指令 :x 功能相同)
:q —— 直接退出,如已修改会提示是否保存
:q! ——不保存直接退出



Linux文件权限

阅读数 68

没有更多推荐了,返回首页