Ubuntu-Shell图形化工具
脚本中加入更多的图形元素。
KDE和GNOME桌面环境都扩展了dialog命令,包含了可以在各自环境下生成X Window 图形化部件的命令。
kdialog和zenity包,它们各自为KDE和GNOME桌面提供了图形化窗口部件
1.查看内核版本命令:
cat /proc/version
uname -a
2.查看桌面版本
01.pgrep是linux中常用的通过程序名称来查询进程的工具,一般是用来判断程序是否正在运行及查找正在运行进程的PID信息。通过pgrep命令,可以只指定进程的一部分名称从运行进程队列中进行查看进程的PID信息,但只输出PID号,不便于理解。
可以结合‘-l’选项在显示PID的同时也显示这个进程的名称
pgrep -l "gnome|kde|mate|cinnamon|lxde|xfce|jwm"
02. /etc下面有没有gnome文件夹或者kde文件夹,如果都有,就是都安装了或者安装过。
pgrep 和 pkill命令
pgrep 相当于 ps -aux | grep 进程名 | grep -v grep| awk '{print $2}'
pidof 是Linux系统中用来查找正在运行进程的进程号(pid)的工具,功能类似pgrep和ps
kill 默认传递终止进程运行的信号给进程 最常被使用的信号是1/9/15
killall (kill processes by name)用于杀死进程,与 kill 不同的是killall 会杀死指定名字的所有进程
pkill 还有一个更重要的功能,即按照终端号来踢出用户登录 pkill -u mark,danny //结束mark,danny用户的所有进程
###脚本示例
pgrep mysql | xargs kill -s 9
ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9
kill -s 9 `pgrep mysql`
脚本说明:
grep -v grep;这句命令是什么意思。其实是为了从查询结果中去掉包含grep的记录, -v 后面的grep可以改为你想过滤的值
awk
两个单引号加大括号 默认字段分割符是空格或者 Tab键
print 将字段列出来
每一行的字段都有变量名 $1 $2
自定义分隔符 BEGIN {FS=":"}
kill -9 pid 等于 kill -s 9 pid
cut 按字符截取:选项-c
截取file中所有行从第一个字符到第index个字符之间的所有字符(index最小值为1,截取包含头尾字符)
###参考:https://cloud.tencent.com/developer/article/1840343
ps -a | grep mysql | grep -v grep | cut -c 1-2 | xargs kill -9
ps -aux | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9
USER 表示进程的用户,PID 是进程的 ID,%CPU 和 %MEM 分别表示 CPU 和内存的占用百分比,COMMAND 是启动进程的命令行。
STIME :系统启动时间 TTY:登入者的终端机位置 TIME:使用掉的CPU时间
-a: 显示所有用户的进程,而不仅仅是当前用户的
-u: 显示详细的用户/拥有者(user)信息
-x: 显示没有控制终端的进程。
-e:显示所有进程 等同于-A
ps -ef 是System V展示风格 ps aux是BSD风格
1.command列如果过长,aux会截断显示,而-ef不会截断;
2.如果想查看进程的CPU占用率和内存占用率,使用aux;
3.如果想查看进程的父进程ID和完整的command,使用-ef
3.GNOME图形化环境支持两种流行的可生成标准窗口的包:
gdialog
zenity
到目前为止,zenity 是大多数GNOME桌面Linux发行版上最常见的包
zenity 在shell脚本中显示对话框
Zenity是一个Linux下的命令行工具,它可以生成Gtk+图形用户界面(GUI)对话框,支持多种窗口类型和选项
zenity 示例
#!/bin/bash
weather=$(zenity --list \
--title="step 1:Choose the weather " \
--column="Hello" \
sunny \
cloudy \
rainny \
snowy \
Foggy
)
NUMBER=2
RESULT_PATH=~/$school_$(date "+%Y%m%d")_$(weather)/
# 如果目录不存在,则创建它
if [ ! -d "$RESULT_PATH" ]; then
mkdir -p "$RESULT_PATH"
fi
#循环执行
for ((i=0;i< $NUMBER;i++))
do
WEA_PATH=~/school_${weather}_$(date "+%Y%m%d%H%M%S").txt
echo " $i *_* $WEA_PATH "
echo " $i ^_^ $RESULT_PATH ^_^ ........"
done
echo "---success---"
whiptail
whiptail 是一个基于ncurses的工具,它可以帮助我们在终端中创建各种对话框,如消息框、菜单、输入框等,从而改善用户的交互体验
Ncurses 是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库
Linux终端图形编程的不二选择(比如著名的文字编辑器vi就是基于curses编的)ncurses(new curses),
Emacs其实是个Lisp的解释器,因此可以用Lisp灵活地扩展
现在我们大部分的彩色终端应用程序都会用到libncurses库
Ncurses 使用了 termcap terminfo 所有不同类型终端的描述收集到一个数据库
Terminfo打败了Termcap,成为了Linux上的事实的标准 -控制台终端
Termcap(terminal capabilities)
Terminfo(terminal information)
tput命令是一个配置或者查询终端的应用程序
echo $TERM $LINES $COLUMNS; 可以看到当前终端 的终端类型 以及多少行,多少列
使用说明:
–menu:创建一个菜单
–radiolist:创建一个单选按钮列表
三种返回状态:
0:用户选择 OK 按钮
1:用户选择 Cancel 按钮
-1:内部异常或者 ESC 退出(测试 ESC 按键没有反应)
whiptail 的菜单正好可以实现接收用户选择的功能
示例
#!/bin/bash
options=("sunny" " : 晴天" "cloudy" " : 阴天" "rainny" " : 雨天" "snowy" " : 雪天")
weather=$(whiptail --title "Menu Dialog" --menu "Choose weather." 15 30 5 \
"${options[@]}" \
3>&1 1>&2 2>&3
)
exitstatus=$?
if [ $exitstatus = 0 ]; then
WEA_PATH=~/school_${weather}_$(date "+%Y%m%d%H%M%S").txt
echo "$WEA_PATH"
{
for ((i = 0 ; i <= 10 ; i+=2)); do
sleep 1
echo '$i*10'
done
} | whiptail --gauge "Please wait for school info" 6 60 0
else
echo "You chose Cancel."
fi
说明:
Linux 的标准输入输出流只有三种,即 0-stdin 、1-stdout、2-stderr
2、&标准流 是一个指向标准流的指针,如果没有 & ,就是创建的一个普通的文件句柄。
3、>&标准流 指将某个文件重定向到另一个流
4、这里的 3>&1 ,的含义是:先创建一个文件句柄 3,将其重定向到1(out),再将 1 重定向 2 ,最后再将 2 重定向到 3 。这么绕了一圈就是初学编程时交换两个变量的过程,将 error 的内容重定向到 out 了,out 重定向到 error
用户界面-User Interface
图形用户界面(GUI)和命令行界面(CLI)
1.命令行界面(CLI)(Command Line Interface)
Linux中,常见的命令行界面工具有Bash、Zsh等
1.5 TUI(文本用户界面) Text User Interface,文本用户界面
称为 基于文本的用户界面(Text-based User Interface)
TUI 应用程序通常也被认为是 CLI 应用程序,因为它们被限制在终端上
Linux终端上绘制统计图表,可以使用工具如”gnuplot”或”plotutils”
2.图形用户界面(GUI)(Graphical User Interface):
Linux有多种桌面环境供用户选择,其中一些较为流行的包括 GNOME、KDE Plasma、XFCE、LXDE
服务器 和桌面
1.纯终端窗口显示对话框的工具
用户是在服务器上工作的(在没有图形界面时),确保总能显示,那就使用 whiptail 或者任何其它在纯终端窗口显示对话框的工具
whiptail
Textual 是一个为 Python 构建的快速应用程序开发框架,由 Textualize.io 构建。
它可以让你用简单的 Python API 构建复杂的用户界面,并运行在终端或网络浏览器上
2.桌面机器用户通常使用GUI窗口环境,也可能运行脚本并与显示的窗口进行交互。
zenity
3.桌面应用与基于浏览器的应用
应用案例:
1:通过命令行方式解析 JSON 内容的工具:jq
使用 jq 从 JSON 文件中提取配置详细信息,并且使用 zenity 来组织流程
Linux终端复用软件
1.传统的终端环境:xterm
MobaXterm
普通终端+nohup
scp 并不支持断点续传。可以改用 rsync
2.终端复用软件:
screen 是一个用于命令行终端切换的自由软件,
tmux 多个窗口切,一屏显示多窗口,会话保持
3.服务器和桌面
桌面环境 Ubuntu默认软件中,终端是gnome-terminal
xterm-256color
命令: gnome-terminal 编一个shell脚本,直接配置终端窗口
gnome-terminal --window --working-directory
--tab
快捷键
All-in-One 的哲学
一个程序只做一件事并做好它”的 Unix哲学
通过管道机制和系统内各种积木工具打交道, 它讲究的是和系统内的工具程序协作来完成用户的任务
参考
https://help.gnome.org/users/zenity/stable/index.html.zh_CN
Zenity - 在Shell下迈向图形化的GUI工具 https://blog.csdn.net/DarlingTeng/article/details/106266964
Shell 脚本中 3>&1 1>&2 2>&3 的含义 https://blog.csdn.net/wojiushiwo945you/article/details/100727522
https://linuxgeeks.github.io/2015/10/01/172135-%E4%BD%BF%E7%94%A8whiptail%E5%88%9B%E5%BB%BA%E4%BA%A4%E4%BA%92%E5%BC%8Fshell%E5%AF%B9%E8%AF%9D%E6%A1%86/