1. exec命令简介
exec
命令是Linux中的一个内置shell命令,主要用于执行可执行文件并替换当前的shell进程。执行exec
命令后,原有的shell进程将被新命令替代,因此执行完该命令后不会返回到原来的shell环境。这种特性使得exec
在某些情况下可以提高系统性能,因为它避免了创建新进程的开销。
2. exec命令的基本语法
exec
命令的基本语法如下:
exec [options] [command] [arguments]
- options: 可选参数,用于修改
exec
的行为。 - command: 要执行的可执行文件或命令。
- arguments: 传递给command的参数。
如果没有指定command,exec
将用于修改当前shell的环境变量、文件描述符等设置。
3. exec命令的实战案例
3.1 替换当前shell进程
执行一个可执行文件并用它替换当前的shell进程:
exec /bin/ls
执行上述命令后,当前shell将被/bin/ls
命令替代,列出当前目录的文件和目录,并且不会返回到原来的shell环境。
3.2 使用expect工具自动交互密码远程其他主机安装httpd软件
#!/bin/bash
# 使用 expect 工具自动交互密码远程其他主机安装 httpd 软件
# 删除~/.ssh/known_hosts 后,ssh 远程任何主机都会询问是否确认要连接该主机
rm ‐rf ~/.ssh/known_hosts
expect <<EOF
spawn ssh 192.168.4.254
expect "yes/no" {send "yes\r"}
# 根据自己的实际情况将密码修改为真实的密码字串
expect "password" {send "密码\r"}
expect "#" {send "yum ‐y install httpd\r"}
expect "#" {send "exit\r"}
EOF
在这个案例中,exec
命令用于在expect
脚本中执行远程主机的命令,实现自动化的密码输入和软件安装。
3.3 一键部署LNMP(源码安装版本)
#!/bin/bash
# 一键部署 LNMP(源码安装版本)
menu()
{
clear
echo " ##############‐‐‐‐Menu‐‐‐‐##############"
echo "# 1. Install Nginx"
echo "# 2. Install MySQL"
echo "# 3. Install PHP"
echo "# 4. Exit Program"
echo " ########################################"
}
choice()
{
read -p "Please choice a menu[1‐9]:" select
}
install_nginx()
{
id nginx &>/dev/null
if [ $? -ne 0 ];then
useradd -s /sbin/nologin nginx
fi
if [ -f nginx‐1.8.0.tar.gz ];then
tar -xf nginx‐1.8.0.tar.gz
cd nginx‐1.8.0
yum -y install gcc pcre‐devel openssl‐devel zlib‐devel make
./configure ‐‐prefix=/usr/local/nginx ‐‐with‐http_ssl_module
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
cd ..
else
echo "没有 Nginx 源码包"
fi
}
install_mysql()
{
yum -y install gcc gcc‐c++ cmake ncurses‐devel perl
id mysql &>/dev/null
if [ $? -ne 0 ];then
useradd -s /sbin/nologin mysql
fi
if [ -f mysql‐5.6.25.tar.gz ];then
tar -xf mysql‐5.6.25.tar.gz
cd mysql‐5.6.25
cmake .
make
make install
/usr/local/mysql/scripts/mysql_install_db ‐‐user=mysql ‐‐datadir=/usr/local/mysql/data/
‐‐basedir=/usr/local/mysql/
chown -R root.mysql /usr/local/mysql
chown -R mysql /usr/local/mysql/data
/bin/cp -f /usr/local/mysql/support‐files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/bin/cp -f /usr/local/mysql/support‐files/my‐default.cnf /etc/my.cnf
echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
ldconfig
echo 'PATH=\$PATH:/usr/local/mysql/bin/' >> /etc/profile
export PATH
else
echo "没有 mysql 源码包"
exit
fi
}
在这个案例中,exec
命令用于在shell脚本中执行不同的安装命令,实现一键部署LNMP环境。
4. 结论
exec
命令是Linux系统中一个非常强大的命令,它可以用来替换当前进程的代码和数据,使之运行一个全新的程序,并且不会创建新的进程。通过上述实战案例,我们可以看到exec
命令在自动化脚本和系统管理中的广泛应用。掌握exec
命令,可以有效地提高我们的工作效率和系统的运行效率。