首页 文章 精选 留言 我的

精选列表

搜索[centos],共5623篇文章
优秀的个人博客,低调大师

CentOS6系列系统启动常见故障排查与解决方法

情景一、内核文件损坏 /boot/vmlinuz-2.6.32-642.el6.x86_64 内核文件 1、故障现象 2、解决方法:挂载光盘,进入rescue(救援)模式 3、选择——English——us——No——Continue——OK——OK。 4、进入shell,重新安装内核 # mkdir cdrom # mount -r /dev/sr0 /cdrom # rpm -ivh --force --root=/mnt/sysimage/ /cdrom/Packages/kernel-2.6.32-642.el6.x86_64.rpm 5、确认新的内核文件已经生成 6、重新启动完成修复 如果initramfs文件损坏也可以使用这个方法修复。 情景二、grub损坏 故障现象: grub第1阶段损坏:无法从系统硬盘启动,直接进入下一可引导的启动设备 grub第1.5阶段损坏:从此硬盘启动黑屏,在第一行有一个光标,但是无法进入系统,也不会去读取下一个可引导设备 grub第2阶段损坏:grub第2阶段是提供了grub菜单界面,如果损坏了和1.5相似,也是无法看到grub启动界面 救援方法: 1、解决方法:进入rescue,在光盘引导界面按Esc件,输入 rescue linux 2、使用chroot命令切换根文件系统,然后用grub-install进行修复 # chroot /mnt/sysimage # grub-install /dev/sda 3、重启恢复系统完成 情景三、grub的配置文件损坏 /boot/grub/grub.conf 1、故障现象:grub无法读取配置文件,在开机的时候会默认进入grub的命令行界面 2、在命令行界面我们只需要手动指定内核和ramdisk文件的路径,如果不知道内核所在分区则可以尝试用find命令来查找 3、输入boot启动,成功进入系统后去编辑/boot/grub/grub.conf文件,修复完成 情景四、init程序被误删除 1、故障现象:内核可以初始化但是无法进入登录界面,出现一个sh的命令行 2、进入救援模式,安装upstart包,并查看init程序是否重新生成 # rpm -ivh --force --root=/mnt/sysimage/ /cdrom/Packages/upstart-0.6.5-el6.x86_64.rpm 3、重启进入系统,成功 情景五、bash程序被误删除 1、故障现象: 2、进入救援模式,安装upstart包,并查看init程序是否重新生成 # rpm -ivh --force --root=/mnt/sysimage/ /cdrom/Packages/bash-4.1.2-40.el6.x86_64.rpm 3、重启进入系统,成功 情景六、/etc/fatab文件被误删除 1、故障现象:因为无法挂载分区,启动故障 2、解决方法:由于fstab文件丢失无法找到根文件系统,所以我们得自己找到根文件系统所在分区挂载到/mnt/sysimage,然后把手动把fstab文件写到/etc下 3、重启进入系统,然后再把其他的分区找到,然后写入fatab文件,修复成功。 注意:如果根和boot分区是用的lvm管理的,那么在救援模式下不可以直接使用,得需要使用以下命令激活vg,然后操作就和以上步骤一样了。 vgchange -ay vgname 激活卷组

优秀的个人博客,低调大师

解决Centos 7下安装tomcat7控制台中文输出乱码方法

先讲述一下我的尴尬:首先我新建了一个workspace用Eclipse导入了一个项目,默认编码GBK,log4j也是GBK,一切看起来很正常。随后我部署到服务器上,日志出现了乱码。 将Linux系统上的tomcat的编码修改 在 tomcat/conf /server.xml 如果不起作用就修改为:URIEncoding=“UTF-8” 如果上述仍然不起作用: 修改:catalina.sh 在第一个CLASSPATH= 后面添加 JAVA_OPTS="-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8" 修改:daemon.sh 我在第二行添加 JAVA_OPTS="$JAVA_OPTS -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.language=zh_CN -Dsun.jnu.encoding=UTF-8" 我这里用工具修改 本来这样就可以,但是由于我前期的项目以及log4j错误的编码格式,修改后,日志仍然是中文乱码 2. 随后笨拙的我-在本地修改了项目的编码格式-Window-Preferences-General-Workspace-Text file encoding -Other-UTF-8 在本地运行项目后出现日志中文乱码-于是我修改了log4j的日志编码:log4j.appender.CONSOLE.Encoding=utf-8 3.随后部署到服务器,日志编码正常了。 4.值得注意 tomcat8之前默认是ISO8859-1编码格式,需要解决get请求中文乱码问题。 tomcat8以后都是默认UTF-8的,如果安装了tomcat8,就可以忽略第一步了。

优秀的个人博客,低调大师

CentOS下对磁盘的查看、分区、格式化、挂载及IO性能测试

linux磁盘分区分为“主分区”、“扩展分区”和“逻辑分区”三种类型,一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。扩展分区是不能直接用的,他是以逻辑分区的方式来使用的,扩展分区可分成若干逻辑分区。他们的关系是包含的关系,所有的逻辑分区都是扩展分区的一部分。 在linux中所有的分区(主分区和逻辑分区)都是挂载在某个路径下的,例如:/; /home; /home/zhangsan; 这里/home对应的磁盘空间并不一定包含/home/zhangsan对应的磁盘空间,他们可能作为挂载点被不同的磁盘分区挂载,例如/home可能挂载到/dev/sda1分区,而/home/zhangsan可能挂载到/dev/sdb6分区。linux 中无论有几个分区,分给哪一目录使用,它归根结底就只有一个目录结构,一个独立且唯一的目录结构系统。接下来整理一下linux中对磁盘的查看、分区、格式化、挂载及相关IO性能测试相关的命令和工具。 磁盘与目录的查看 df命令查看文件系统磁盘占用情况 df命令可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息,它也可以显示所有文件系统对i节点和磁盘块的使用情况。可以使用df --help查看各个选项的含义, df命令各个选项的含义如下: [plain]view plain copy -a:显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。 -k:以k字节为单位显示。 -i:显示i节点信息,而不是磁盘块。 -t:显示各指定类型的文件系统的磁盘空间使用情况。 -x:列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。 -T:显示文件系统类型。 df示例:查看磁盘块的基本信息 [plain]view plain copy $df-h 结果如下: [plain]view plain copy 文件系统容量已用可用已用%挂载点 udev5.8G05.8G0%/dev tmpfs1.2G9.5M1.2G1%/run /dev/sdb1106G71G30G71%/ tmpfs5.8G85M5.7G2%/dev/shm tmpfs5.0M4.0K5.0M1%/run/lock tmpfs5.8G05.8G0%/sys/fs/cgroup tmpfs1.2G80K1.2G1%/run/user/1000 /dev/sda1141G2.1G132G2%/home/wangd/disk1 /dev/sda2318G67M302G1%/home/wangd/disk2 df示例:查看磁盘分区的文件系统类型 [plain]view plain copy df-hT 执行结果如下: [plain]view plain copy 文件系统类型容量已用可用已用%挂载点 udevdevtmpfs5.8G05.8G0%/dev tmpfstmpfs1.2G9.5M1.2G1%/run /dev/sdb1ext4106G71G30G71%/ tmpfstmpfs5.8G85M5.7G2%/dev/shm tmpfstmpfs5.0M4.0K5.0M1%/run/lock tmpfstmpfs5.8G05.8G0%/sys/fs/cgroup tmpfstmpfs1.2G80K1.2G1%/run/user/1000 /dev/sda1ext4141G2.1G132G2%/home/wangd/disk1 /dev/sda2ext4318G67M302G1%/home/wangd/disk2 du命令检查磁盘空间占用情况 du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况,统计目录(或文件)所占磁盘空间的大小。该命令的功能是逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024字节)的情况。若没有给出指定目录,则对当前目录进行统计。 du命令的各个选项含义如下: [plain]view plain copy -s:对每个Names参数只给出占用的数据块总数。 -a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。 -b:以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位)。 -k:以1024字节为单位列出磁盘空间使用情况。 -c:最后再加上一个总计(系统默认设置)。 -l:计算所有的文件大小,对硬链接文件,则计算多次。 -x:跳过在不同文件系统上的目录不予统计。 du示例:统计当前目录下的所有文件和文件夹的信息(不包含子目录) [plain]view plain copy $du-ah--max-depth=1 执行结果: [plain]view plain copy 8.8G./data 14G./python 1.1G./software 24G. fdisk -l查看磁盘信息 可使用fdisk -l观察磁盘之实体使用情形: [plain]view plain copy $fdisk-l 结果如下: [plain]view plain copy Disk/dev/sdb:119.2GiB,128035676160bytes,250069680sectors Units:sectorsof1*512=512bytes Sectorsize(logical/physical):512bytes/512bytes I/Osize(minimum/optimal):512bytes/512bytes Disklabeltype:dos Diskidentifier:0x38194aac 设备启动Start末尾扇区SizeId类型 /dev/sdb12048225525759225523712107.6G83Linux /dev/sdb22255278062500689912454118611.7G5扩展 /dev/sdb52255278082500689912454118411.7G82Linux交换/Solaris 其中上面一部分的意思是:硬盘总大小119.2G,250069680个扇区,扇区大小为512K,分区列表以一个扇区为基本单位,磁盘标识符是0x38194aac. 下面部分列出了该磁盘上各分区的具体信息。包括盘符名称、扇区起止及大小,磁盘分区类型等等。 lsscsi工具查看磁盘类型 对于使用scsi接口和使用ide的磁盘,可通过其盘符名称来区分:scsi类型的硬盘命名为sda-sdd等,而IDE类型的硬盘命名为hda-hdd等。但是SSD固态硬盘貌似使用的也是scsi接口,所以根据盘符的名称是判断不出来的。要想查看安装的硬盘哪些是固态硬盘,可使用lsscsi工具: [plain]view plain copy $apt-getinstalllsscsi $lsscsi 执行结果如下: [plain]view plain copy [0:0:0:0]diskATAST500LM021-1KJ15LIM1/dev/sda [1:0:0:0]diskATAPLEXTORPX-128M61.01/dev/sdb 结果的第四列就列出了磁盘的具体型号,查询可知/dev/sdb使用的是浦科特M6,128G的固态硬盘,而/dev/sda使用的是希捷7200转500G的硬盘。 磁盘分区、格式化及挂载 当我们新插入一块磁盘时候,我们需要为其创建分区,格式化各个分区,并将各个分区挂载到linux的目录结构上才可以使用。具体步骤如下: 查看待分区格式化磁盘 [plain]view plain copy fdisk-l 结果如下: [plain]view plain copy Disk/dev/sda:465.8GiB,500107862016bytes,976773168sectors Units:sectorsof1*512=512bytes Sectorsize(logical/physical):512bytes/4096bytes I/Osize(minimum/optimal):4096bytes/4096bytes Disklabeltype:dos Diskidentifier:0x96304fd8 Disk/dev/sdb:119.2GiB,128035676160bytes,250069680sectors Units:sectorsof1*512=512bytes Sectorsize(logical/physical):512bytes/512bytes I/Osize(minimum/optimal):512bytes/512bytes Disklabeltype:dos Diskidentifier:0x38194aac 设备启动Start末尾扇区SizeId类型 /dev/sdb12048225525759225523712107.6G83Linux /dev/sdb22255278062500689912454118611.7G5扩展 /dev/sdb52255278082500689912454118411.7G82Linux交换/Solaris 可以看到新插入的/dev/sda并没有分区,因此在linux系统中无法使用。所以我们需要为该磁盘进行分区、格式化及挂载。 对磁盘进行分区 执行 [plain]view plain copy $fdisk/dev/sda 结果如下: [plain]view plain copy Changeswillremaininmemoryonly,untilyoudecidetowritethem. Becarefulbeforeusingthewritecommand. 命令(输入m获取帮助): 此时输入n回车来创建一个新的分区: [plain]view plain copy 命令(输入m获取帮助):n Partitiontype pprimary(0primary,0extended,4free) eextended(containerforlogicalpartitions) Select(defaultp): 其中p代表主分区、e代表扩展分区,我们输入p创建一个主分区: [plain]view plain copy Select(defaultp):p 分区号(1-4,default1): 需要输入1-4的分区号,形成的分区盘符的名字为/dev/sda1-/dev/sda4,选择默认的1: [plain]view plain copy 分区号(1-4,default1):1 Firstsector(2048-976773167,default2048): 确定该分区的起始扇区,直接回车选择默认就好: [plain]view plain copy Firstsector(2048-976773167,default2048): Lastsector,+sectorsor+size{K,M,G,T,P}(2048-976773167,default976773167): 确定该分区的终止扇区,默认为该磁盘的终止扇区,如果只想为该磁盘分配一个分区,则直接回车选择默认就可。若想分配多个分区,则输入大概的终止扇区,这里我们填写3000000000: [plain]view plain copy Lastsector,+sectorsor+size{K,M,G,T,P}(2048-976773167,default976773167):300000000 Createdanewpartition1oftype'Linux'andofsize143.1GiB. 命令(输入m获取帮助): 此时输入w回车,就可以保存我们创建的分区信息。然后使用fdisk -l查看 [plain]view plain copy $fdisk-l Disk/dev/sda:465.8GiB,500107862016bytes,976773168sectors Units:sectorsof1*512=512bytes Sectorsize(logical/physical):512bytes/4096bytes I/Osize(minimum/optimal):4096bytes/4096bytes Disklabeltype:dos Diskidentifier:0x96304fd8 设备启动Start末尾扇区SizeId类型 /dev/sda12048300000000299997953143.1G83Linux Disk/dev/sdb:119.2GiB,128035676160bytes,250069680sectors Units:sectorsof1*512=512bytes Sectorsize(logical/physical):512bytes/512bytes I/Osize(minimum/optimal):512bytes/512bytes Disklabeltype:dos Diskidentifier:0x38194aac 设备启动Start末尾扇区SizeId类型 /dev/sdb12048225525759225523712107.6G83Linux /dev/sdb22255278062500689912454118611.7G5扩展 /dev/sdb52255278082500689912454118411.7G82Linux交换/Solaris 由上所示,我们已经创建了一个名为/dev/sda1的分区。同样的操作,可将剩余空间创建为/dev/sda2的分区,步骤省略。 将创建的分区格式化 创建完分区以后还需要将其格式化为具体的文件系统类型,此处我们将其格式化为ext4类型,执行: [plain]view plain copy $mkfs-text4/dev/sda1 结果如下: [plain]view plain copy Creatingfilesystemwith374997444kblocksand9379840inodes FilesystemUUID:ca87ed9d-c942-4a6e-b4d7-b9156f8a595d Superblockbackupsstoredonblocks: 32768,98304,163840,229376,294912,819200,884736,1605632,2654208, 4096000,7962624,11239424,20480000,23887872 Allocatinggrouptables:完成 正在写入inode表:完成 Creatingjournal(32768blocks):完成 Writingsuperblocksandfilesystemaccountinginformation:完成 此时,格式化已经完成,如果想在linux系统中使用,还需要挂载到某一个目录上才可以访问。 将分区挂载到文件系统目录上 linux挂载/取消挂载命令为mount/unmount,挂载只会影响到磁盘分区的访问路径,并不会影响到保存在磁盘分区中的内容。 创建目录/home/wangd/disk1, /home/wangd/disk2: [plain]view plain copy $mkdir/home/wangd/disk1 $mkdir/home/wangd/disk2 然后执行 [plain]view plain copy $mount/dev/sda1/home/wangd/disk1 $mount/dev/sda2/home/wangd/disk2 此时使用df -h查看,结果如下: [plain]view plain copy 文件系统容量已用可用已用%挂载点 udev5.8G05.8G0%/dev tmpfs1.2G9.5M1.2G1%/run /dev/sdb1106G71G30G71%/ tmpfs5.8G77M5.7G2%/dev/shm tmpfs5.0M4.0K5.0M1%/run/lock tmpfs5.8G05.8G0%/sys/fs/cgroup tmpfs1.2G76K1.2G1%/run/user/1000 /dev/sda1141G60M134G1%/home/wangd/disk1 /dev/sda2318G67M302G1%/home/wangd/disk2 会发现新增加的分区已经挂载到目录上了。 另外,使用umount命令可以取消挂载,例如取消/dev/sda1到/home/wangd/disk1的挂载: [plain]view plain copy $umount/dev/sda1 设置开机自动挂载 上述使用mount完成的磁盘挂载在重启后会无效,若想重启后依然保留挂载信息,可以编辑设置/etc/fstab文件: [plain]view plain copy $sudovim/etc/fstab 在最后添加两句: [plain]view plain copy /dev/sda1/home/wangd/disk1ext4defaults00 /dev/sda2/home/wangd/disk2ext4defaults00 其中:第1列是设备名或者卷标 第2列是挂载点(也就是挂载目录) 第3列是所要挂载设备的文件系统或者文件系统类型 第4列是挂载选项,通常使用defaults就可以 第5列设置是否使用dump备份,置0为不备份,置1,2为备份,但2的备份重要性比1小 第6列设置是否开机的时候使用fsck检验所挂载的磁盘,置0为不检验,置1,2为检验,但置2盘比置1的盘晚检验。 保存并退出后,以后每次重启就会发现挂载信息已经自动完成。 磁盘IO性能测试 使用hdparm测试IO读 hdparm工具可以查看硬盘的相关信息或对硬盘进行测速、优化、修改硬盘相关参数设定,主要用来测试硬盘速度。 [plain]view plain copy 语法:hdparm[-CfghiIqtTvyYZ][-a<快取分区>][-A<0或1>][-c][-d<0或1>][-k<0或1>][-K<0或1>][-m<分区数>][-n<0或1>][-p][-P<分区数>][-r<0或1>][-S<时间>][-u<0或1>][-W<0或1>][-X<传输模式>][设备] 参数说明: [plain]view plain copy -a<快取分区>设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。 -A<0或1>启动或关闭读取文件时的快取功能。 -c设定IDE32位I/O模式。 -C检测IDE硬盘的电源管理模式。 -d<0或1>设定磁盘的DMA模式。 -f将内存缓冲区的数据写入硬盘,并清楚缓冲区。 -g显示硬盘的磁轨,磁头,磁区等参数。 -h显示帮助。 -i显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。 -I直接读取硬盘所提供的硬件规格信息。 -k<0或1>重设硬盘时,保留-dmu参数的设定。 -K<0或1>重设硬盘时,保留-APSWXZ参数的设定。 -m<磁区数>设定硬盘多重分区存取的分区数。 -n<0或1>忽略硬盘写入时所发生的错误。 -p设定硬盘的PIO模式。 -P<磁区数>设定硬盘内部快取的分区数。 -q在执行后续的参数时,不在屏幕上显示任何信息。 -r<0或1>设定硬盘的读写模式。 -S<时间>设定硬盘进入省电模式前的等待时间。 -t评估硬盘的读取效率。 -T平谷硬盘快取的读取效率。 -u<0或1>在硬盘存取时,允许其他中断要求同时执行。 -v显示硬盘的相关设定。 -W<0或1>设定硬盘的写入快取。 -X<传输模式>设定硬盘的传输模式。 -y使IDE硬盘进入省电模式。 -Y使IDE硬盘进入睡眠模式。 -Z关闭某些Seagate硬盘的自动省电功能。 使用hdparm测试硬盘速度示例如下: [plain]view plain copy $sudohdparm-t/dev/sda1 /dev/sda1: TimingO_DIRECTdiskreads:386MBin3.00seconds=128.63MB/sec [plain]view plain copy $sudohdparm-t/dev/sdb1 /dev/sdb1: TimingO_DIRECTdiskreads:968MBin3.00seconds=322.62MB/sec -t用来测试硬盘的读取速度,由上可见,在我本机上,固态硬盘读取速度是322M/S,而普通用盘只有128M/S。 [plain]view plain copy $sudohdparm-T/dev/sda1 /dev/sda1: Timingcachedreads:9514MBin2.00seconds=4758.91MB/sec [plain]view plain copy $sudohdparm-T/dev/sdb1 /dev/sdb1: Timingcachedreads:11924MBin2.00seconds=5965.05MB/sec -T用来测试硬盘缓存的读取速度,由上可见,硬盘缓存的读取速度大幅升高。 使用dd测试磁盘IO读写速度 dd是一个非常有用的命令,其作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换,所以可以用来测试硬盘的顺序读写能力。可以写文件,可以写裸设备。 [plain]view plain copy 语法:dd[bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version] 参数: [plain]view plain copy bs=<字节数>将ibs(输入)与obs(输出)设成指定的字节数。 cbs=<字节数>转换时,每次只转换指定的字节数。 conv=<关键字>指定文件转换的方式。 count=<区块数>仅读取指定的区块数。 ibs=<字节数>每次读取的字节数。 if=<文件>从文件读取。 obs=<字节数>每次输出的字节数。 of=<文件>输出到文件。 seek=<区块数>一开始输出时,跳过指定的区块数。 skip=<区块数>一开始读取时,跳过指定的区块数。 --help帮助。 --version显示版本信息。 ps常用参数详解: if=xxx 从xxx读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO) of=xxx 向xxx写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO) bs=8k 每次读或写的大小,即一个块的大小。 count=xxx 读写块的总数量。 使用dd测试磁盘写速度的示例如下: [plain]view plain copy $ddbs=1024kcount=2000if=/dev/zeroof=/home/wangd/disk1/testdataconv=fsync 该命令的意思是:对磁盘进行连续写入,不使用内存缓冲区,每次写入1m的数据,总共写入20000次,产生2G大小的文件。执行结果如下: [plain]view plain copy disk1/testdataconv=fsync 记录了2000+0的读入 记录了2000+0的写出 2097152000bytes(2.1GB,2.0GiB)copied,15.5791s,135MB/s 注意:命令的最后conv=fsync是保证dd命令执行到最后会真正执行一次“同步(sync)”操作,,这样算出来的时间才是比较符合实际使用结果的。否则可能只是写到缓存中而并没有实际的写进硬盘里,造成测试失准。 此外在测试的时候可以结合iostat对系统磁盘进行监控。

优秀的个人博客,低调大师

CentOS中高级文本处理命令,cut命令,sed命令,awk命令

1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列。 cut语法 [root@www ~]# cut -d'分隔字符' -f fields##用于有特定分隔字符 [root@www ~]# cut -c 字符区间 ## 用于排列整齐的信息 选项与参数: -d:后面接分隔字符。与 -f 一起使用; -f:依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思; -c:以字符 (characters) 的单位取出固定字符区间; PATH 变量如下 [root@www ~]#echo $PATH /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games # 1 | 2 | 3| 4 | 5 | 6 | 7 将 PATH 变量取出,找出第五个路径。 # echo $PATH |cut -d':' -f 5 /usr/local/bin 将 PATH 变量取出,找出第三和第五个路径。 #echo $PATH |cut -d ':' -f 3,5 /sbin:/usr/local/bin 将 PATH 变量取出,找出第三到最后一个路径。 echo $PATH | cut-d ':' -f 3- /sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games 将 PATH 变量取出,找出第一到第三个路径。 #echo $PATH |cut -d ':' -f 1-3 /bin:/usr/bin:/sbin: 将 PATH 变量取出,找出第一到第三,还有第五个路径。 #echo $PATH |cut -d ':' -f 1-3,5 /bin:/usr/bin:/sbin:/usr/local/bin 实用例子:只显示/etc/passwd的用户和shell #cat /etc/passwd| cut -d ':' -f 1,7 root:/bin/bash daemon:/bin/sh bin:/bin/sh 1.2.2 sed命令 注意测试下面的命令的时候不要用系统的文件,不要用/etc/passwd等 准备的文件名是:test.txt文件,文件内容如下: 1 zhangsan test http://www.baidu.com 2015-12-31 2 lisi add https://www.jd.com 2016-03-20 3 wangwu test http://v.hao123.com/dianshi 2017-01-01 4 zhaoliu goshopping10 http://v.hao123.com/dianshi 2017-01-01 192.168.0.1 zhao10 goshopping http://v.hao123.com/dianshi 2017-01-01 6 qian 10test http://v.hao123.com/dianshi 2017-01-01 192.168.0.1 sun goshopping http://v.hao123.com/dianshi 2017-01-01 8 li loveable http://v.hao123.com/dianshi 2017-01-01 9 zhou test http://v.hao123.com/dianshi 2017-01-01 test wu goshopping http://v.hao123.com/dianshi 2017-01-01 12 zheng 10goshopping10 http://v.hao123.com/dianshi 2017-01-01 192.168.0.1 check gotest http://v.hao123.com/dianshi 2017-01-01 14 feng loveable http://v.hao123.com/dianshi 2017-01-01 15 chen loveable http://v.hao123.com/dianshi 2017-01-01 16 chu loveable http://v.hao123.com/dianshi 2017-01-01 192.168.0.1 wei goshopping http://v.hao123.com/dianshi 2017-01-01 18 jiang gotestpping http://v.hao123.com/dianshi 2017-01-01 19 shen check http://v.hao123.com/dianshi 2017-01-01 20 han goshopping http://v.hao123.com/dianshi 2017-01-01 192.168.0.1 yang goshopping http://v.hao123.com/dianshi 2017-01-01 192.168.0.1 zhu testing http://v.hao123.com/dianshi 2017-01-01 23 qin goshopping http://v.hao123.com/dianshi 2017-01-01 24 you test http://v.hao123.com/dianshi 2017-01-01 test xu goshopping http://v.hao123.com/dianshi 2017-01-01 26 he goshopping http://v.hao123.com/dianshi 2017-01-01 1/ 删除:d命令 $ sed '2d' test.txt -----删除example文件的第二行。 $ sed '2,$d' test.txt -----删除example文件的第二行到末尾所有行。 $ sed '$d' test.txt -----删除example文件的最后一行。 $ sed '/test/'d test.txt -----删除example文件所有包含test的行。 2/ 替换:s命令 $ sed's/test/mytest/g' test.txt ##在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。 $ sed-n 's/^test/mytest/p' test.txt ##(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。 $ sed's/^192.168.0.1/&localhost/' test.txt ##&符号表示追加一个串到找到的串后。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。 $ sed -n's/ love able/\1rs/p'test.txt ##love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。 $ sed's#10#100#g'test.txt ##不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。 选定行的范围:逗号 $ sed -n'/test/,/check/p'test.txt ## 所有在模板test和check所确定的范围内的行都被打印。 $ sed -n'5,/^test/p'test.txt ## 打印从第五行开始到第一个包含以test开始的行之间的所有行。 $ sed'/test/,/check/s/$/sed test/'test.txt ## 对于模板test和west之间的行,每行的末尾用字符串sed test替换。 多点编辑:e命令 $ sed -e '15,25d'-e 's/test/check/'test.txt ##(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除15至25行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。 $ sed--expression='s/test/check/' --expression='/love/d'test.txt ## 一个比-e更好的命令是--expression。它能给sed表达式赋值。(通过上面的命令将所有的test替换成龙check,将所有的带有love的行删除掉了) 3/ 从文件读入:r命令 $ sed '/test/rfile'test.txt -----file里的内容被读进来,显示在与test匹配的行下面,如果匹配多行,则file的内容将显示在所有匹配行的下面。 4/ 写入文件:w命令 $ sed -n'/test/w file'test.txt -----在example中所有包含test的行都被写入file里。 5/ 追加命令:a命令 $ sed'/^test/a\\--->this is a example'test.txt ##'--->this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。 6/ 插入:i命令 $ sed '/test/i\\some thing new-------------------------' test.txt 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。 7/ 下一个:n命令 $ sed '/test/{ n; s/aa/bb/; }' test.txt -----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。 8/ 退出:q命令 $ sed '10q' test.txt -----打印完第10行后,退出sed。 1.2.3 awk命令 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 假设last -n 5的输出如下 [root@www ~]#last -n 5## 仅取出前五行 rootpts/1 192.168.1.100 Tue Feb 10 11:21 still logged in rootpts/1 192.168.1.100 Tue Feb 10 00:46 - 02:28 (01:41) rootpts/1 192.168.1.100 Mon Feb9 11:41 - 18:30 (06:48) dmtsaipts/1 192.168.1.100 Mon Feb9 11:41 - 11:41 (00:00) roottty1 FriSep 5 14:09 - 14:10 (00:01) 如果只是显示最近登录的5个帐号 # last -n 5 |awk '{print $1}' root root root dmtsai root awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。 如果只是显示/etc/passwd的账户 # cat/etc/passwd |awk -F ':' '{print $1}' root daemon bin sys 这种是awk+action的示例,每行都会执行action{print $1}。 -F指定域分隔符为':' 如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割 #cat /etc/passwd|awk -F ':' '{print $1"\t"$7}' root/bin/bash daemon/bin/sh bin/bin/sh sys/bin/sh 如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。 cat/etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}' name,shell root,/bin/bash daemon,/bin/sh bin,/bin/sh sys,/bin/sh .... blue,/bin/nosh awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。 搜索/etc/passwd有root关键字的所有行 #awk -F:'/root/' /etc/passwd root:x:0:0:root:/root:/bin/bash 这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。 搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd 搜索/etc/passwd有root关键字的所有行,并显示对应的shell # awk -F':''/root/{print $7}'/etc/passwd /bin/bash 这里指定了action{print$7} 统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容: #awk -F ':''{print "filename:" FILENAME ",linenumber:" NR",columns:" NF ",linecontent:"$0}'/etc/passwd filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh 使用printf替代print,可以让代码更加简洁,易读 awk -F':''{printf("filename:%s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}'/etc/passwd

优秀的个人博客,低调大师

CentOS7/RHEL7.0配置网络IP的三种方法

RHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式。 en代表的是enthernet (以太网),o 代表的是onboard (内置),那一串数字是主板的某种索引编号自动生成,以便保证其唯一性。和原先的命名方式对比,这种新的方式比较长,难以记忆,不过优点在于编号唯一,做系统迁移的时候不容易出错。 1.修改/etc/sysconfig/network-scripts/eno16777736 查看你的网卡名称(本机是eno16777736): [root@linuxprobe Desktop]# ifconfig eno16777736: flags=4163 mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::20c:29ff:feb8:2b07 prefixlen 64 scopeid 0x20 inet6 fde0:b912:e3a9:0:20c:29ff:feb8:2b07 prefixlen 64 scopeid 0x0 ether 00:0c:29:b8:2b:07 txqueuelen 1000 (Ethernet) RX packets 37 bytes 5428 (5.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 62 bytes 8269 (8.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 0 (Local Loopback) RX packets 134 bytes 10928 (10.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 134 bytes 10928 (10.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@linuxprobe Desktop]# 编辑ifcfg-eno16777736 文件: 红色为需要修改或者添加的内容,保存并退出。 部分释义: TYPE=Ethernet #网络接口类型 BOOTPROTO=static #动态为dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=yes #是否支持IPV6 IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 #网卡名称 UUID=72cf53fd-534c-4765-912b-3df575a10a7d ONBOOT=yes #开启自动启用网络连接 IPADDRO=192.168.1.20 #设置IP地址 GATEWAY0=192.168.1.1 #设置网关 PREFIX0=24 #设置子网掩码 DNS1=192.168.1.1 #设置DNS HWADDR=00:0C:29:B8:2B:07 PEERDNS=yes PEERROUTES=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes 重启网卡并测试网络: [root@linuxprobe Desktop]# systemctl restart network 2.图形工具nmtui 在终端执行命令: [root@linuxprobe Desktop]# nmtui 你依然需要重启网卡才能生效,并测试网络。 3.图形工具nm-connection-editor 终端执行命令: [root@linuxprobe Desktop]# nm-connection-editor 三种方法只要会一种就可以上网,配置你所需要的服务,是不是非常简单啊! 本文转载自:http://www.linuxprobe.com/rhel7-configure-network/

优秀的个人博客,低调大师

centos下PHP5.6中php-fpm的配置、启动、关闭和重启

该文主要讲述:如何配置php-fpm、常见报错解决方法和php-fpm的启动、关闭和重启。 LNMP环境中的nginx是不支持php的,需要通过fastcgi插件来处理有关php的请求。而php需要php-fpm这个组件提供该功能。在php5.3.3以前的版本php-fpm是以一个补丁包的形式存在的,而php5.3.3以后只需在编译安装时使用–enable-fpm加载该模块即可,无需另行安装。 [root@localhost php-5.6.25]#/usr/local/php/sbin/php-fpm [29-Aug-2016 17:36:05] ERROR: failed toopen configuration file '/usr/local/php/etc/php-fpm.conf': No such file ordirectory (2) [29-Aug-2016 17:36:05] ERROR: failed toload configuration file '/usr/local/php/etc/php-fpm.conf' [29-Aug-2016 17:36:05] ERROR: FPMinitialization failed 启动php-fpm发现缺乏配置文件/usr/local/php/etc/php-fpm.conf 此时只需复制php-fpm的配置文件在安装php时提供的配置文件的模版/usr/local/php/etc/php-fpm.conf.default到相应目录下即可,此处有两种方法,均可提供配置文件,即分别将末班复制到/usr/local/php/etc/或者 /usr/local/etc/并重命名为php-fpm.conf ① [root@localhost etc]# cd /usr/local/php/etc/ [root@localhost etc]# ls pear.confphp-fpm.conf.default [root@localhost etc]# cp/usr/local/php/etc/php-fpm.conf/usr/local/etc/php-fpm.conf 利用/usr/local/php/sbin/php-fpm启动FPM [root@localhost etc]# /usr/local/php/sbin/php-fpm ② [root@localhost etc]#cpphp-fpm.conf.defaultphp-fpm.conf [root@localhost etc]# /usr/local/php/sbin/php-fpm 至此php-fpm配置完成,鉴于fpm是置于PHP和Nginx之间的一层应用,所以配置成服务开机自启。 下面配置php-fpm以服务形式启动 [root@localhost etc]# cd /usr/local/php-5.6.25/ [root@localhost php-5.6.25]# cp./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@localhost php-5.6.25]# ll /etc/init.d/php-fpm -rw-r--r-- 1 root root 2354 8月 3115:54 /etc/init.d/php-fpm [root@localhost php-5.6.25]# chmod a+x/etc/init.d/php-fpm [root@localhost php-5.6.25]# ll /etc/init.d/php-fpm -rwxr-xr-x 1 root root 2354 8月 3115:54 /etc/init.d/php-fpm [root@localhost php-5.6.25]# /etc/init.d/php-fpmstart Starting php-fpm [31-Aug-2016 15:56:00]ERROR: unable to bind listening socket for address '127.0.0.1:9000': Addressalready in use (98) [31-Aug-2016 15:56:00] ERROR: FPMinitialization failed Failed [root@localhost php-5.6.25]# netstat -tunlp |grep9000 tcp0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 4928/php-fpm [root@localhost etc]# /etc/init.d/php-fpm stop Gracefully shutting down php-fpm warning,no pid file found - php-fpm is not running ? 关闭php-fpm服务时发现报错,缺乏pid文件,解决方法为编辑配置文件,启用pid文件 [root@localhost etc]# vim php-fpm.conf pid = run/php-fpm.pid [root@localhost etc]# kill -INT `cat/usr/local/php/var/run/php-fpm.pid` cat: /usr/local/php/var/run/php-fpm.pid: 没有那个文件或目录 [root@localhost etc]# /etc/init.d/php-fpm stop Gracefully shutting down php-fpm warning,no pid file found - php-fpm is not running ? 尝试关闭服务时再次报错,手动建立php-fpm.pid文件即可 [root@localhost etc]# cd /usr/local/php/var/run/ [root@localhost run]# vim php-fpm.pid [root@localhost run]# ls php-fpm.pid [root@localhost run]# service php-fpm stop Gracefully shutting down php-fpm . done [root@localhost run]# service php-fpm start Starting php-fpmdone [root@localhost run]# netstat -tunlp |grep 9000 tcp0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3008/php-fpm [root@localhost run]# kill -INT `cat /usr/local/php/var/run/php-fpm.pid` [root@localhost run]# netstat -tunlp |grep 9000 [root@localhost run]# /etc/init.d/php-fpm start Startingphp-fpm done 将服务添加到chkconfig列表,设置开机启动 [root@localhost run]# chkconfig --add php-fpm [root@localhost run]# chkconfig php-fpm on 至此,php-fpm配置完成,下面提供两种控制方式 ①PHP-FPM使用信号控制: INT, TERM立刻终止 QUIT平滑终止 USR1重新打开日志文件 USR2平滑重载所有worker进程并重新载入配置和二进制模块 启动 [root@localhost run]# /usr/local/php/sbin/php-fpm 关闭: [root@localhost run]# kill -INT `cat/usr/local/php/var/run/php-fpm.pid` 重启: [root@localhost run]# kill -USR2 `cat/usr/local/php/var/run/php-fpm.pid` ② 服务方式控制 Usage: /etc/init.d/php-fpm{start|stop|force-quit|restart|reload|status} [root@localhost run]# service php-fpm start Starting php-fpmdone [root@localhost run]# service php-fpm stop Gracefully shutting down php-fpm . done [root@localhost run]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpmdone [root@localhost run]#

优秀的个人博客,低调大师

CentOS下文件夹的创建、复制、剪切、重命名、清空和删除命令

在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz 一、目录创建 在/home/wwwroot目录下新建一个sinozzz123的文件夹 mkdir /home/wwwroot/sinozzz123 二、目录复制 1.把/home/wwwroot/sinozzz里面的文件和文件夹等复制到home/wwwroot/sinozzz123目录下 cp -rf /home/wwwroot/sinozzz/* /home/wwwroot/sinozzz123 2.把/home/wwwroot/sinozzz123/abc/下的文件夹和文件复制到home/wwwroot/sinozzz123目录下 cp -rf /home/wwwroot/sinozzz123/abc/* /home/wwwroot/sinozzz123 3.把/home/wwwroot/sinozzz目录复制到/home/wwwroot/sinozzz123目录下,即把sinozzz复制变成sinozzz123的子目录,变成/home/wwwroot/sinozzz123/sinozzz的路径 cp -rf /home/wwwroot/sinozzz /home/wwwroot/sinozzz123 三、目录剪切 1.使用mv命令剪切文件。 如需要将/home/wwwroot/sinozzz123/music/目录下的1.mp3文件剪切到/home/wwwroot/sinozzz123/abc目录下,执行下面的命令即可: # mv /home/wwwroot/sinozzz123/music/1.mp3 /home/wwwroot/sinozzz123/abc 2.使用mv命令剪切文件夹。 把/home/wwwroot/sinozzz123/soft文件夹剪切到/home/wwwroot/sinozzz123/abc目录下 # mv /home/wwwroot/sinozzz123/soft /home/wwwroot/sinozzz123/abc 3.使用mv命令剪切文件夹和文件 把/home/wwwroot/sinozzz123/photo/下的文件夹和文件剪切到/home/wwwroot/sinozzz123/abc目录下 # mv /home/wwwroot/sinozzz123/photo/* /home/wwwroot/sinozzz123/abc 四、目录重命名 在linux下,移动文件跟重命名都是同一个命令,mv(就是move的意思) 命令: mv 源文件名 目标文件名 1.把/home/wwwroot/sinozzz123/index.htm重命名为/home/wwwroot/sinozzz123/index.html # mv /home/wwwroot/sinozzz123/index.htm /home/wwwroot/sinozzz123/index.html 2.把/home/wwwroot/sinozzz123目录重命名为/home/wwwroot/sinozzz456 # mv /home/wwwroot/sinozzz123 /home/wwwroot/sinozzz456 五、目录删除 linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。 直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除 -f 就是直接强行删除,不作任何提示的意思 1.删除文件使用实例: rm -f /home/wwwroot/sinozzz456/index.html 将会强制删除/home/wwwroot/sinozzz456/index.html这个文件 2.清空文件夹实例: rm -rf /home/wwwroot/sinozzz456/abc/* 将会强制删除/home/wwwroot/sinozzz456/abc目录下所有文件、文件夹,保留/home/wwwroot/sinozzz456/abc目录 3.删除文件夹实例: rm -rf /home/wwwroot/sinozzz456 将会强制删除/home/wwwroot/sinozzz456目录以及其下所有文件、文件夹 需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的 当然,rm还有更多的其他参数和用法,man rm就可以查看了 如果是在/home/wwwroot/目录下进行操作,则可以省去每个命令的/home/wwwroot/部分

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册