一、准备工作:
在安装和配置kvm虚拟机之前,首先确保kvm软件已经被正确安装,如果没有安装,请参考如下几步操作:
第一步:检查CPU是否支持vmx相关指令,如果执行结果中有vmx相关的关键字,则为支持;
cat /proc/cpuinfo |grep vmx
第二步:安装kvm配套软件
yum install qemu-kvm libvirt virt-install bridge-utils -y
第三步:检查kvm服务已经正常启动,如果执行结果有kvm_xxx(CPU系列)、kvm则说明kvm服务已经启动
lsmod | grep kvm
如果未启动,可通过如下命令启动:
systemctl start libvirtd
如果希望设置为开机自动启动,需通过如下命令添加到开机启动的服务列表中:
systemctl enable libvirtd
查看kvm服务状态,可通过如下命令:
systemctl status libvirtd
及如下命令查看是否开机启动
systemctl is-enabled libvirtd
二、为虚拟机配置桥接网卡
桥接网卡的配置参数的含义请参考链接https://www.centos.org/docs/4/html/rhel-rg-en-4/s1-networkscripts-interfaces.html
本次配置的kvm虚拟机希望采用DHCP方式获取IP地址,为此先通过vi命令在/etc/sysconfig/network-scripts下创建桥接网卡的配置文件ifcfg-br0:
vi /etc/sysconfig/network-scripts/ifcfg-br0
然后在ifcfg-br0文件中录入如下内容并保存后退出
TYPE=Bridge PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes NAME=br0 DEVICE=br0 ONBOOT=yes IPV6INIT=no
之后,对br0绑定的物理网卡需要修改配置,本次绑定的是eno1网卡(注:不同环境下绑定哪个网卡根据机器的需求,CentOS7之前的网卡名通常为eth0、eth1这样的命名,单网卡的情况下是eth0),则修改eno1的配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-eno1
在其中追加一句BRIDGE=br0:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes NAME=eno1 UUID=abeaaa94-9abc-43b8-9a15-5267f5cb2f87 DEVICE=eno1 ONBOOT=yes IPV6INIT=no BRIDGE=br0
以上配置完成后,为了保证配置生效,应当通过以下命令重启网络服务:
systemctl restart network
通过以下命令查看桥接状态
brctl show
三、开始安装虚拟机
假定所有的操作都在/var目录下,CentOS安装源为文件为/var/iso/CentOS-7-x86_64-DVD-1708.iso,虚拟机文件创建为/var/vms/centos_vm0/vm0.qcow2,网桥使用br0,相应的操作命令如下:
virt-install --virt-type=kvm --name=centos_vm0 --vcpus=2 --memory=1024 --location=/var/iso/CentOS-7-x86_64-DVD-1708.iso --disk path=/var/vms/centos_vm0/vm0.qcow2,size=64,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force
注:上述命令是在一条命令行中执行的;执行了安装后,如果遇到配置错误之类的意外退出,希望重新安装,可通过如下步骤:
第一步:查看当前运行的虚拟机:
virsh list --all
第二步:关闭当前运行的虚拟机,假定虚拟机名为centos_vm0,则操作命令为:
virsh shutdown centos_vm0
注:类似的命令格式,启动虚拟机的命令如:
virsh start centos_vm0
强制关闭虚拟机:
virsh destroy centos_vm0
设置开机启动虚拟机
virsh autostart centos_vm0
第三步:删除虚拟机:
virsh undefine centos_vm0
第四步:清除虚拟机文件
rm /var/vms/centos_vm0/vm0.qcow2
执行了virt-install安装上述命令后,系统开始安装,并之后进入如下界面时设置语言、时区、网络、管理员密码等:
================================================================================ Installation 1) [x] Language settings 2) [!] Time settings (English (United States)) (Timezone is not set.) 3) [!] Installation source 4) [!] Software selection (Processing...) (Processing...) 5) [!] Installation Destination 6) [x] Kdump (No disks selected) (Kdump is enabled) 7) [ ] Network configuration 8) [!] Root password (Not connected) (Password is not set.) 9) [!] User creation (No user will be created) Please make your choice from above ['q' to quit | 'b' to begin installation | 'r' to refresh]: [anaconda] 1:main* 2:shell 3:log 4:storage-lo> Switch tab: Alt+Tab | Help: F1
1、进入菜单2)Time settings后设置时区的步骤:
Time settings Timezone: not set NTP servers:not configured 1) Set timezone 2) Configure NTP servers Please make your choice from above ['q' to quit | 'c' to continue |
输入1后回车,进入如下菜单:
Available regions 1) Europe 6) Pacific 10) Arctic 2) Asia 7) Australia 11) US 3) America 8) Atlantic 12) Etc 4) Africa 9) Indian 5) Antarctica
输入2后回车(选择了Asia),进入如下菜单:
6) Aqtobe 34) Jerusalem 61) Sakhalin 7) Ashgabat 35) Kabul 62) Samarkand 8) Atyrau 36) Kamchatka 63) Seoul 9) Baghdad 37) Karachi 64) Shanghai 10) Bahrain 38) Kathmandu 65) Singapore 11) Baku 39) Khandyga 66) Srednekolymsk
输入64(选择了Shanghai),完成时区设置
2、进入菜单3) Installation source选择安装源
Choose an installation source type. 1) CD/DVD 2) local ISO file 3) Network
输入2后回车(选择了local ISO file),完成安装源的选择
3、进入菜单4) Software selection选择需要安装的软件集
1) [ ] Minimal Install 7) [ ] Server with GUI 2) [x] Compute Node 8) [ ] GNOME Desktop 3) [ ] Infrastructure Server 9) [ ] KDE Plasma Workspaces 4) [ ] File and Print Server 10) [ ] Development and Creative 5) [ ] Basic Web Server Workstation 6) [ ] Virtualization Host
例如选择2后回车(选择了Compute Node),完成软件集的选择
4、进入菜单5) Installation destination选择目标磁盘
Installation Destination [x] 1) : 64 GiB (vda)
输入c后回车,进入磁盘分区选择:
Autopartitioning Options [ ] 1) Replace Existing Linux system(s) [x] 2) Use All Space [ ] 3) Use Free Space
输入c后回车(选择了默认的User All Space),之后进入分区schema选择:
Partition Scheme Options [ ] 1) Standard Partition [ ] 2) Btrfs [x] 3) LVM [ ] 4) LVM Thin Provisioning
输入c后回车(选择了默认的LVM),完成磁盘的选择
5、进入菜单7) Network Configuration配置网络连接
Host name: localhost.localdomain Current host name: localhost 1) Set host name 2) Configure device eth0
输入1回车(选择了Set host name),然后输入根据提示新的host name,例如centos.vm0
Enter new value for 'Host name' and press enter centos.vm0
输入2回车(选择了Configure device eth0)
Device configuration 1) IPv4 address or "dhcp" for DHCP dhcp 2) IPv4 netmask 3) IPv4 gateway 4) IPv6 address[/prefix] or "auto" for automatic, "dhcp" for DHCP, "ignore" to turn off auto 5) IPv6 default gateway 6) Nameservers (comma separated) 7) [ ] Connect automatically after reboot 8) [ ] Apply configuration in installer
输入1回车(选择了IPv4 address or "dhcp" for DHCP),然后根据提示输入IPv4地址或dhcp,本次用的是dhcp:
Enter new value for 'IPv4 address or "dhcp" for DHCP' and press enter
dhcp
输入7回车(选择了Connect automatically after reboot)
输入8回车(选择了Apply configuration in installer)
输入c回车完成网络配置,继续输入c回车直到回到主菜单
6、进入菜单8) Root password设置管理员密码
按照提示两次输入同样的密码即可,如果密码过于简单,系统会提示是否确认,输入yes回车即可
================================================================================ Please select new root password. You will have to type it twice. Password:Password (confirm): ================================================================================ ================================================================================ Question The password you have provided is weak: The password fails the dictionary check- it is too simplistic/systematic.Would you like to use it anyway? Please respond 'yes' or 'no': yes
7、进入菜单9) User creation创建一个用户,该步骤为可选,如需要,按照提示菜单输入用户名、密码即可,不再赘述:
以上步骤完成后,输入b并回车,开始安装(如遇到不能开始,返回菜单进入未设置的菜单输入c回车,再返回机箱输入b回车进行尝试);
Please make your choice from above ['q' to quit | 'b' to begin installation | 'r' to refresh]: b ================================================================================ ================================================================================ ProgressSetting up the installation environment.Creating disklabel on /dev/vda.Creating xfs on /dev/vda1.Creating lvmpv on /dev/vda2 . . .
四、验证虚拟机的安装
虚拟机安装完后虚拟机将被自动启动,启动后进入虚拟机CentOS7,通过命令ifconfig检查网络是否OK:
[root@centos ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.8 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::d72c:1539:12b3:c85c prefixlen 64 scopeid 0x20<link> ether 52:54:00:e7:96:71 txqueuelen 1000 (Ethernet) RX packets 57 bytes 6069 (5.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 48 bytes 4500 (4.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看到,虚拟机已经通过dhcp获得了IP地址(示例中为192.168.0.8);
查看虚拟机的主机名,输入命令hostname即可:
hostname centos_vm2
如需要修改主机名,需在root下执行命令:
hostnamectl set-hostname centos_vm2
注:上例中centos_vm2是更改后的主机名
此时再切换到物理机(宿主机),通过命令netconfig可以看到br0工作OK:
hnl@bogon ~> ifconfigbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.7 netmask 255.255.255.0 broadcast 192.168.0.255 ether d0:50:99:c9:5e:ab txqueuelen 1000 (Ethernet) RX packets 22194 bytes 1116345 (1.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 36730 bytes 6433244 (6.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether d0:50:99:c9:5e:ab txqueuelen 1000 (Ethernet) RX packets 3133559 bytes 4700490944 (4.3 GiB) RX errors 0 dropped 9 overruns 0 frame 0 TX packets 1384528 bytes 85544872 (81.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device memory 0xdf200000-df27ffff eno2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether d0:50:99:c9:5e:ac txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device memory 0xdf100000-df17ffff lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1 (Local Loopback) RX packets 392 bytes 34080 (33.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 392 bytes 34080 (33.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:53:29:61 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether fe:54:00:e7:96:71 txqueuelen 1000 (Ethernet) RX packets 69 bytes 6198 (6.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 83 bytes 8795 (8.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看到物理机的网桥br0的IP地址(示例中是192.168.0.7);
五、管理虚拟机
除了上述(三)中描述的管理命令外,如下命令也常用到:
配置虚拟机为开机启动,以开机启动虚拟机centos_vm0为例:
virsh autostart centos_vm0
登陆虚拟机centos_vm0的控制台:
virsh console centos_vm0
之后输入用户名、密码完成登陆
六、网络TCP/IP优化
进行网络优化之前,需要先查看网络的工作配置,可通过ifconfig命令查看网口列表,如果是最小化安装,可能ifconfig命令还执行不了,此时需要执行如下命令安装网络工具:
yum install net-tools
虚拟机中通常不需要IPv6的,为此进行如下第1~5步骤禁用IPv6,单纯执行第1步也可以,执行第6步可查看连接统计信息;
1、GRUB启动项中停止IPv6,需要修改/etc/default/grub文件,root用户下通过vi打开该文件:
vi /etc/default/grub
对其中的GRUN_CMDLINE_LINUX配置行,添加参数ipv6.disable=1,添加之前:
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap console=ttyS0"
添加之后:
GRUB_CMDLINE_LINUX="crashkernel=auto ipv6.disable=1 rd.lvm.lv=centos/root rd.lvm.lv=centos/swap console=ttyS0"
修改完毕后保存,运行grub2-mkconfig -o /boot/grub2/grub.cfg重新生成grub.cfg文件:
[root@centos root]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-7af5895574004bfba83dbf7be1525544 Found initrd image: /boot/initramfs-0-rescue-7af5895574004bfba83dbf7be1525544.img done
2、修改配置文件/etc/sysctl.conf,root用户下通过vi打开该文件:
vi /etc/sysctl.conf
在其中添加net.ipv6.conf.all.disable_ipv6=1,添加之后的文件内容示例:
# sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. ## Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. ## For more information, see sysctl.conf(5) and sysctl.d(5). net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 10000 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 50001
注:上述配置中的其他参数含义说明如下:
1) net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时 启用 Cookie 旋来处理,可防范少量的SYN ×××。该参数默认为0,表示关闭。
2) net.ipv4.tcp_tw_reuse = 1表示开启重用,即允许将TIME-WAIT 套接字重新用于的TCP连接。该参数默认为 0,表示关闭。
3) net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT 套接字的快速回收,该参数默认为0,表示关闭。
4) net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,那么这个参数将决定保持在FlN-WAIT-2 状态的时间。
5) net.ipv4.tcp_keepalive_time = 1200 表示当 Keepalived 启用时,TCP发送Keepalived 消息的频度改为20分钟,默认值是2小时。
6) net.ipv4.ip_local_port_range = 10000 65000 表示CentOS 系统向外连接的端口范围。其默认值很小,这里改为10000到65000。建议不要将这里的最低值设得太低,否则可能会占用正常的端口。
7) net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认值为1024,此处加大队列长度为8192,可以容纳更多等待连接的网络连接数。
8) net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT 套接字的最大数量,如果超过这个数字,TlME_WAIT 套接字将立刻被清除并打印警告信息,默认值为180000,此处改为5000。对于Apache、Nginx等服务器,前面介绍的几个参数已经可以很好地减少TIME_WAIT套接字的数量,但是对于Squid来说,效果却不大,有了此参数就可以控制TME_WAIT 套接字的最大数量,避免Squid 记服务器被大量的TIME_WAIT 套接字拖死。
执行以下命令使内核配置立马生效:
sysctl -p
3、添加禁用IPv6配置到/etc/sysconfig/network,通过vi打开该文件:
vi /etc/sysconfig/network
在其中添加NETWORKING_IPV6=no,添加之后的文件内容示例:
# Created by anaconda NETWORKING_IPV6=no
4、添加禁用IPv6配置到网络接口配置文件,对普通安装的CentOS7,通常是网络接口eno0、eno1之类的对应的文件如/etc/sysconfig/network-scripts/ifcfg-eno0、/etc/sysconfig/network-scripts/ifcfg-eno1,对最小化安装的CentOS7,通常是网络接口eth0对应的文件如/etc/sysconfig/network-scripts/ifcfg-eth0,以eth0为例,通过vi打开相应的配置文件:
/etc/sysconfig/network-scripts/ifcfg-eth0
在其中删除IPv6相关的配置项,只保留IPV6INIT=no,相应的文件内容示例:
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" NAME="eth0" UUID="d71ca50f-e98c-449d-bd7e-11b961655a03" DEVICE="eth0" ONBOOT="yes" IPV6INIT="no"
注:如果配置为静态IP,则相应的文件内容示例:
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" NAME="eth0" UUID="d71ca50f-e98c-449d-bd7e-11b961655a03" DEVICE="eth0" ONBOOT="yes" IPV6INIT="no"
并需在/etc/resolv.conf中添加DNS服务器,示例如下:
# Generated by NetworkManager search router nameserver 192.168.0.1
再执行systemctl restart network命令,通过ping外部网站(例如: www.sina.com.cn )检查可达情况;如果/etc/resolv.conf的数据因为上次是动态地址重启后被冲掉,在使用静态地址reboot后,重新编辑录入上述内容即可持久生效;
5、对某些服务需停止使用IPv6,例如VSFTP,需修改/etc/vsftpd/vsftpd.conf中的listen和listen_ipv6两个选项:
listen=YES listen_ipv6=NO
对应nginx,需注释掉nginx.conf配置文件中IPv6相关的行,例如下面的例子中注释掉了“listen [::]:80 default_server;”这一行
server { listen 80 default_server; #listen [::]:80 default_server; server_name _; root /usr/share/nginx/html;
6、查看TCP统计相关信息
输入如下命令查看当前连接统计数:
netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}'
例如命令显示结果如下所示:
ESTABISHED 2
命令中的含义分别如下。
1) CLOSED:无恬动的或正在进行的连接。
2) ISTEN:服务器正在等待进入呼叫。
3) SYN_RECV:一个连接请求已经到达,等待确认。
4) SYN_SENT:应用已经开始,打开一个连接。
5) ESTABLISHED;正常数据传输状态。
6) FIN_WAT1:应用说它已经完成。
7) FIN_WAT2:另一边己同意释放。
8) ITMED_WAIT:等待所有分组死掉。
9) CLOSING;两边尝试同时关闭。
10)TIME_WAIT:另一边已初始化一个释放。
11)LAST_ACK:等待所有分组死掉。
七、文件I/O优化
1、对小文件(例如Web服务器中的静态资源如图片等)不记录访问时间,修改/etc/fstab文件:
vi /etc/fstab
修改前:
# # /etc/fstab # Created by anaconda on Tue Jun 26 14:03:37 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=5c27d60c-ad7a-46f6-bb46-50bbc3527579 /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
修改后(部分分区参数由defaults变为noatime):
# # /etc/fstab # Created by anaconda on Tue Jun 26 14:03:37 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs noatime 0 0 UUID=5c27d60c-ad7a-46f6-bb46-50bbc3527579 /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs noatime 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
2、修改最大打开文件数
通过如下命令打开/etc/systemd/system.conf配置文件:
vi /etc/systemd/system.conf
修改其中的DefaultLimitNOFILE、DefaultLimitNPROC,例如:
DefaultLimitNOFILE=65535 DefaultLimitNPROC=65535
修改之后,重启之前通过ulimit命令查看:
[root@centos root]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 3883 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 3883 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
重启之后通过unlimit命令查看(open files参数已经变为65536)
[root@centos root]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 3883 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65536 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 65536 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
八、常用维护工具
1、Fish shell
Fish shell是一款开源的命令行工具,提供了语法高亮、常用命令及历史命令快速查找等功能,非常适合命令行方式维护Linux系统;通过yum从软件库中安装的命令:
yum install fish
也可以从相关网站直接下载并安装(http://fishshell.com/);
1) Fish常用快捷键:
右箭头-> 直接使用自动提示文本完成命令行并将光标移动到结束;
左箭头<- 光标左移
Tab键 唯一匹配时直接完成文本输入,有多条匹配给出列表,然后支持通过上下左右箭头键选择其中的一条
2) 启动或退出fish shell环境
安装完成后输入fish即可启动fish shell环境,在fish shell环境下输入exit或者执行切换用户的su命令即可退出fish shell;
3) 修改系统默认的shell
不建议将系统的默认shell修改为fish shell,因为fish shell扩展了一些shell语法,用这些语法写的shell脚本在普通shell下可能跑不起来;
不过作为修改用户登录后的shell这项操作,下面简单介绍方法:
方法一:修改用户登录的shell配置
每个用户登录时的shell在/etc/passwd中有记录,root用户登录后,通过cat /etc/passwd 或者 more /etc/passwd在打印的信息中可看到各个用户的默认shell,例如:
[root@centos_vm3 bin]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin zhangsan:x:1000:1000:zhangsan:/home/zhangsan:/bin/bash nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin
每行的格式,为以冒号分隔的字段信息,说明如下:
注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序
其中:
注册名-----用于区分不同的用户。在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的;
口令----字段使用一个“x”来代替,真实口令另外存储;
用户标识号----一个数值,唯一标识一个用户;
组标识号----一个数值,当前用户的缺省组的组标识号;
用户名----包含用户信息的一串文本,例如真实姓名、联系方式;
用户主目录----用户个人主目录,登录后该用户使用的shell以此为工作目录;
命令解释程序----即用户所用的shell的路径,以root登录后编辑该文件修改此信息即可修改用户的默认shell;
方法二:直接输入命令chsh修改当前用户的shell,过程示例如下:
[zhangsan@centos_vm3 bin]$ chsh -s /usr/bin/fish Changing shell for zhangsan. Password: *******
*