linux知识点

 

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 

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

hostname xxx

vi /etc/sysconfig/network



ifconfig xxx

vi /etc/sysconfig/network-scripts/ifcfg-eth0



sysctl 

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all



ulimit -n 65535

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 [email protected]:/mnt/yidong1/
不同机器拷贝可以显示进度条,即使不带“-v”参数也可以显示进度条
#scp -v /mnt/yidong2/full20100526.tar.gz [email protected]:/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 [email protected]:/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.

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-8>

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,  5 Nov 2014 16:54:01 +0800 (CST)

Status: RO



/var/prtg/scripts/com: line 3: asterisk: command not found



Auto-Submitted: auto-generated

X-Cron-Env: <LANG=en_US.UTF-8>

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,  5 Nov 2014 17:04:01 +0800 (CST)

Status: RO



asterisk: error while loading shared libraries: libocilib.so.3: 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主机名才能生效?
很多人使用hostname 主机名 来修改,其实这个只是做为暂时的,重启后将恢复到原来的名字.
很多人说修改/etc/hosts文件,其实这个文件里的主机名只是为来提供给dns解析的.如果你用不上dns,只需要修改主机名,那修改这个没用.
127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
ip地址 域名 计算机名(主机名) 这是完整的信息

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

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

不过并不能使得其它程序默认不开启对ipv6的支持
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)