linux知识点

时间:2023-03-09 04:23:53
linux知识点

通过gui来使用
通过api来使用
通过cli来使用
通过tui来使用

进程不在,但tcp连接还一直存在的解决办法--tcpkill命令

http://www.centoscn.com/CentOS/Intermediate/2013/1025/1979.html

在linux系统中,遇到TCP链接迟迟不能释放的情况,类似FIN_WAIT1、FIN_WAIT2的状态,释放时间不确定,而且对应的程序已经关闭,相应的端口也不再监听,无法通过杀进程来解决,这种情况下,为了快速恢复正常,不得不采用重启服务器的方法加以解决,在经过各大网站搜索找到linux下dsniff包中含有tcpkill命令,该命令可以将上述状态的TCP链接加以清除,进而免除服务器重启的情况。

在dsniff集成工具包中有一个tcpkill命令,可以解决这类问题:
下载地址:http://pkgs.repoforge.org/dsniff/ 此目录中可以找到相应系统的版本
wget  http://pkgs.repoforge.org/dsniff/dsniff-2.4-0.1.b1.el5.rf.x86_64.rpm
rpm -ivh dsniff-2.4-0.1.b1.el5.rf.x86_64.rpm

安装完成后可以发现系统多了一个tcpkill的命令,命令使用方法如下:
tcpkill -9 port ftp &>/dev/null
tcpkill -9 host 192.168.10.30 &>/dev/null
tcpkill -9 port 53 and port 8000 &>/dev/null
tcpkill -9 net 192.168.10 &>/dev/null
tcpkill -9 net 192.168.10 and port 22 &>/dev/null

win与linux之间的乱码与格式混乱问题

文件名与文件内容乱码

文件是在Windows下创建的,而Windows的文件名中文编码默认GBK,Linux中默认文件名编码为UTF-8,编码不一致导致了文件名乱码的问题,解决这个问题需要对文件名进行转码,这个工具就是convmv。
convmv就是更改文件名编码方式的一个工具。
比如
sudo convmv -f gbk -t utf-8 -r --notest  /home
就是将/home目录下原来文件名是gbk编码方式的全部改为utf-8格式的。这里 -f  后面为原来的编码方式,-t 后面是要更改为的编码方式, -r 表示这个目录下面的所有文件, --notest 表示马上执行,而不是仅仅测试而已。另外这命令好像要root才能执行,因此要加上 sudo。

windows下的一个文本文件复制到linux下后,文件名与内容都是乱码,用下面处理一下就可以了。这样就解决了文件名与内容两个问题。

[root@kvm2 share]# iconv -f gbk -t utf-8 Ŀ??.txt -o b.txt

[root@kvm2 share]# rpm -qf /usr/bin/iconv
glibc-common-2.17-106.el7_2.4.x86_64

[root@kvm2 share]# rpm -qf /usr/bin/convmv
convmv-1.15-2.el7.noarch

在Linux中查看文件编码可以通过以下几种方式:
1.在Vim 中可以直接查看文件编码
:set fileencoding
即可显示文件编码格式。
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc 文件中添加以下内容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照 fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。

Linux下新建的txt文件在Windows下用记事本打开会挤在一起(没有了换行符,变成黑方块),原因是Windows下换行符号是“\r\n”,而linux下是“\n”没有”\r”,记事本不支持\n换行(它只支持\r\n形式的换行),所以会那样。解决方法给个最简单的:直接修改扩展名为doc,然后用word打开。 需要的话自己拷贝回txt

http://www.openfirmware.info/OpenBIOS
It is Open Firmware's goal to work on all common platforms, like x86, AMD64, PowerPC, ARM, Sparc and Mips. With its flexible and modular design, Open Firmware targets servers, workstations and embedded systems, where a sane and unified firmware is a crucial design goal and reduces porting efforts noticably.

vga bios
主板 bios
raid bios
等等

层级

1.硬件

2.bios

3.bt(bootloader)

4.kernel

5.shell

6.daemon

7.app

远程连接

VNC
VNC使用的是RFB协议来做屏幕分享和远程操作的软件,由著名的AT&T欧洲研究实验室开发。使用时需要客户端软件和服务器软件配合使用。

远程桌面
远程桌面使用RDP(Remote Desktop Protocol)远程桌面协议,大部分Windows都默认支持此协议,可以远程接入操作桌面。

RFB和RDP区别
RFB是在服务器端将窗口在显存中画好之后将图像传给客户端,客户端只充当一个图像解码显示的角色; RDP则将画图的工作交给了客户端,服务器需要了解客户端显示能力的具体情况,以便作出相应调整。
RFB主要传图像,RDP主要传指令。就一般应用而言,RFB数据量太大,RDP对客户端要求较高,因此RFB适用于瘦客户端,RDP适用于低速网络。

软链接

今天在安装mysql软件的时候,mysql/bin目录下用ln -s mysql /usr/local/bin/mysql 创建软连接,后来启用mysql时弹出错误:
-bash: /usr/local/bin/mysql: Too many levels of symbolic links
从网上查找了一下原因,原来是建立软连接的时候采用的是相对路径,所以才会产生这样的错误,解决方式是采用绝对路径建立软链接:
ln -s /usr/../mysql/bin/mysql   /usr/local/bin/mysql
这样问题就解决了。

http://www.server-world.info/en/ 这个站点还比较清晰

httpd与tomcat区别
 联系
  1)Apache是普通服务器,本身只支持html即普通网页,可以通过插件支持php,还可以与Tomcat连通(Apache单向连接Tomcat,就是说通过Apache可以访问Tomcat资源,反之不然)。  
  2)Apache只支持静态网页,但像asp、jsp、php、cgi等动态网页就需要Tomcat来处理。
  3)Apache和Tomcat整合使用:
    如果客户端请求的是静态页面,则只需要Apache服务器响应请求;
    如果客户端请求动态页面,则是Tomcat服务器响应请求,将解析的JSP等网页代码解析后回传给Apache服务器,再经Apache返回给浏览器端。
    这是因为jsp是服务器端解释代码的,Tomcat只做动态代码解析,Apache回传解析好的静态代码,Apache+Tomcat这样整合就可以减少Tomcat的服务开销。
  4)Apache和Tomcat是独立的,在同一台服务器上可以集成。
区别
  Apache是有C语言实现的,支持各种特性和模块从而来扩展核心功能;Tomcat是Java编写的,更好的支持Servlet和JSP。
  1、Apache是Web服务器,Web服务器传送(serves)页面使浏览器可以浏览,Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供 (serves)商业逻辑(business logic)。
  Tomcat是运行在Apache上的应用服务器,应用程序服务器提供的是客户端应用程序可以调用(call)的方法 (methods)。它只是一个servlet(jsp也翻译成servlet)容器,可以认为是Apache的扩展,但是可以独立于apache运行。
  2、Apache是普通服务器,本身只支持html静态普通网页。不过可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源,反之不然),Tomcat是jsp/servlet容器,同时也支持HTML、JSP、ASP、PHP、CGI等,其中CGI需要一些手动调试,不过很容易的。
  3、Apache侧重于http server,Tomcat侧重于servlet引擎,如果以standalone方式运行,功能上Tomcat与apache等效支持JSP,但对静态网页不太理想。
  4、Apache可以运行一年不重启,稳定性非常好,而Tomcat则不见得。
  5、首选web服务器是Apache,但Apache解析不了的jsp、servlet才用tomcat。
  6、Apache是很最开始的页面解析服务,tomcat是后研发出来的,从本质上来说tomcat的功能完全可以替代Apache,但Apache毕竟是tomcat的前辈级人物,并且市场上也有不少人还在用Apache,所以Apache还会继续存在,不会被取代,apache不能解析java的东西,但解析html速度快。
两者例子:
  Apache是一辆车,上面可以装一些东西如html等,但是不能装水,要装水必须要有容器(桶),而这个桶也可以不放在卡车上,那这个桶就是TOMCAT。
两者整合:
  Apache是一个web服务器环境程序,启用他可以作为web服务器使用不过只支持静态网页,不支持动态网页,如asp、jsp、php、cgi
  如果要在Apache环境下运行jsp就需要一个解释器来执行jsp网页,而这个jsp解释器就是Tomcat
  那为什么还要JDK呢?因为jsp需要连接数据库的话就要jdk来提供连接数据库的驱程,所以要运行jsp的web服务器平台就需要APACHE+TOMCAT+JDK
整合的好处:
  如果客户端请求的是静态页面,则只需要Apache服务器响应请求
  如果客户端请求动态页面,则是Tomcat服务器响应请求
  因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销

控制台终端配色方案

一般的Linux发行版默认的终端都是16色的,但事实上几乎所有的终端都支持256色终端。只需要把环境变量TERM设为xterm-256color(xterm算是终端模拟器的一个标准,Gnome Terminal用gnome-256color,Konsole可以用konsole-256color)。
其实,很多终端,比如 xterm、urxvt,以及 Mac OSX 中的 Iterm.app 等都可以支持256色,可以在这些终端下看到更加细腻优雅的颜色表现。
这里涉及到了几个重要的程序的配置,供大家参考。注意,不是所有的终端和命令行应用都支持256色。

默认的/etc/DIR_COLOR及其三个文件是针对ls这个命令的配色方案

vim-enhanced这个包有vi的配色方案

http://www.linuxidc.com/Linux/2016-02/128068.htm

相同的colorschema,vim和gvim的颜色差距还是很大的,因为gvim使用X的颜色,而vim只能使用终端提供的颜色,所以造成了二者的显示差异。

background schemas(白灰黑三种,在8色模式下)
8 colors mode
256 colors mode
/usr/share/terminfo目录是所有支持的终端类型

xterm开启256色

现在的终端模拟器早就支持256色了,不过默认可能还是8色的。

查看终端类型
$ echo $TERM
xterm

tty是linux,ssh是xterm
查看xterm终端支持的颜色
$ tput colors
8

tput clos lines
xterm终端默认还是8色的

只要将终端类型更改为xterm-256color即可,有两种方式可以来修改

改网卡名

Fedora 搞的consistent network device names本人觉的很哦心,很难记。

all onboard ethernet adapters are labeled as emX (em1, em2…) and all PCI ethernet adapters are labeled as pXpX (p[slot]p[port], like p7p1 for port 1 on slot 7).

我的网卡名就变成了p3p1

下面我们就来把她改成eth0

ubuntu

安装ssh,默认没有装

$sudo apt-get install openssh-server

切换root用户

$sudo su,然后输入普通用户的密码就可以了

注意: 出于安全考虑,默认时Ubuntu的root用户时没有固定密码的,它的密码是随机产生并且动态改变的,貌似是每5分钟改变一次,所以用su(switch user)是不可以的,因为我们不知道root的密码
默认root用户是无固定密码的,并且是被锁定的,如果想给root设置一个密码,只需执行命令:sudo passwd root 然后根据提示一步一步来
这样就可以su root ,输入root密码切换到root用户

localization问题

/usr/local/locale这个目录非常重要,发现这个是受svn-book的第七章启发,这里面关于语言的解释比较清晰。

[root@localhost LC_MESSAGES]# pwd
/usr/share/locale/zh_CN/LC_MESSAGES

[root@localhost LC_MESSAGES]# file make.mo

系统支持的
locale -a(有多种语言)
当前定义的
locale()
只重定义某一项
export LC_MESSAGES=zh_TW
[root@host02 .subversion]# svn hel
未知的命令: 'hel'
請使用 'svn help' 以了解用法.
[root@host02 .subversion]# export LC_MESSAGES=zh_CN
[root@host02 .subversion]# svn hel
未知命令: “hel”
使用“svn help”得到用法。

svn能这样显示,是因为它本身支持国际化,即Localization

程序必须有.mo模块

[root@localhost LC_MESSAGES]# rpm -ql tar
/bin/gtar
/bin/tar
/usr/share/doc/tar-1.23
/usr/share/doc/tar-1.23/AUTHORS
/usr/share/doc/tar-1.23/ChangeLog
/usr/share/doc/tar-1.23/ChangeLog.1
/usr/share/doc/tar-1.23/NEWS
/usr/share/doc/tar-1.23/README
/usr/share/doc/tar-1.23/THANKS
/usr/share/doc/tar-1.23/TODO
/usr/share/info/tar.info-1.gz
/usr/share/info/tar.info-2.gz
/usr/share/info/tar.info.gz
/usr/share/locale/bg/LC_MESSAGES/tar.mo
/usr/share/locale/cs/LC_MESSAGES/tar.mo
/usr/share/locale/da/LC_MESSAGES/tar.mo
/usr/share/locale/de/LC_MESSAGES/tar.mo
/usr/share/locale/el/LC_MESSAGES/tar.mo

34.改root密码

[root@84-monitor ~]# passwd
Changing password for user root.
New password:
/usr/share/cracklib/pw_dict.pwd: No such file or directory
PWOpen: No such file or directory
[root@84-monitor ~]# yum -y reinstall cracklib-dicts

33.内核

Linux 内核目前的开发模式是Linus Torvalds制作的新版本的发布,也被称为“vanilla”或“mainline”的内核,这意味着它们包含了主要的,通用的开发分支。在托瓦尔兹 进行初始一轮集成由所有其他程序员,几个回合的bug修正预发布版的主要变化之后,这个分支大约每3个月正式发布一个新的版本。

32.redis的内存分配

我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。所以系统内存分配器的性能及碎片率会对Redis造成一些性能上的影响。
Redis采用不同内存分配器tcmalloc和jemalloc和glibc碎片率对比

31.linux下watchdog

Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。
内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备(俗称“开门放狗”),
就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称“定期喂狗”),
每次写操作会导致重新设定定时器。如果用户空间程序在1分钟之内没有写操作,定时器到期会导致一次系统 reboot 操作(“狗咬人了”呵呵)。
通过这种机制,我们可以保证系统核心进程大部分时间都处于运行状态,即使特定情形下进程崩溃,
因无法正常定时“喂狗”,Linux系统在看门狗作用下重新启动(reboot),核心进程又运行起来了。多用于嵌入式系统。
Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。在Linux 内核下,
watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作, 硬件watchdog电路或软件定时器就会重新启动系统。

31.Partition 1 does not end on cylinder boundary.警告理解

分区 1 没有在柱面上结束。

很多论坛上都说出现这种情况的原因是正常的,总体的原因如下
fdisk –l 命令是按照柱面来进行分区显示的,所以需要按照垂直的空间进行理解,但现在的计算机在显示时仍然会按照扇区来理解(因为现在磁盘是使用LBA(使用扇区进行寻址)取代以前的CHS(柱面、磁头、扇区)方式记录硬盘分区的),所以会判断分区没有在柱面结束;如果我们使用命令 sfdisk –uS -l ,这个命令的意思是:“give size in sectors instead of sylinders”即是按照扇区的来进行分区显示,这样就可以看到以扇区方式显示分区的了。可以看到相邻逻辑分区之间都有 64 扇区的空间,那里存放逻辑分区表。
现代操作系统使用LBA而不是CHS来记录硬盘分区.如果用扇区代替柱面,我们将看到:

sfdisk -uS -l /dev/sda

30.centos,安装时的分区方案

有三个标准可以选择:基础的标准分区(针对单磁盘而言),多磁盘的raid分区,多磁盘的lvm

Linux系统一般需要三个分区:Boot分区、根分区、swap分区。其中,必不可少的是根分区,boot分区和swap分区可有可无。考虑到内存可能不足,一般保留swap分区。
分区表只有64bytes,最多只能分成四个分区,其中扩展分区最多只能有一个。所以推荐的分区方法是P+P+P+E,这样系统没有用完的空间可在系统安装完成后根据需要自行分配。如果分区方式是P+P+P+P,那系统多余的空间将无法利用。

安装boot loader
  Install boot loader on /dev/sda:将boot引导安装到磁盘/dev/sda前512bytes.
  Boot loader operating system list:boot引导的系统名单。如果是双系统,在这里还会有Window的列表。Default即指定默认的启动系统。
  注意:当初我安装双系统时,Windows下有5个盘:C、D、E、F、G,我是直接把笔记本D盘的空间释放出来,大概100G。这样,在手动分区时,sda1,sda4,sda5,sda6、sda7存在。由于Oracle对RHEL系统版本有要求,重装过多次系统。出现以下情况:
  1> 因为已经有1个主分区sda1和一个扩展分区sda4存在(注意:sda5,sda6,sda7是sda4这个扩展分区的衍生分区),因此在此只能新建两个主分区,sda2和sda3.第一次我分别将两个分区建为boot分区和根分区,这样在安装boot loader这一步时显示: Install boot loader on /dev/sda,可以直接安装到硬盘MBR上。
  2> 第二次将sda2和sda3分别建为根分区和swap分区,结果在安装boot loader这一步时显示:Install boot loader on /dev/sda2,即使点开Change device,也没有/dev/sda这一项,这意味着boot loader 不能安装在MBR上,这就意味着按照默认的MBR,linux将无法引导。最后,还是在Rescue Installed System,即救援模式下,将grub文件安装到/dev/sda下:grub-install /dev/sda;

http://en.wikipedia.org/wiki/List_of_tools_to_create_Live_USB_systems    多启动规范的一些列表  multiboot specification

29.YUMI或UUI安装centos6.4-64-minimal不成功的解决办法

用UUI制作完成后只需要将minimal.iso镜像拷贝到u盘根目录下即可,否则会报错

missing iso 9660 image

images文件夹和*.iso在同级目录

将ISOs/下镜像直接解压至当前目录

YUMI Boot other ISO 最下面的要提供 install.img路径,可能解包以后找不到路径

选择 sda1 填路径即可,

/Multiboot/ISOs/images/install.img

/Multiboot/CentOS-6.6-x86_64-minimal/images/install.img

遇到下面的弹窗报错,通常在分区格式化完成后弹出

“unable to read package metadata.this may be due to a missing repodata directory . please ensure that your install tree has been correctly generated ......”

原因:这是因为/Multiboot/ISOs/repodata/下的文件都没有后缀名,无法识别,所以弹出上面报错

办法:对照/Multiboot/ISOs/repodata/repomd.xml中的uuid的后缀名,逐个补上后缀名即可。总共8个文件

将此:e0d5ad3bff4d0bd6ffd5037d6e76049b09c1d4f697445be6071d100f865a46f3

添加为:e0d5ad3bff4d0bd6ffd5037d6e76049b09c1d4f697445be6071d100f865a46f3-other.xml.gz

http://download.fedoraproject.org/pub/fedora/linux/releases/22/Workstation/x86_64/iso/Fedora-Live-Workstation-x86_64-22-3.iso

用YUMI-2.0.2.8.exe安装下面这两个镜像,选择GRUB from RAM,是成功的,2g的u盘只用了一半。

XenServer-7.0.0-main.iso

VMware-VMvisor-Installer-5.1.0.update01-1065491.x86_64.iso

28.即时生效与放到文件中永久生效

hostname xxx
vi /etc/sysconfig/network ifconfig xxx
vi /etc/sysconfig/network-scripts/ifcfg-eth0 sysctl
echo >/proc/sys/net/ipv4/icmp_echo_ignore_all ulimit -n
vi /etc/profile

27.服务4种启动方式

systemV  systemd  bsd  upstart

26.rpc.statd

问题描述: 发现运行的进程中有rpc.statd服务,对这个服务很是不了解,就进行探索,发现,在 linux中的 /usr/sbin 目录中有两个文件 rpc.rstatd 和 rpc.statd, 文件名非常相象,他们各自是干啥的呢?
    解答:
    在 linux的 /usr/sbin 目录中有两个文件 rpc.rstatd 和 rpc.statd, 文件名非常相象,但所起的作用是不同的。
    用途 :
   1. 执行 /usr/sbin/rpc.rstatd 命令会启动 rstatd 后台程序,它是一个服务器,可以从系统核心中获取系统性能统计的相关信息,将结果返回给调用程序。 rstatd daemon 通常是由 inetd daemon 启动的。
目前在进行压力测试时,用户经常在客户端通过使用 load runner 软件来收集应用或数据库服务器的性能数据。 其就是通过给服务器上的 rstatd 后台程序发请求来实现的。
   2. /usr/sbin/rpc.statd 命令会启动 statd 后台程序。 在 NFS 环境中 statd daemon 与 lockd daemon 相结合,为锁机制提供 crash 和 recovery 功能。 statd daemon 除负责维护相关的连接信息外,还监控 /var/statmon/sm 目录, /var/statmon/sm.bak 目录和 /var/statmon/state 文件中的状态信息。 statd 通常是在 lockd 之前启动, statd daemon 的启动和停止是通过 调用系统的 SRC 命令来实现的。

[root@225-oth run]# service nfslock status
rpc.statd (pid  1016) is running...

25.交互模式与直接模式

asterisk -r与asterisk -rx ""
sqlite3
mysqladmin与mysql -p
virsh

24.Linux下编译软件时指定安装目录的好处

源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)

Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure –help输出详细的选项列表。

其中--prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱。

如果配置--prefix,如:

./configure --prefix=/usr/local/test

可以把所有资源文件放在/usr/local/test的路径中,不会杂乱。

用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。

当然要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是make文件指定过uninstall。

23.程序里的环境变量

如果有的程序需要一些环境变量的支持,例如在它的man手册页里有变量定义,这时只需要在shell命令行里设置对应的变量名即可
因为这种变量名已在程序里规定好了,名字不能乱起。

echo export TMOUT=1000000 >> /root/.bash_profile; source .bash_profile

22.带进度条提示的拷贝

wget本身就有

rsync命令
#rsync -av --progress /mnt/yidong2/full20100526.tar.gz /mnt/yidong1/
可以实现本机带进度条提示拷贝,可以实现不同机器带进度条提示拷贝,可以拷贝多个文件

scp命令
#scp -v /mnt/yidong2/full20100526.tar.gz /mnt/yidong1/
本机拷贝无法显示进度
#scp -v /mnt/yidong2/full20100526.tar.gz root@192.168.1.1:/mnt/yidong1/
不同机器拷贝可以显示进度条,即使不带“-v”参数也可以显示进度条
#scp -v /mnt/yidong2/full20100526.tar.gz root@127.0.0.1:/mnt/yidong1/
变相实现本机带进度条提示拷贝,可以不带“-v”参数

cp命令
没有找到带进度条提示拷贝,有知道的朋友请分享,谢谢。
关于rsync, scp, cp拷贝速度
我做了一个简单的测试,拷贝一个240M的文件,仅供参考
#cp full20100526.tar.gz full20100526.tar.gz.bak
速度很快
#rsync -av --progress full20100526.tar.gz full20100526.tar.gz.bak
速度比较快(113.10MB/s)
#scp -v full20100526.tar.gz root@127.0.0.1:/root/full20100526.tar.gz
速度有些慢(26.9MB/s)

21.刪除大量的log檔案报错处理

rm、cp、mv是unix下面常用到的檔案處理指令,當我們需要刪除大量的log檔案,如果檔案數太多就會出現此訊息【/bin/rm: Argument list too long】
解決方式如下:

例如要刪除 /tmp/*.log
則執行【ls /tmp/*.log | xargs rm -f】這樣就可以囉^__^,其他cp,mv同理!

-bash-3.2$ pwd
/u01/app/11.2.0/grid/rdbms/audit
-bash-3.2$ ll|wc -l
895646
-bash-3.2$ rm -rf *
-bash: /bin/rm: Argument list too long

此例类似 find的-exec选项

在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。不幸的是,有些系统对能够传递给 exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令 的用处所在,特别是与find命令一起使用。Find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像 -exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

20.manual section

MANUAL SECTIONS
       The standard sections of the manual include:
       1      User Commands
       2      System Calls
       3      C Library Functions
       4      Devices and Special Files
       5      File Formats and Conventions
       6      Games et. Al.
       7      Miscellanea
       8      System Administration tools and Deamons
       Distributions customize the manual section to their specifics, which often include additional sections.

et. Al.    等,等等
specifics    n. 细节;特性(specific的复数);详情

19.时间戳与时间

unix时间戳,1970年

app时间戳,例如mysql,excel,php,java等

Unix时间戳转换工具可以把Unix时间戳转成北京时间,也可以把北京时间转换成unix时间戳

UNIX时间又称POSIX时间/新纪元时间(Epoch Time):从协调世界时1970年1月1日0时0分0秒起到现在的总秒数,不包括闰秒。正值表示1970以後,负值则表示1970年以前。
Unix 2038 bug(Jason hatchet bug)
说到UNIX时间不得不提Unix 2038 bug(Jason hatchet bug):2038年1月19日3时14分07秒,32位元系统的UNIX时间将会被重置。
32位的UNIX系统会以32位二进制数字表示时间,它们最多只能表示至协调世界时间2038年1月19日3时14分07秒(二进制:01111111 11111111 11111111 11111111),在下一秒二进制数字会是10000000 00000000 00000000 00000000,这是负数,因此各系统会把时间误解作1901年12月13日20时45分52秒(亦有说回归到1970年)。这时可能会令软件发生问题,导致系统瘫痪。
目前解决方案是把系统由32位转为64位系统。在64位系统下,此时间最多可以表示到292,277,026,596年12月4日15时30分08秒。

18.anaconda

anaconda-ks.cfg是你安装本系统时自动生成的一个配置文件,可以用在其它安装过程中。
install.log是安装的日志文件,一般是安装的每一个软件包。
install.log.syslog是安装时对用户及用户组的配置,如创建用户、用户组等。

17.命令行下正常能执行,放入crontab不能执行  2014.11.5

crontab定时任务环境变量丢失问题

命令行下正常能执行,放入crontab 下老是报错,不是提示找不到asterisk命令就是提示不能找到某个库,那只能说明一个问题,是你的环境变量有问题,网上的一些方法也不行,例如

在crontab -e里面加入以下是不成功的,也即在/var/spool/cron/root里,
SHELL=/bin/bash
#PATH=/sbin:/bin:/usr/sbin:/usr/bin
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

最后在com这个脚本开头加入下面一行
source /etc/profile终于成功了  折腾了一下午

X-Cron-Env: <LANG=en_US.UTF->
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Date: Wed, Nov :: + (CST)
Status: RO /var/prtg/scripts/com: line : asterisk: command not found Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF->
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib/oracle/10.2.0.3/client/bin:/root/bin:/usr/local/lib>
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Date: Wed, Nov :: + (CST)
Status: RO asterisk: error while loading shared libraries: libocilib.so.: cannot open shared object file: No such file or directory

16.查看文件编码

文件编码查看
  1.在Vim中可以直接查看文件编码
  :set fileencoding
  即可显示文件编码格式。
  如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
  ~/.vimrc 文件中添加以下内容:
  set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
  这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
  2. enca (如果你的系统中没有安装这个命令,可以用sudo yum install -y enca 安装 )查看文件编码
  $ enca filename
  filename: Universal transformation format 8 bits; UTF-8
  CRLF line terminators
  需要说明一点的是,enca对某些GBK编码的文件识别的不是很好,识别时会出现:
  Unrecognized encoding
    3. file 文件名
文件编码转换
  1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
  :set fileencoding=utf-8
  2. enconv 转换文件编码,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下
  enconv -L zh_CN -x UTF-8 filename
  3. iconv 转换,iconv的命令格式如下:
  iconv -f encoding -t encoding inputfile
  比如将一个UTF-8 编码的文件转换成GBK编码
  iconv -f GBK -t UTF-8 file1 -o file2

15.Ring buffer

Ring buffer是整个trace系统使用缓存管理的一种方式, 由于trace可能在内核运行的任何时候发生, 这种kernel的不确定状态决定了ring buffer的写操作中不能有任何引起睡眠的操作, 而且ring buffer的操作频率极高,所以在ring buffer实现里有很多高效的方式来处理多处理器, 读写同步的机制. 理解ring buffer是我们理解整个kernel trace的基础. 本文分析的源代码版本为linux kernel 2.6.30, 分析的代码基本位于kernel/trace/ring_buffer.c中.另外,为了描述的方便,下文ring buffer用RB来代替.

11.linux主机名

如何修改linux主机名才能生效?

IP地址 主机名/域名 别名
主机名(相当于windows的计算机名)通常在局域网内使用,通过hosts文件,主机名就被解析到对应ip;
域名通常在internet上使用,但如果本机不想使用internet上的域名解析,这时就可以更改hosts文件,加入自己的域名解析

很多人使用hostname 主机名 来修改,其实这个只是做为暂时的,重启后将恢复到原来的名字.
很多人说修改/etc/hosts文件,其实这个文件里的主机名只是为来提供给dns解析的.如果你用不上dns,那修改这个没用.
127.0.0.1     localhost  localhost.localdomain
::1               localhost         localhost6.localdomain6

ip地址 计算机名(主机名)  域名 别名 这是完整的信息

修改/etc/hosts自动生效

只需要修改主机名,其实是修改这个文件etc/sysconfig/network这个文件里的主机名.
NETWORKING=yes
HOSTNAME=主机名
------------------------------------------------------------------------
记得重启!!!
------------------------------------------------------------------------
完整:
第一步:
#hostname oratest
第二步:
修改/etc/sysconfig/network中的hostname
第三步:
修改/etc/hosts文件

[root@rdo ~]# hostname
rdo
[root@rdo ~]# hostname -f
rdo.test.com
要实现上面的这个效果,需要修改两个文件 编辑 /etc/sysconfig/network ,你需要加入一行,记住HOSTNAME,必须大写。好像需要重启计算机生效
# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rdo
编辑 /etc/hosts,增加一行,即时生效
192.168.178.2 rdo.test.com rdo

主机名,域名,fqdn,url

10.java环境

JAVA程序的运行必须要安装JAVA RUNTIME ,也就是运行所需要的环境;我们可以通过安装JRE 或者JDK 所获得;如果我们只是应用不是开发,只下载JRE 的包就足够;
JDK包里面也包含JRE;本文以JRE的安装为例;JRE中还包括浏览器所需要的JAVA插件;
[root@cache jdk1.6]# tar zxvf jdk1.6.tar.gz
[root@cache jdk1.6]# cd jdk1.6
[root@cache jdk1.6]# cp  -rp jre/ /usr/local/
vi /etc/profile
加入如下3条
JAVA_HOME=/usr/local/jre/
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME
export PATH
export CLASSPATH

source /etc/profile
测试java是否安装成功
[root@cache jre]# java -version
-bash: /usr/local/jre//bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
1、在64系统里执行32位程序如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory,安装下glic即可
yum install glibc.i686
2、error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
yum install zlib.i686
然后就成功安装了java环境了

9.文件访问时间

在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变
时间。也就是说不能知道文件的创建时间。但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建
时间;如果文件创建后,没有被读取过,那么访问时间=创建时间,这个基本不太可能。
与文件相关的几个时间:
  1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。
  2、修改时间,对文件内容修改一次,3个时间都会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。但是通过echo a >>aa 这种方式修改文件,却不会修改访问时间,因为没有访问,就是没有看过文件内容。
  3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。
  stat temp.c

8.关闭tty

CentOS 6.* 开始 TTY 的配置由 /etc/inittab 更改为 /etc/init/start-ttys.conf,执行以下命令可将默认6个 TTY 改为2个:
找到 tty [1-6] 改成 tty [1-2]:

然后,打开/etc/sysconfig/init文件,找到:
ACTIVE_CONSOLES=/dev/tty[1-6]
修改为:
ACTIVE_CONSOLES=/dev/tty[1-2]
重启生效。

[root@localhost ~]# ps aux|grep tty|grep -v grep
root      1139  0.0  0.1   4064   580 tty1     Ss+  09:52   0:00 /sbin/mingetty /dev/tty1
root      1141  0.0  0.1   4064   580 tty2     Ss+  09:52   0:00 /sbin/mingetty /dev/tty2

6.关闭ipv6

在Linux下确认IPv6是否已经被启用,可以从三个方面确定。
1.使用ifconfig查看自己的IP地址是否含有IPv6地址。
2.查看服务监听的IP中是否有IPv6格式的地址。(netstat -tuln)
3.使用lsmod查看ipv6的模块是否被加载。
关闭IPV6

第一种方法
使用vi编辑器,打开/etc/modprobe.conf,在文档中末尾加入如下的两条:
alias net-pf-10 off
alias ipv6 off
sed -i '$a\alias net-pf-10 off \nalias ipv6 off' /etc/modprobe.d/dist.conf
然后重启电脑 Centos 6 关闭ipv6 在 /etc/modprobe.d/dist.conf增加如下内容
alias net-pf-10 off
alias ipv6 off
此步可以禁止ipv6,但重启网络会提示报错FATAL: Module off not found.
解决方法如下:
1. alias ipv6 off 替换成 options ipv6 disable=1
下面这一步在cs6.5-64-minimal下好像没有用,不用这一步也可以
2. /etc/sysconfig/network 新增如下一行
NETWORKING_IPV6=off
3. 关闭iptables的ipv6 ip -6 addr show
ip -4 addr show
第二种方法
vi /etc/modprobe.d/disable-ipv6.conf(名字随便起)(RHEL6.0之后没有了/etc/modprobe.conf这个文件)
输入:install ipv6 /bin/true
[root@manager ~]# cd /etc/modprobe.d/
[root@manager modprobe.d]# cat ipv6.conf
install ipv6 /bin/true
或者直接在dist.conf最后一行加入上面这行

在cs6.5-64-minimal下好像没有用,不用下面这个也可以
vi /etc/sysconfig/network在最后增加一句:IPV6INIT=no
[root@manager ~]# cat /etc/sysconfig/network
NETWORKING=yes
IPV6INIT=no

保存退出,并且重新启动系统。
重启之后可以使用上面的三种方法去验证IPv6支持是否已经被关闭。
开启IPV6
IPv6是默认支持的,所以当你要重新开起IPv6支持时,将/etc/modprobe.conf中的两条指令注释掉就可以了。centos 6.5min-64下是/etc/modprobe.d/dist.conf中修改

不过并不能使得其它程序默认不开启对ipv6的支持

注意:禁用IPV6后,可能会导致某些服务无法启动,比如VSFTP,对于VSFTP,需要修改/etc/vsftpd/vsftpd.conf文件中的listen和listen_ipv6两个选项:
listen=YES
listen_ipv6=NO

lsmod |grep ip
ip6_tables             50177  0
service ip6tables stop
Unloading ip6tables modules:                               [  OK  ]
然后在lsmod|grep ip中见不到ip6了
chkconfig ip6tables --level 35 off
关闭了ipv6 重启也不会再开了

5.linux 输入法

fcitx和scim是目前比较好的输入法, 但是他们的特点不同,fcitx只能输入中文,而scim可以根据需要,利用不同的码表达到中英日…等等各种语言的输入问题。如果你只懂中文,或者只会输 入英文&中文,那么fcitx是一个不错的选择,因为它漂亮,小巧,实用。如果你还需要输入日文或者其他语言,那么你因该安装scim。通 过合理的配置,他能够让你像在windows里面一样,想输入什么语言就能输入什么语言,同一种语言想用什么输入法就用什么输入法。Scim的扩充性很 强,而且比较稳定,我就是选择的是scim.
安装一个新输入法前需要哪些准备?
如果你选择fcitx或者scim,那么我建议你删除系统自带的中文输入法。方法如下:
rpm –qa | grep iiimf | xargs rpm –e
rpm –qa | grep Chinput| xargs rpm –e
如果有哪一行提示rpm: no packages given for erase那表示本身你的系统里面没有该输入法,不用担心,继续往下看就行了。

大家都知道,linux下面比较常用的有两个桌面系统,gnome和kde,这都无所谓,他们其实都是架在X系统之上的。简单的说X系统就是一个最核心,也是最底层的桌面系统,gnome也好,kde也罢,或者其他的什么fvwm之类的,都只不过是X系统和用户之间的另一层软件而已。所以要想达到不管使用什 么桌面系统,都能调入输入法,就是要在X系统启动的时候,让输入法也启动起来,那么这样之后,无论你使用的是gnome还是kde或者其他什么桌面,都能 够调入输入法。因为当轮到他们启动的时候,X系统已经启动好了,输入法已经被系统调入了。那么X系统又是如何启动的呢?让我们从startx开始说起。
无论你用什么桌面系统,都是通过startx启动的,那么startx究竟是什么呢?一个应用程序还是一个脚本文件?为什么它能够启动各种桌面系统,并且能够按照相应的配置文件来设置呢?带着疑问,我在console里面输入whereis startx.
在 找到了存放startx的路径以后,用编辑器打开它发现原来是一个脚本文件。这个脚本文件的内容可能根据发行版不同,会有差异,如果你懂一些shell的 语言,那么你可以尝试看看,不一定要全部看懂,但是你大致看过以后会发现最后有一个xinit的命令,然后跟着一些参数。我尝试在console下面输入 xinit(注意,不要在图形界面下做此操作)
发现图形界面启动拉,但是很丑陋,什么功能都没有,鼠标可以动,还有一个可以输入命令的小窗口。怎 么退出来?ctrl+alt+backspace. 原来如此,startx只是一个脚本,里面通过对一系列配置文件的分析设置,最终利用xinit命令启动图形界面。不管是kde还是gnome,都是在这 个脚本中完成的。那么让我们再打开startx脚本看看里面还做了些什么。你仔细看看,会发现有一个东西很显眼,就是/etc/X11/xinit /xinitrc,这个xinitrc好像很眼熟,在配置输入法的其他贴中总是看到,这里出现了肯定是里面运行了这个脚本。再看其他的一些东西,其实都是利用shell配置出一个xinit启动的参数,用来配置桌面系统用的,不用管它。目前已知的就是startx的时候它会去执行一个/etc/X11 /xinit/xinitrc的脚本,让我们打开来看看里面有什么。
打开一看,其中一段我觉得最有价值,是一个for循环,他依次执行了/etc /X11/xinit/xinitrc.d/下面的所有脚本。你可以耐心的找一下,一定可以发现。那么这个目录里面有些什么内容呢?有一个文件看名字就知道和输入相关,他叫xinput。等等,让我们理一下,是怎么从startx到xinput的。
首先是执行startx这个脚本文件,里面他会执行xinitrc这个脚本,然后xinitrc脚本里面的,叫xinput。OK, 我们继续,打开xinput看看。

4.linux下文件及目录排序问题

1.默认ls按照文件名排序,先大写再小写
2.按大小排序
du -ab --max-depth=1|sort -n 以字节从小到大排序查询当前目录下的子目录与文件
3.按时间排序
ls -alt # 按修改时间排序
ls -alrt # 按修改时间反向排序
首先,ls --help查看ls相关的与时间排序相关的参数:
> ls --help|grep -E "time|sort"
如果不指定 -cftuSUX 或 --sort 任何一个选项,则根据字母大小排序。
  -c                         配合 -lt:根据 ctime 排序及显示 ctime (文件
                               配合 -l:显示 ctime 但根据名称排序
                               否则:根据 ctime 排序
  -f                         do not sort, enable -aU, disable -lst
      --full-time            like -l --time-style=full-iso
  -r, --reverse              reverse order while sorting
  -S                         sort by file size
      --sort=WORD            extension -X, none -U, size -S, time -t,
                             version -v, status -c, time -t, atime -u,
      --time=WORD            with -l, show time as WORD instead of modification
                             time: atime, access, use, ctime or status; use
                             specified time as sort key if --sort=time
      --time-style=STYLE     with -l, show times using style STYLE:
  -t                         sort by modification time
可以看到-c按创建时间ctime排序,-t按修改时间mtime排序,默认都是将最近的文件排在前面,
-r可以实现逆序排序,即将最近的文件排在后面,--sort=WORD可订制排序键值。
 
常用组合如下:
> ls -alt # 按修改时间排序
> ls --sort=time -la # 等价于> ls -alt
> ls -alc # 按创建时间排序
> ls -alu # 按访问时间排序
# 以上均可使用-r实现逆序排序
> ls -alrt # 按修改时间排序
> ls --sort=time -lra # 等价于> ls -alrt
> ls -alrc # 按创建时间排序
> ls -alru # 按访问时间排序
# 也可以查找指定类型的文件,然后指定按时间排序
> find . -name *.php|xargs ls -alt

3.Linux下which、whereis、locate、find 命令的区别

which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件
[root@localhost /]# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
将和ls文件相关的文件都查找出来,或者只找二进制(-b选项),源码(-s选项)等
whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历整个文件系统来查找,效率自然会很高。但该数据库并不实时更新,是定期的
locate查找包含特定模式的路径名

[root@localhost mlocate]# locate --statistics
Database /var/lib/mlocate/mlocate.db:
        3,379 directories
        28,041 files
        1,308,211 bytes in file names
        564,520 bytes used to store database
locate命令其实是“find
-name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含
有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可
以在使用locate之前,先使用updatedb命令,手动更新数据库。
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
find遍历整个文件系统来查找

2./dev/shm

Linux默认(CentOS)/dev/shm分区的大小是系统物理内存的50%, 虽说使用/dev/shm对文件操作的效率会高很多,
但是目前各发行软件中却很少有使用它的(除了前面提到的Oracle), 可以通过ls /dev/shm查看下面是否有文件, 如果没有就说明当前系统并没有使用该设备.

1.Error, some other host already uses address

事件:
     今天帮客户重装完系统后,刚开始网络是正常的,IP是在安装的过程中配置好。但修改ifcfg-eth0文件后重启网络服务时,就出现"Error, some other host already uses address"的报错,并且网络不通。尝试过多种方法,包括重新安装系统,最终问题还是一样。
解决方法如下:
     vi /etc/sysconfig/network-scripts/ifup-eth
         注解掉下面的几行内容,然后再执行service network restart
    #if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${IPADDR} ; then  
    #   echo {1}quot;Error, some other host already uses address ${IPADDR}."  
    #   exit 1  
    #fi

一般的Linux发行版默认的终端都是16色的,但事实上几乎所有的终端都支持256色终端。只需要把环境变量TERM设
为xterm-256color(xterm算是终端模拟器的一个标准,Gnome
Terminal用gnome-256color,Konsole可以用konsole-256color)。