存档

‘Linux系统教程’ 分类的存档

NFS文件系统详解以及安全设置

2017年8月10日 评论已被关闭

## 1、什么是NFS
The Network File System(NFS),网络文件系统。它允许挂载一个远程主机的硬盘分区,就相于使用本地硬盘一样.
## 2、搭建一个NFS服务器。
### 2.1.1、安装。
#yum -y install nfs*
### 2.1.2、nfs配置文件
nfs主要有三个配置文件/etc/exports,/etc/hosts.allow,/etc/hosts.deny。通常只需要编辑一个/etc/exports文件就可以让nfs工作。但是它不够安全,要用hosts.allow和hosts.deny文件来限制一些客户的访问。我先讲解/etc/exports文件配置,稍后再来讲解/etc/hosts.allow,/etc/hosts.deny两个文件的配置。
### 2.1.3、/etc/exports
这个文件包含一个条目列表,每个条目表示一个卷的共享以及是如何共享的。例如文件中有个条目是:
/usr/local/src 192.168.1.252(rw,sync,no_root_squash)
说明:/usr/local/src: 是要共享的目录,在/usr/local/src下的所有子目录和文件也将被共享。
192.168.1.252:客户机的ip能够访问/usr/local/src目录。
(rw):设置客户机对/home目录的权限,可读可写,(ro)为只读权限。
启动服务:
# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]

### 2.1.4、解释/etc/hosts.allow和/etc/hosts.deny配置文件

这两个文件是指定网络上哪些计算机可以使用nfs服务,该文件的每一个条目录,指定一个服务和一个或一组主机。当一个主机请求nfs服务,它会进行以下操作:
首先会去检查hosts.allow文件是否匹配里面的条目,如果匹配,则允许访问nsf服务。
如果不匹配hosts.allow文件中的条目,服务将会去检查hosts.deny文件,如果匹配,则拒绝访问。
如果客户端不匹配两个文件中的条目,则允许访问。
配置/etc/hosts.deny禁止所有用户访nfs的守护进程。只有hosts.allow文件指定的ip才能访问。内容如下:
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
配置/etc/hosts.allow文件允许192.168.1.252访问nfs.
格式:
service: host [or network/netmask] , host [or network/netmask]
添加以下内容:
portmap: 192.168.1.252
lockd: 192.168.1.252
rquotad: 192.168.1.252
mountd: 192.168.1.252
statd: 192.168.1.252

## 3、客户端配置
在192.168.1.252上执行
#mount -t nfs 192.168.1.251:/usr/local/src /data/src
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.6G 3.5G 2.9G 56% /
/dev/sda1 190M 17M 164M 10% /boot
tmpfs 62M 0 62M 0% /dev/shm
/dev/hdc 2.9G 2.9G 0 100% /mnt/cdrom
192.168.1.251:/usr/local/src
7.5G 3.0G 4.1G 43% /data/src
nfs文件系统成功挂载到客户端。

分类: Linux系统管理 标签:

部署tinyproxy代理服务

2017年7月24日 评论已被关闭

线上需要一个https的透明代理,开始打算用nginx,调试了一段时间发现配置较复杂且没有成功。后来用的tinyproxy做的透明代理。安装配置过程就是下载、解压、编译、安装、配置、启动一波流:

安装依赖

yum install asciidoc

下载

wget https://github.com/tinyproxy/tinyproxy/releases/download/1.8.4/tinyproxy-1.8.4.tar.gz -O tinyproxy-1.8.4.tar.gz

解压

tar xvfz tinyproxy.1.8.4.tar.gz

编译配置

./configure –enable-transparent –prifix=/usr/local/tinyproxy

更多的编译选项可以参考源码目录的README文件,部分说明如下:

./configure
make

make install

in the top level directory to compile and install Tinyproxy. There are
additional command line arguments you can supply to configure. They
include:

--enable-debug        If you would like to turn on full
            debugging support
--enable-xtinyproxy    Compile in support for the XTinyproxy
            header, which is sent to any web
            server in your domain.
--enable-filter        Allows Tinyproxy to filter out certain
            domains and URLs.
--enable-upstream    Enable support for proxying connections
            through another proxy server.
--enable-transparent
            Allow Tinyproxy to be used as a
            transparent proxy daemon
--enable-static        Compile a static version of Tinyproxy

    --with-stathost=HOST    Set the default name of the stats host

Support

编译

make

安装

make install
修改配置文件一般需要指定用户、用户组、端口、访问IP段,当然这些都有默认值,然后启动程序和测试。

启动程序:

/usr/local/tinyproxy/sbin/tinyproxy -c /usr/local/tinyproxy/etc/tinyproxy.conf

测试代理节点是否生效(假设代理程序安装在10.10.10.10的机器,监听的是8888端口):

curl url –proxy 10.10.10.10:8888

如果是https代理加 -k 参数

curl url –proxy 10.10.10.10:8888 -k
关于配置文件的一点补充:

添加多段IP地址

Allow 10.27.80.0/24
Allow 11.65.48.0/24
Allow 18.90.12.145

添加head信息,https的代理不能添加(一条信息一条记录和ip访问限制设置一样)

AddHeader "Referer" "http://www.baidu.com"

分类: Linux系统管理 标签:

linux screen 命令详解

2017年4月28日 评论已被关闭

http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

一、背景

系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

二、简介

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

  • 会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
  • 多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
  • 会话共享
Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

GNU’s Screen 官方站点:http://www.gnu.org/software/screen/

三、语法

# screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

参数说明

-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或–list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

四、常用screen参数

screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
C-a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> Time,显示当前时间,和系统的 load
C-a k -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上

五、使用 screen

5.1 安装screen

流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。

[root@TS-DEV ~]# yum install screen
[root@TS-DEV ~]# rpm -qa|grep screen
screen-4.0.3-4.el5
[root@TS-DEV ~]#

5.2 创建一个新的窗口

安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字,实践上推荐为每个screen会话取一个名字,方便分辨:

[root@TS-DEV ~]# screen -S david

screen启动后,会创建第一个窗口,也就是窗口No. 0,并在其中打开一个系统默认的shell,一般都会是bash。所以你敲入命令screen之后,会立刻又返回到命令提示符,仿佛什么也没有发生似的,其实你已经进入Screen的世界了。当然,也可以在screen命令之后加入你喜欢的参数,使之直接打开你指定的程序,例如:

[root@TS-DEV ~]# screen vi david.txt

screen创建一个执行vi david.txt的单窗口会话,退出vi 将退出该窗口/会话。

5.3 查看窗口和窗口名称

打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,这个列表会列在标题栏里。窗口列表的样子一般是这样:

0$ bash  1-$ bash  2*$ bash

这个例子中我开启了三个窗口,其中*号表示当前位于窗口2,-号表示上一次切换窗口时位于窗口1。

Screen默认会为窗口命名为编号和窗口中运行程序名的组合,上面的例子中窗口都是默认名字。练习了上面查看窗口的方法,你可能就希望各个窗口可以有不同的名字以方便区分了。可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认。

5.4 会话分离与恢复

你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/david.txt文件:

[root@TS-DEV ~]# screen vi /tmp/david.txt

之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d,Screen会给出detached提示:

暂时中断会话

半个小时之后回来了,找到该screen会话:

[root@TS-DEV ~]# screen -ls

重新连接会话:

[root@TS-DEV ~]# screen -r 12865

一切都在。

当然,如果你在另一台机器上没有分离一个Screen会话,就无从恢复会话了。

这时可以使用下面命令强制将这个会话从它所在的终端分离,转移到新的终端上来:

5.5 清除dead 会话

如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:

5.6 关闭或杀死窗口

正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。

如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。

除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。

六、screen 高级应用 

6.1 会话共享

还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:

[root@TS-DEV ~]# screen -x

这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。

6.2 会话锁定与解锁

Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。快捷键C-a q可以解锁一个会话。

也可以使用C-a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。

6.3 发送命令到screen会话

在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:

[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com

这个命令在一个叫做sandy的screen会话中创建一个新窗口,并在其中运行ping命令。

6.4 屏幕分割

现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键C-a S将显示器水平分割,Screen 4.00.03版本以后,也支持垂直分屏,快捷键是C-a |。分屏以后,可以使用C-a <tab>在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。

可以用C-a X快捷键关闭当前焦点所在的屏幕区块,也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。

6.5 C/P模式和操作

screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。使用快捷键C-a <Esc>或者C-a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。其实在这个模式下有很多类似vi的操作,譬如使用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。

一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后移动光标到结尾位置,按下空格设置第二个标记,同时会将两个标记之间的部分储存在copy/paste buffer中,并退出copy/paste模式。在正常模式下,可以使用快捷键C-a ]将储存在buffer中的内容粘贴到当前窗口。

6.6 更多screen功能

同大多数UNIX程序一样,GNU Screen提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc和$HOME/.screenrc中指定更多,例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定screen配置文件。

以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg…)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。

useradd

2017年2月13日 评论已被关闭

useradd 

http://sunwj.blog.51cto.com/5969096/1652978

【功能说明】:

create a new user or update default new user information   #新建用户或者更新用户信息

【语法格式】:

useradd [options] LOGIN

 

【选项参数】:

参数 说明
-c, –comment COMMENT 添加用户备注内容,对应/etc/passwd的第五列
-d, –home-dir HOME_DIR 制定用户家目录,而不使用默认值
-e, –expiredate EXPIRE_DATE 设置用户账号失效日期,格式为“YYYY-MM-DD”
-g, –gid GROUP 指定用户的初始用户组
-G, –groups GROUPS 指定用户的次要用户组
-m, –create-home 强制!要创建用户主文件夹(一般账号默认值)
-M, –no-create-home 强制!不要创建用户主文件夹(系统账号默认值)
-N, –no-user-group 不创建以用户名为名称的用户组
-r, –system 创建一个系统账号
-s, –shell SHELL 指定用户的shell,默认为/bin/bash
-u, –uid UID 指定用户的UID

【实践操作】:

1、创建用户useraa ,并添加说明内容

[root@Mode /]# useradd -c “boss” useraa

[root@Mode /]# tail -n 5 /etc/passwd

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

sun:x:500:500::/home/sun:/bin/bash

useraa:x:501:501:boss:/home/useraa:/bin/bash

2、创建用户userdd,并指定用户家目录为/dd/ 。 该目录无需事先创建

[root@Mode /]# useradd -d /dd/ userdd

[root@Mode /]# tail -n 3 /etc/passwd

userdd:x:504:504::/dd/:/bin/bash

useree:x:505:505::/home/useree:/bin/bash

userff:x:506:506::/home/userff:/bin/bash

3、创建用户useree,设置用户明天失效 。 下图中的16573为距离1970年1月1日,还有多少天账号失效

[root@Mode /]# date

Sun May 17 19:54:15 CST 2015

[root@Mode /]# useradd -e 2015-05-18 useree

[root@Mode /]# tail -n 2 /etc/shadow

userdd:!!:16572:0:99999:7:::

useree:!!:16572:0:99999:7::16573:

4、创建用户usergg,并指定初始用户组为groupa,次要用户组为groupb

[root@Mode /]# useradd  -g groupa -G groupb usergg

[root@Mode /]# id usergg

uid=507(usergg) gid=506(groupa) groups=506(groupa),507(groupb)

5、创建用户userhh,但不创建与其用户名相同的组 。 不过用户还是会归属于一个默认的组

[root@Mode /]# useradd -N userhh

[root@Mode /]# id userhh

uid=508(userhh) gid=100(users) groups=100(users)

6、创建系统账号userii。下面可看到该用户的uid 小于500,而且/home目录里面也没有该用户的主目录

[root@Mode /]# id userii

uid=498(userii) gid=498(userii) groups=498(userii)

[root@Mode /]# tail -n 2 /etc/passwd

userhh:x:508:100::/home/userhh:/bin/bash

userii:x:498:498::/home/userii:/bin/bash

[root@Mode /]# ls /home

sun  useraa  useree  userff  usergg  userhh

7、创建用户userjj,且不允许该账号登录系统(指定该用户的shell为/sbin/nologin)

[root@Mode /]# useradd -s /sbin/nologin userjj

[root@Mode /]# su – useraa

[useraa@Mode ~]$ exit

logout

[root@Mode /]# su – userjj

This account is currently not available.

[root@Mode /]#

[root@Mode /]# tail -n 2 /etc/passwd

userii:x:498:498::/home/userii:/bin/bash

userjj:x:509:509::/home/userjj:/sbin/nologin

8、创建用户userboss,指定UID为1000,初始用户组为 groupb ,次要用户组为 groupa ,添加用户说明,而且不创建与用户名同名的组

[root@Mode /]# useradd -u 1000 -g groupb -G groupa -N -c “this account is for boss” userboss

[root@Mode /]#

[root@Mode /]# id userboss

uid=1000(userboss) gid=507(groupb) groups=507(groupb),506(groupa)

[root@Mode /]#

[root@Mode /]# tail -n 1 /etc/passwd

userboss:x:1000:507:this account is for boss:/home/userboss:/bin/bash

分类: Linux命令大全 标签:

find 实例分析

2017年2月5日 评论已被关闭

find 实例分析

要在/usr/linux中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR”,最后打印出所有包含”SYSCALL_VECTOR”的文件名,有以下几种方法实现

find /usr/linux -name “*.h” | xargs -n50 grep SYSCALL_VECTOR

grep SYSCALL_VECTOR /usr/linux/*.h | cut -d’:’ -f1 | uniq > filename

find /usr/linux -name “*.h” -exec grep “SYSCALL_VECTOR” {} \; -print

我用find / -name filename| rm -rf,不成功,请问为什么不成功?

find / -name filename -exec rm -rf {} \;

find . -name filename |rm -rf试一下{} 表示你找出来的结果。

\; 则相当于“宪法”,没什么说头,就是这么规定的,在 -exec 后面需要一个表示该命令终结的的符号。可以在 man find 中找到答案。

要让rm识别find的结果,如下:

find / -name filename |xargs rm -rf

之所以find . -name filename |rm -rf不通过,是因为rm命令不接受从标准输入传过来的指令

查找含特定字符串的文件

例如查找当前目录下含有”the string you want find…”字符串的文件:

$find . -type f -exec grep “the string you want find…” {} ; -print

从根目录开始查tmpfile,一旦查到马上删除

find / -name “tmpfile” -exec rm {} \;

find 的perm问题

请问一下以下命令什么意思?关键是那个数字前的-,其他都还知道

find -name “.*” -perm -007

我知道

find -name “.*” -perm 755

这个是用来查找权限位为755的隐藏文件

噢,对了还有,我上边的命令都省略了find的pathname参数 find默认是查找当前工作目录的吗?

如果我用 -ok 替代 -exec, 那么还需要加上 {} \; 吗?

这个已经清楚,仍然需要,因为 -ok 只是 -exec 的提示模式,它只是多了一个确认操作的步骤,刚才没有读懂那几句E文的意思 呵呵 不好意思

-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~

解释解释?

find -name “.*” -perm -007 和 find -name “.*” -perm 777 有区别吗?

-007是怎么来得呢?

不过有一个问题

我用 find . -perm -100 会列出当前目录 . , 这是为什么呢?

下面引用由explover在 2002/10/01 06:15am 发表的内容:

-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~

-007是查找含其它用户(不同组,非属主)可读,写,执行的文件.并不一定要同组可读写,-是指最少权限为007.

下面引用由一颗小白菜在 2002/10/01 10:16am 发表的内容:

OK了, 呵呵

不过有一个问题

我用 find . -perm -100 会列出当前目录 . , 这是为什么呢?

这种方法不会准确的找出目录的. -100是指权限至少是属主可运行.

在unix系统下,你可以拥有对目录文件的执行权你才可以进入一个目录.这便是目录文件被列出的原因.

find . -perm -001 -print找到往往是目录文件.

我的意思当然不是使用这种方法来找目录,只不过不明白其中的 -100 意义了

那以此类推,是不是 -010是指权限至少是owner同组可执行的吗?也就是说其实这里的010和-是分开的,-表示一个至少的意思,而且010才是真正用来描述权限位的?

这样子就明白了 谢谢你噢

 

将find出来的东西拷到另一个地方?

find *.c -exec cp ‘{}’ /tmp ‘;’

如果有特殊文件,可以用cpio,也可以用这样的语法:

find dir -name filename -print | cpio -pdv newdir

 

找出磁盘中某个大小范围内的文件

比如要查找磁盘中大于3M的文件:

find . -size +3000k -exec ls -ld {} ;

 

如何用find查找某一天更改的文件?

可以使用这一行命令来实现:

A=`find ~ -print` | ls -l –full-time $A 2>/dev/null | grep “Jun 27″ | grep 1998

 

使用find 命令查找某个时间段的shell怎么写。比如11点到12点的。thanks

创建一个脚本judgetime,内容如下:

ls -l $*|awk ‘{split($8,hour,”:”);if((hour[1]>23 || hour[1] < 1)&&hour[1]<24)print}’

到要查找的目录下,运行

find ./ -name “*” -exec judgetime {} \;

注意时间格式为24小时制。

thank you ,如果我要精确到分钟呢

touch -t 04241112 starttemp #精确到12分钟

touch -t 04241220 endtemp #截止到12点20

find [dir] -newer starttemp -a ! -newer endtemp -exec ls -l {} \;

newer?

那昨天12:10文件如何呢?

每天执行的时候,用当天的日期和时间戳替换一下不就行了吗?

我不知道他是不是把所有的11:00~12:00的都找出来,是不是只执行一次还是每天都执行?

这种情况俺猜想是自己的东西放在哪忘了,只记得当时是深夜了。

有道理!

不愧是斑竹!

不光知道怎么解决问题,还知道在什么情况下出现这类问题,佩服佩服!

问题又出现了。创建这个文件的时候。本来应该是时间的一栏现在写上了2002,而不是12:00.

等到12:00过了吧!

 

删除指定日期的文件

find ./ -name 文件名 -exec rm -f {} \;

例:删除当前30天内没用过的文件,用如下命令:

find / -atime +30 -exec rm -f {} \;

我自己试着写了一小段SHELL,也用ll ,grep, rm 几个命令,用起来还差强人意。

对过滤出来的文件名列表中用了一个FOR语句,再执行rm 。现在我想把这段SHELL 扩展一下让它每天定时运行将 n 天前的文件删掉,有没有人能给我一些提示,谢谢!

还有个问题,对于前面那位朋友提到的”find / -atime +30 -exec rm -f {} \;

“方法,我很早就试过几次,不过好像都不太对,参数 -atime n 是查找n天前被访问过的文件,我不明白的是这里的时间参照点是什么,以及这个n天是怎么计算的。

问 题二、对于”ll |cut -f 1” 这个命令我是不是用错了,我只想取出 ll 中列出的文件名,但用cut -f 命令做不到 ,我只好换用 ll |cut -c 59- 这种方式得到我要的文件名,but it’s a pool idear !我也试过用awk ,好像也不对,看看大家可不可以给我一些小小的提醒,TKS SO MUCH

问题三、如何改变 I结点 的日期格式 我现在的系统显示的格式是:

-rw-r—– 1 msahz01 users 2253 2002年2月 2日 poheader.i

我想把这换成

-rw-rw-rw- 1 house users 2193 Apr 19 2001 hkdisp.p

如何才能做到这点?

awk 应该可以

ll | awk ‘{print $9}’

删除多少天之前的文件

find /yourpath -mtime +31 -exec rm {} \;

find /yourpath -mtime +366 -exec rm {} \;

 

find中, -ctime, -mtime及其-atime有何区别

 

请问 -ctime 和 -mtime 有什么关系 ?

如果父目录的 ctime 改变, 那它下面的文件的 ctime 就会自动都改了吗 ?

-ctime 和 -mtime ,-atime 这些信息是存在哪儿呢 ?

 

我用 -mtime -1 找到了新建或改的文件.

但怎样才能找到一天内 mv 来的文件呢( 它们的时间是原有的时间,早于一天 ) ?

 

用-newer选项啊。

你可以先touch一个你想要的时间的文件如下:

$ touch -t 08190800 test

$ ls -l test

-rw-r–r– 1 dba other 0 Aug 19 08:00 test

然后

$ find . -newer test -print

.

./.sh_history

$ ls -l .sh_history

-rw——- 1 dba other 154 Aug 20 17:39 .sh_history

 

用touch可以写出你想要的任何时间的文件,然后用-newer ,! -newer选项即可成功。

 

1.ctime含inode信息修改的时间.mtime只指文件内容建立或修改的时间.

2 不会.

3.这些信息应该是存在文件系统的超级块里.

 

我查了书 -ctime 是指 inode 的改变(或称文件的状态改变).

请问 inode 存了哪些信息 ?

做了些小测试,-mtime 改, -ctime 一定也改.

改文件名, -ctime 也会改.

谁能回答 i-node 存了哪些东西 ?

 

vi /usr/include/sys/inode.h

 

班主,我不能 access /usr/include/sys/inode.h .

摘书如下:

Directories contain directory entries. Each entry contains a file or subdirectory name and an index node reference number (i-node number). To increase speed and enhance use of disk space, the data in a file is stored at various locations in the computer’s memory. The i-node contains the addresses used to locate all the scattered blocks of data associated with a file. The i-node also records other information about the file including time of modification and access, access modes, number of links, file owner, and file type.

可我发现 -atime 改了, -ctime 还没改. why ?

( 我先 cat 一个 ASCII 文件,再用 -atime -1 有它用 -ctime -1 居然没有它.)

着岂不跟 inode 信息改变, ctime 就改矛盾吗?

 

我不同意你贴出来的那段文章,正如我提到的那样,atime,ctime,mtime是放到超级块里,在sco unix下是一种叫stat的结构.(stat_32),不同的系统文件系统可能不同.

sco 下inode的结构如下:

 

typedef struct inode

{

struct inode *i_forw; /* inode hash chain */

struct inode *i_back; /* ‘’ */

struct inode *av_forw; /* freelist chain */

struct inode *av_back; /* ‘’ */

int *i_fsptr; /* “typeless” pointer to fs dependent */

ino32_t i_number; /* i number, 1-to-1 with dev address */

ushort i_ftype; /* file type = IFDIR, IFREG, etc. */

short i_fstyp; /* File system type */

off_t i_size; /* size of file */

ushort i_uid; /* owner */

ushort i_gid; /* group of owner */

ushort i_flag;

ushort i_want; /* i_flag extension to avoid MP races */

ushort i_count; /* reference count */

short i_nlink; /* directory entries */

dev_t i_rdev; /* Raw device number */

#define i_namtype i_rdev /* i_ftype==IFNAM subtype */

dev_t i_dev; /* device where inode resides */

struct mount *i_mton;/* ptr to mount table entry that */

/* this directory is mounted on */

struct region *i_rp; /* ptr to shared region if any */

struct stdata *i_sp; /* ptr to associated stream */

struct iisem *isem; /* ptr to XENIX semaphores */

struct iisd *isd; /* ptr to XENIX shared data */

} i_un;

#define i_mnton i_un.i_mton /* i_ftype==IFDIR IMOUNT */

#define i_rptr i_un.i_rp /* i_ftype==IFREG || i_ftype==IFBLK */

#define i_sptr i_un.i_sp /* i_ftype==IFCHR || i_ftype==IFIFO */

#define i_sem i_un.isem /* i_ftype==IFNAM && i_namtype==IFSEM */

#define i_sd i_un.isd /* i_ftype==IFNAM && i_namtype==IFSHD */

 

struct fstypsw *i_fstypp; /* ptr to file system switch FSPTR */

long *i_filocks; /* pointer to filock (structure) list */

unsigned long i_mappages; /* number of pages currently cached */

unsigned long i_vcode; /* read-ahead block save (NFS) */

short i_wcnt; /* write open count or ITEXT count */

struct lockb i_cilock; /* tas to synchronize i_flag changes */

ushort i_rdlocks; /* count of non-exclusive lockers */

} inode_t;

 

所以,访问一个文件不能改变inode信息.

使用chown, chgrp, chmod命令可以很好的比较mtime和ctime

chown改变一个文件的属主,用ctime可以找到,用mtime便找不到.

试试看.

多谢斑竹! 我是在 Solaris 上面试的.我是对 -ctime 不明白.

试的结果如下:

修改文件,-mtime 改了, -ctime 也会改.

访问文件,-atime 改了, -ctime 没变.

chown, chgrp, chmod,mv, 都会使 -ctime 改变,但不影响 -atime 和 -mtime.

touch 可以改 -mtime and/or -atime,但 touch -a 只改访问时间时,-ctime也改了.

touch -m 改修改时间时,-ctime当然也改了.

好象还有别的很多东西可以令 -ctime 改变, 搞不清楚.

有什么方法可以显示 -mtime,atime,ctime 吗?

可以用 -ctime 来实现对目录的增量文件进行备份或 transfer 吗 ?

多谢!

 

没有什么工具显示,(可能是俺不知道)

把下面程序里的st_mtime换成st_ctime,或st_atime便可以得到你要的了.

#include

int

main (int argc, char **argv)

{

struct stat buf;

char date[80];

char fname[80];

printf(“Enter filename (with full path) to check mtime : “);

scanf(“%s”,fname);

stat(fname, &buf);

printf (“mtime (in sec) of %s = %ld\n”, fname, buf.st_mtime);

strcpy(date, ctime((time_t *)&(buf.st_mtime)));

printf (“mtime (in date) of %s = %s\n”, fname, date);

}

 

至于文件备份,有什么不可以的么?

 

mtime ls -l 最近修改文件内容的时间

atime ls -lu 最近访问文件的时间

ctime ls -li 最近文件有所改变的状态 ,如文件修改,属性\属主 改变 ,节点 ,链接变化等 ,应该是不拘泥只是时间前后的改变

 

俺看了ls的帮助,以为只是按ctime或atime排序,显示的时间还是mtime.

 

仔细比较了一下,ayhan说的是对的.谢谢ayhan.

 

多谢 ahyan 提示 ! 我在 Solaris 上试过如下:

mtime 用 ls -l 看到

atime 用 ls -lu 看到

ctime 用 ls -lc 看到. (ls -li 只有 inode number)

摘书如下:

-c Uses time of last modification of the i-node (file

created, mode changed, and so forth) for sorting (-t)

or printing (-l or -n).

-u Uses time of last access instead of last modification

for sorting (with the -t option) or printing (with the

-l option).

-i For each file, prints the i-node number in the first

column of the report.

分类: Linux命令大全 标签:

Linux — logrotate 切割 Nginx

2017年2月4日 评论已被关闭

Linux — logrotate 切割 Nginx
http://blog.sina.com.cn/s/blog_5f54f0be0101h6y8.html
logrotate是作为linux系统日志的管理工具存在。他可以轮换,压缩,邮件系统日志文件。
它默认的配置文件在:
/etc/logrotate.conf
/etc/logrotate.d/

配置文件介绍:
========================
logrotate.conf 才主要的配置文件, logrotate.d 是一个目录, 该目录里的所有文件都会被主动的读入 /etc/logrotate.conf 中执行。
另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以 /etc/logrotate.conf 这个文件的设定来作为默认值。

切割介绍:
————————–
当第一次执行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存日志。而第二次执行之后, messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存日志!如果我们仅设定保留三个日志而已的话,那么执行第四次时,则 messages.3 这个档案就会被删除,并由后面的较新的保存日志所取代!也就是会保存最新的几个日志。

当然,这个得根据配置文件中的 dateext 参数来判定:

先看 logrotate.conf 的内容:

vim /etc/logrotate.conf
# 底下的设定是 “logrotate 的默认值” ,如果別的文件设定了其他的值,
# 就会以其它文件的设定为主

weekly <==默认一周执行一次 rotate 工作
rotate 4 <==保留多少个日志文件.默认保留四个.
create <==创建新的文件.因为日志被改名,因此要创建一个新的来继续存储之前的日志
dateext <==文件后缀是日期格式,也就是切割后文件是:xxx.log-20131216.gz 这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1 这种格式
#compress <==是否压缩日志.

include /etc/logrotate.d
# 将 /etc/logrotate.d/ 目录中的所有文件都加载进来

/var/log/wtmp { <==仅针对 /var/log/wtmp 所设定的参数
monthly <==每月一次切割,取代默认的一周
minsize 1M <==文件大小超过 1M 后才会切割
create 0664 root utmp <==指定新建的日志文件权限以及所属用户和组
rotate 1 <==只保留一个日志.
}
# 这个 wtmp 可记录用户登录系统及系统重启的时间
# 因为有 minsize 的参数,因此不见得每个月一定会执行一次喔.要看文件大小。

由这个文件的设定我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录,虽然我们可以将所有的配置都给他写入 /etc/logrotate.conf ,但是这样一来这个文件就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的设定也似乎不太合理~
所以,如果独立出来一个目录,那么每个要切割日志的服务, 就可以独自成为一个文件,并且放置到 /etc/logrotate.d/ 当中

切割案例:syslog
============================

下面我们再以 /etc/logrotate.d/syslog 这个切割 syslog 服务的配置文件,来看看该如何设定他的 rotate 呢?

[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
在上面的语法当中,我们知道正确的 logrotate 的写法为:

日志文件:
被处理的日志绝对路径.使用空格符分隔多个文件名;
执行脚本:
可调用外部指令来进行额外的命令,这个设定需与 sharedscripts …. endscript 设定合用才行。命令介绍:
prerotate:在启动 logrotate 之前进行的指令,例如修改文件的属性等动作;
postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务!
prerotate 与 postrotate 对于已加上特殊属性的文件处理上面,是相当重要的执行程序!

那么 /etc/logrotate.d/syslog 内设定的六个文件的切割功能就变成了:

1.该设定只对 /var/log/ 内的 messages, secure, maillog, spooler, boot.log, cron 有效;
2.日志切割每周一次、保留四个、且切割下来的日志文件不进行压缩(未更改预设值);
3.切割完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd

假设我们有针对 /var/log/messages 这个文件增加 chattr +a 的属性时, 依据 logrotate 的工作原理,我们知道,这个 /var/log/messages 将会被更名成为 /var/log/messages.1 才是。但是由于加上这个 +a 的参数啊,所以更名是不可能成功的! 那怎么办呢?
就利用 prerotate 与 postrotate 来进行日志文件切割前、后所需要作的动作!

[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/messages
endscript
}
看到否?就是先给他去掉 a 这个属性,让日志文件 /var/log/messages 可以进行切割的动作, 然后执行了切割之后,再给他加入这个属性!请特别留意的是,那个 /bin/kill -HUP … 的意义,这一行的目的在于将系统的 syslogd 重新以其参数档 (syslog.conf) 的资料载入一次!也可以想成是 reload 的意思啦!
由于我们建立了一个新的空的纪录档,如果不执行此一行来重新启动服务的话, 那么记录的时候将会发生错误呦!

切割案例:Nginx
============================

在 /etc/logrotate.d 新建 nginx

/usr/local/nginx/logs/*.log {
daily
rotate 5
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}

就是把日志切割后重启 nginx

Nginx 日志切割还可以这样:http://blog.sina.com.cn/s/blog_5f54f0be0100zaza.html
通过自定义的 shell 脚本去做.\
实际测试 logrotate
============================
[root@www ~]# logrotate [-vf] logfile选项与参数:
v: 启动显示模式,会显示 logrotate 执行的过程
f: 不论是否符合配置文件地规则,强制每个日志都进行 rotate 的动作

范例一: 执行一次 logrotate 看看整个流程
[root@www ~]# logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf <==读取主要设定档
including /etc/logrotate.d <==加载外部的设定
reading config file acpid <==就是外部设定啊!….(中间省略)….
Handling 21 logs <==共有 21 个日志被记录….(中间省略)….
rotating pattern: /var/log/messages /var/log/secure /var/log/maillog \
/var/log/spooler /var/log/boot.log /var/log/cron weekly (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/messages <==开始处理 messages
log does not need rotating <==因为时间未到,不需要更动!….(底下省略)….
范例二:强制进行 logrotate 的动作
[root@www ~]# logrotate -vf /etc/logrotate.conf….(前面省略)….rotating log /var/log/messages, log->rotateCount is 4
renaming /var/log/messages.4 to /var/log/messages.5 (rotatecount 4, logstart 1, i 4),
renaming /var/log/messages.3 to /var/log/messages.4 (rotatecount 4, logstart 1, i 3),
renaming /var/log/messages.2 to /var/log/messages.3 (rotatecount 4, logstart 1, i 2),
renaming /var/log/messages.1 to /var/log/messages.2 (rotatecount 4, logstart 1, i 1),
renaming /var/log/messages.0 to /var/log/messages.1 (rotatecount 4, logstart 1, i 0),
old log /var/log/messages.0 does not exist….(底下省略)….# 看到否?整个 rotate 的动作就是这样一步一步进行的~
[root@www ~]# ll /var/log/messages*; lsattr /var/log/messages
-rw——- 1 root root 63 Apr 8 15:19 /var/log/messages
-rw——- 1 root root 670 Apr 8 14:22 /var/log/messages.1
-rw——- 1 root root 24984 Apr 1 19:26 /var/log/me

分类: Linux工具使用 标签:

grep 搜索目录中的文件

2017年2月4日 评论已被关闭

grep 搜索目录中的文件

http://blog.csdn.net/tsxw24/article/details/7828357

1.在某目录下的所有文件中搜索确定的关键词
grep -Fnr class ./
以上命令的意思是:在当前目录下的所有文件中搜索“class”,并显示文件名、行号和匹配所在行内容

2.在某目录下的所有文件中,按使用正则搜索
grep -Pnr “\d{3}” ./

-P 是 Perl 正则表达式,经过测试,发现此模式支持的正则最完整,支持正则的完整度由大到小为: -P > -E > -G
建议正则搜索时就直接使用-P模式,以避免去记忆-E和-G模式不支持的正则列表
3.只搜索某一类文件
grep -Pnr “\d{3}” `find -name “*.txt”`

4.只搜索某几类文件,如下,只搜索txt和php文件

grep -Pnr “\d{3}” `find |grep -P “.(txt|php)$”`

5.排除含某关键词的子目录不搜索。如下,含“weiba”关键词的子目录不搜索

grep -Pnr “\d{3}” `ls |grep -Fv weiba`
-v排除匹配项
6.更强功能的子目录筛选
grep -Pnr “\d{3}” `ls |grep -Pv ‘^(weiba|huati)$’`

grep -Pnr “\d{3}” `ls |grep -P ‘^(weiba|huati)$’`

附:greg 使用帮助
用法: grep [选项]… PATTERN [FILE]…

在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
例如: grep -i ‘hello world’ menu.h main.c
正则表达式选择与解释:
-E, –extended-regexp PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
-F, –fixed-strings PATTERN 是一组由断行符分隔的定长字符串。
-G, –basic-regexp PATTERN 是一个基本正则表达式(缩写为 BRE)
-P, –perl-regexp PATTERN 是一个 Perl 正则表达式
-e, –regexp=PATTERN 用 PATTERN 来进行匹配操作
-f, –file=FILE 从 FILE 中取得 PATTERN
-i, –ignore-case 忽略大小写
-w, –word-regexp 强制 PATTERN 仅完全匹配字词
-x, –line-regexp 强制 PATTERN 仅完全匹配一行
-z, –null-data 一个 0 字节的数据行,但不是空行
杂项:
-s, –no-messages 不显示错误信息
-v, –invert-match 选中不匹配的行
-V, –version 显示版本信息并退出
–help 显示此帮助并退出
–mmap 忽略向后兼容性
输出控制:
-m, –max-count=NUM NUM 次匹配后停止
-b, –byte-offset 输出行的同时打印字节偏移
-n, –line-number 输出行的同时打印行号
–line-buffered 每行输出清空
-H, –with-filename 为每一匹配项打印文件名
-h, –no-filename 输出时不显示文件名前缀
–label=LABEL 标准输入将LABEL 打印为文件名
-o, –only-matching 只显示一行中匹配PATTERN 的部分
-q, –quiet, –silent 不显示所有输出
–binary-files=TYPE 假定二进制文件的TYPE 类型;
TYPE 可以是`binary’, `text’, 或`without-match’
-a, –text 等同于 –binary-files=text
-I 等同于 –binary-files=without-match
-d, –directories=ACTION 操作目录的方式;
ACTION 可以是`read’, `recurse’,或`skip’
-D, –devices=ACTION 操作设备、先入先出队列、套接字的方式;
ACTION 可以是`read’或`skip’
-R, -r, –recursive 等同于 –directories=recurse
–include=FILE_PATTERN 只查找匹配FILE_PATTERN 的文件
–exclude=FILE_PATTERN 跳过匹配FILE_PATTERN 的文件和目录
–exclude-from=FILE 跳过所有除FILE 以外的文件
–exclude-dir=PATTERN 跳过所有匹配PATTERN 的目录。
-L, –files-without-match 只打印不匹配FILEs 的文件名
-l, –files-with-matches 只打印匹配FILES 的文件名
-c, –count 只打印每个FILE 中的匹配行数目
-T, –initial-tab 行首tabs 分隔(如有必要)
-Z, –null 在FILE 文件最后打印空字符
文件控制:
-B, –before-context=NUM 打印以文本起始的NUM 行
-A, –after-context=NUM 打印以文本结尾的NUM 行
-C, –context=NUM 打印输出文本NUM 行
-NUM 等同于 –context=NUM
–color[=WHEN],
–colour[=WHEN] 使用标志高亮匹配字串;
WHEN 可以是`always’, `never’或`auto’
-U, –binary 不要清除行尾的CR 字符(MSDOS 模式)
-u, –unix-byte-offsets 当CR 字符不存在,报告字节偏移(MSDOS 模式)
‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
直接使用‘egrep’或是‘fgrep’均已不可行了。
不带 FILE 参数,或是 FILE 为 -,将读取标准输入。如果少于两个 FILE 参数
就要默认使用 -h 参数。如果选中任意一行,那退出状态为 0,否则为 1;
如果有错误产生,且未指定 -q 参数,那退出状态为 2。

分类: Linux命令大全 标签:

您的浏览器不能播放当前视频,请点击此处安装Flash播放器 解决方法 精

2017年2月4日 评论已被关闭

您的浏览器不能播放当前视频,请点击此处安装Flash播放器 解决方法 精

说真的安装EduSoho程序真心不是那么容易呀。

 

服务器环境搭配好之后终于可以正常安装了,结果又出现了视频不能播放的问题,总是在上方提示:

 

您的浏览器不能播放当前视频,请点击此处安装Flash播放器

 

在官方客服kent的知道下终于解决了这个问题。

 

原因在于 服务器 php 未安装 fileinfo组件。

 

由于我是使用lnmp 一键安装包 搭建的环境 解决方法如下:

 

编译并安装fileinfo插件

 

cd /root/lnmp1.0-full/php-5.3.17/ext/fileinfo

/usr/local/php/bin/phpize

./configure –with-php-config=/usr/local/php/bin/php-config

make && make install

在PHP配置中添加fileinfo插件

 

用vim编辑器编辑/usr/local/php/etc/php.ini文件

找到 “;extension=php_bz2.dll” 这一行

在其上面添加一行:

extension = fileinfo.so

然后重启lnmp

/root/lnmp restart

 

视频上传不了或者视频过大不能上传

2017年2月4日 评论已被关闭

视频上传不了或者视频过大不能上传

视频上传不了,通常有3种情况:

1、服务器上传的目录被限制了访问,尤其是虚拟主机:这个目录位于 edusoho/app/data/udisk

这种情况一般不会出现,因为安装的时候已经检测过。

 

2、PHP限制了上传大小

找到php.ini,修改下列参数,重启php-fpm或者apache

 

post_max_size = 300M

upload_max_filesize = 300M

memory_limit = 300M

 

3、web服务器(Nginx,Apache)限制了上传大小

Nginx:  打开nginx.conf

并在http{}字段里添加 client_max_body_size 300M;

 

Apache:

/etc/httpd/conf.d/php.conf (不同系统位置有所不同)

LimitRequestBody 300M

Linux 下 PHP 扩展 cURL 编译安装

2017年2月3日 评论已被关闭

Linux 下 PHP 扩展 cURL 编译安装
http://www.cnblogs.com/suan07lai/p/5234868.html
下载 cURL http://pan.baidu.com/s/1hqrHWkG (curl-7.39.0.tar.gz) 3.98MB

解压:

tar zxvf curl-7.39.0.tar.gz
./configure –prefix=/usr/local/curl
make && make install

安装 curl 成功后,进入 php 的源码包(非php安装地址)

cd /var/soft/php-5.3.19/ext/curl
/usr/local/php/bin/phpize 注:/usr/local/php 为我的php安装目录
./configure –with-php-config=/usr/local/php/bin/php-config –with-curl=/usr/local/curl/
make && make install
成功后出现 curl.so 的所在目录

打开 php.ini 添加 extension=xxx/curl.so

重启 apache 即可。

find命令详解

2017年2月3日 评论已被关闭

find命令详解

(一)Get Start

最简单的find用法莫过于如此:

$ find .

查找当前目录下的所有文件。

find命令的一般格式为:

find [-H] [-L] [-P] [path…] [expression]

 

其中,’-H’ ‘-L’ ‘-P’三个选项主要是用来处理符号连接,’-H’表示只跟随命令行中指定的符号连接,’-L’表示跟随所有的符号连接,’-P’是默认的选项,表示不跟随符号连接。

例如,在我的当前目录下有一个符号连接e1000,现在我想查找文件名中最后一个字母是数字的源文件,那么

$ find -H . -name “*[0-9].c” -print

./2234.c

像上面这样写只能查找出当前目录下符合要求的文件,却找不出e1000下的文件。因此可以这么写:

$ find -H e1000 . -name “*[0-9].c” -print

或者使用 ‘-L’选项

$ find -L . -name “*[0-9].c” -print

 

格式中的[path…]部分表示以此目录为根目录进行搜索。

 

格式中的[expression]是一个表达式。最基本的表达式分为三类:设置项(option)、测试项(test)、动作项(action),这三类又可以通过逻辑运算符(operator)组合在一起形成更大更复杂的表达式。设置项(如-depth,-maxdepth等)针对这次查找任务,而不是仅仅针对某一个文件,设置项总是返回true;测试项(test)则不同,它针对具体的一个文件进行匹配测试,如-name,-num,-user等,返回true或者false;动作项(action)则是对某一个文件进行某种动作(最常见的如-print),返回true或者false。

正是[expression]部分的丰富,才使得find如此强大。此部分较复杂,后面慢慢说明。

 

(二)文件名

根据文件名来查找一个文件是大家经常遇到的事情,第一节中的’-name’正是解决此问题的。

-name属于表达式中的测试项(test),它按照文件名模式来匹配文件,若匹配则返回true,否则返回false。最好用引号将文件名模式引起来,防止shell自己解析要匹配的字符串。(可以用单引号也可以用双引号,单引号和双引号在shell环境中的区别见后续部分)

例如,想要的当前目录及子目录中查找文件名以一个大写字母开头或者以小写a或b开头的文件,可以用:

$ find . -name “[A-Za-b]*” -print

./a_book_of_c.chm

./TMP1234

如果想在当前目录查找文件名不以大写字母开头,之后跟一个小写字母,再之后是两个数字,最后是.txt的文件,可以这么用:

$ find . -name “[^A-Z][a-z][0-9][0-9].txt” -print

./@y38.txt

注意:此处的模式匹配并不符合正则表达式。

 

-name对大小写字母敏感,如果想匹配时不考虑大小写可以使用-iname测试项。’i’可以加在许多选项前面,比如-ipath,-iregex,-iwholename等等,都是表示大小写不敏感。

 

(三)正则表达式

使用上面的-name测试项能解决许多问题,但是有些还是不太好办,比如:查找当前目录下名称全部为数字的c源代码文件,这时就该’-regex’出手了。正则表达式绝对值得你去好好研究一下,在unix系统下太有用了,这里不做过多说明,请读者自行学习。

-regex同样属于测试项。使用-regex时有一点要注意:-regex不是匹配文件名,而是匹配完整的文件名(包括路径)。例如,当前目录下有一个文件”abar9″,如果你用”ab.*9″来匹配,将查找不到任何结果,正确的方法是使用”.*ab.*9″或者”.*/ab.*9″来匹配。

针对上面的那个查找c代码的问题,可以这么写:

$ find . -regex “.*/[0-9]*/.c” -print

./2234.c

 

还有一个设置项(option)’-regextype’,可以让你根据自己的喜好选择使用的正则表达式类型,大家可以试试。

 

(四)wholename与path

既然上一节提到了完整文件名(包括路径名),那么这里不妨说一下-wholename和-path。

-wholename和-path都属于测试项(test),而且功能也一样。-path从字面上看给人一种错觉,好像只匹配路径名(或者目录名),其实它也可以匹配文件名,因此-wholename这个名字更贴切一些。

看看这个例子,当前目录下有一个phone目录,phone目录里有一个文件名称是puk.txt,使用-path:

$ find . -path ‘*phone/pu*’

./phone/puk.txt

 

另外要提一点:使用-path的一般格式是:find [path …] -path pattern …

它的意思是:在[path …]部分指明的路径上,使用pattern匹配所有文件的完整文件名;而不是说在类似的pattern目录下查找文件。

 

(五)逻辑运算符

有了上面三个选项,你现在应该对文件名的相关匹配得心应手了,对于不是很复杂的查找应该也胜任了。但是看看这个例子,解释一下它在做什么?

$ find . -size +0c -wholename “*e*[0-9]*” -o ! /( -name “.” -o -name “*phone” /) -prune  -name “*.c” -user xixi -o -name “*phone”

下面是当前目录下的所有文件:

$ ls -l

total 224

-rw-r–r– 1 xixi  admin      0 2007-11-01 17:34 0dfe.c

-rw-r–r– 1 abc admin      0 2007-10-30 15:56 0s8a.txt

-rw-r–r– 1 abc admin      0 2007-11-04 01:00 0TMP123

-rw-r–r– 1 abc admin     73 2007-11-05 15:33 2234.c

-rw-r–r– 1 abc admin     72 2007-11-05 15:34 3e10.c

-rw——- 1 abc admin 224017 2006-03-16 12:16 a_book_of_c.chm

lrwxrwxrwx 1 abc admin     15 2007-11-04 11:48 e1000 -> ../e1000-7.6.9/

-rw-r–r– 1 abc admin     70 2007-11-05 14:57 e100.dat

lrwxrwxrwx 1 abc admin     13 2007-11-05 14:59 e100puk.txt -> phone/puk.txt

-rw-r–r– 1 abc admin      0 2007-11-06 22:21 e680phone

drwxr-xr-x 2 abc admin     37 2007-11-06 22:24 phone

drwxr-xr-x 2 abc admin     20 2007-11-07 01:07 phone1

drwxr-xr-x 2 abc admin      6 2007-11-05 15:37 phone2

-rw-r–r– 1 abc admin     67 2007-11-04 12:23 @y38.txt

 

phone$ ls -l

total 4

-rw-r–r– 1 abc admin  0 2007-11-06 22:24 e680gphone

-rw——- 1 abc admin 38 2007-11-05 14:58 puk.txt

 

phone1$ ls -l

total 0

-rw-r–r– 1 xixi admin 0 2007-11-07 01:07 hello.c

 

phone2$ ls -l

total 0

 

要想解决上面的问题就得学习一下find中的逻辑运算符。逻辑运算符主要有以下几个,按照优先级从高到低的顺序如下:

( expr )

括号优先级最高,首先对括号内的求值

! expr

对expr表达式的值取反

-not expr

同上,但是POSIX不支持

expr1 expr2

不加任何运算符,相当于两个之间加and,即与运算,两个表达式值都为true整个才返回true。先对expr1表达式求值,若为false,则不对expr2求值。

expr1 -a expr2

同上

expr1 -and expr2

同上,但是POSIX不支持

expr1 -o expr2

表示对expr1和expr2两个表达式的值求或,左右两个值只要有一个为ture,整个表达式就是true。先对expr1表达式求值,若为ture,则不对expr2求值。

expr1 -or expr2

同上,但是POSIX不支持

expr1 , expr2

逗号表达式。expr1和expr2都会求值,但是只返回expr2的值,expr1的值会被丢弃

 

正是因为有一个求值的顺序,所以你才有可能见到这样的写法:

$ find . -name “*.txt” -o -print

表示,如果表达式-name “*.txt”为真,就不再执行另一个表达式-print,即查找所有不是以.txt结尾的文件。

 

再有,要查找当前目录下,文件名中包括字母’e’,在’e’之后又有数字的不是目录文件的所有文件,可以这么写:

$ find . -name “*e*[0-9]*” ! -type d -print

./e1000

./e100.dat

./e100puk.txt

./3e10.c

大家可以自己多举几个例子试一下。

 

(六)-prune

-prune是一个动作项,它表示当文件是一个目录文件时,不进入此目录进行搜索。

要理解-prune动作,首先得理解find命令的搜索规则(也可以说find命令的算法)。

find命令递归遍历所指定的目录树,针对每个文件依次执行find命令中的表达式,表达式首先根据逻辑运算符进行结合,然后依次从左至右对表达式求值。以下面代码为例,进行说明

find PATHP1 OPT1 TEST1 ACT1 ( TEST2 or TEST3 ) ACT2

 

(1) 根据OPT1设置项进行find命令的整体设置,若没有-depth设置项,依次进行下面的步骤

(2) 令文件变量File = PATHP1

(3) 对File文件进行TEST1测试,若执行结果为false,转(8)

(4) 对File文件进行ACT1动作,若执行结果为false,转(8)

(5) 对File文件进行TEST2测试,若执行结果为true,转(7)

(6) 对File文件进行TEST3测试,若执行结果为false,转(8)

(7) 对File文件进行ACT2动作

(8) 若File文件是一个目录,并且没有被执行过-prune动作,则进入此目录

(9) 当前目录下是否还有文件,若有依次取一个文件,令File指向此文件,转(3);

(10) 判断当前目录是否是PATHP1,若是则程序退出;若不是,则返回上一层目录,转(9)

 

理解了上面的流程,那么不难理解下面的代码为什么只输出一个’.’

$ find . -prune

.

再有,当前目录下大于4090字节的文件有两个,而大于4096字节的文件只有一个,如下:

$ find . -size +4090c -print

.

./a_book_of_c.chm

 

$ find . -size +4096c -print

./a_book_of_c.chm

 

那么,将上面两个-print都替换为-prune,这两条命令分别输出什么?

$ find . -size +4090c -prune

.

$ find . -size +4096c -prune

./a_book_of_c.chm

这就是答案,如果你答对了,恭喜你,你已经掌握了find命令!

 

-prune经常和-path或-wholename一起使用,以避开某个目录,常见的形式是:

$ find PATH (-path <don’t want this path #1> -o -path <don’t want this path #2>) -prune -o -path <global expression for what I do want>

 

注意:如果同时使用-depth设置项,那么-prune将被find命令忽略。man手册页中这么说:”If -depth is given, false; no effect.”

说到这里,又得说说-depth设置项。网上好多资料说-depth设置项的功能是“在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找”,这明显是错误的,man手册页中如是说:”-depth Process each directory’s  contents before the directory itself.”。这有点像树的后序遍历,先遍历当前节点的所有子节点,然后再访问当前节点…

考考你:

下面的命令输出什么?为什么?

$ find . -depth -prune -name “*.c” -print

 

(七)时间戳

理解了上面几节,你已经掌握了find命令的“道” ^_^ ,下面这几节只是介绍一些常用、好用的“招式”。这一节介绍时间戳。

 

文件有三个时间属性:创建时间、最近修改时间、最近访问时间。

最近修改时间又包括两种,一是文件的状态(也即权限如rwx等)最近被修改时间,一是文件的数据(也即内容)最近被修改时间。touch命令改变的即是文件数据最近被修改时间。

最近访问时间,指的是最近一次文件数据(内容)被访问的时间。因此,使用ls命令输出文件的相关信息并不会修改文件的最近访问时间。

 

find命令提供了针对文件的最近访问时间、文件状态最近被修改时间、文件数据最近被修改时间进行匹配的测试项,分别是-amin, -cmin, -mmin和-atime, -ctime, -mtime两组,第一组基于分钟,第二组基于天。

以-amin为例,假设当前时间tnow=”2007-11-12 14:42:10″、t1=”2007-11-12 14:39:10″、t2=”2007-11-12 14:40:10″,那么要查找最近访问时间属于[t1,t2]时间段的文件,可以这么写:

$ find . -amin 3

若测试项参数是数字,则基本上都可以在数字参数前加”+”或者”-“号,表示“大于”或“小于”的意思,因此,要查找最近访问时间属于[t1,tnow]时间段的文件,可以这么写:

$ find . -amin -3

“-amin n”和”-atime n”的处理方法都是:根据当前时间和文件的相应时间属性求n值,然后比较n值和参数n,看是否符合要求。但是这个求n值的过程却有很大不同,他们的不同也代表了两组(基于分钟和基于天)的不同:

“-amin n”

1、求Δt,用当前时间减去文件对应属性的时间值即得到Δt,Δt = tnow – tfile;

2、求浮点数f,用Δt除以1分钟,f = Δt / 1min;

3、将f的小数部分入到整数部分,得到n。即,不管f是6.0102还是6.8901,n都等于7

“-atime n”

1、求Δt,用当前时间减去文件对应属性的时间值即得到Δt,Δt = tnow – tfile;

2、求浮点数f,用Δt处以24小时,f = Δt / 24hours;

3、将f的小数部分都舍掉,得到n。即,不管f是6.0102还是6.8901,n都等于6

大家可以多做实验,试一下。

 

(八)权限位

很多人都在用windows,从windows系统拷过来的文件经常被加上了可执行权限,比如我现在想把主目录下所有的后缀名为.txt .pdf .rm并且具有可执行权限位的文件查找出来,该怎么写呢?

这里就不得不说一说权限位测试项:-perm。-perm支持符号权限位表示法也支持绝对(八进制)权限位表示法,但是最好使用八进制的权限表示法(这只是个建议  ^_^ )。

-perm基本上有下面这几中形式:

-perm mode       File’s  permission  bits  are  exactly mode.

-perm -mode     All  of the permission bits mode are set for the file.

-perm /mode     Any of the permission bits mode are set for the file.

-perm +mode (此形式已经不推荐使用,功能与/mode相同)

好好理解上面蓝色部分,理解了,-perm测试项也就掌握了。

考考你:

看看下面这句话是什么意思?

find . -perm -444 -perm /222 ! -perm /111

 

现在再来解决本节最开始提出的问题:查找主目录下所有的后缀名为.txt .pdf .rm并且具有可执行权限位的文件。

$ find ~ /( -name “*.txt” -o -name “*.pdf” -o -name “*.rm” /)  /

-not /( -type d -o -type l /)  /

-perm /111 -print

 

(九)文件类型

有一个问题:我只想查找符号连接文件,可是查找结果中却包括了普通文件、目录文件等等,不相关的东西太多了,怎么把不是符号连接文件的查找结果去掉?

-type测试项刚好可以满足你的要求,-type c即可,其中c表示文件类型,find中支持如下类型:

b      block (buffered) special

c      character (unbuffered) special

d      directory

p      named pipe (FIFO)

f       regular file

l       symbolic link;

s      socket

D     door (Solaris)

针对上面的问题,可以这么写:

$ find . -name “e100*” -type l -print

./e1000

./e100puk.txt

但是,不要这么写:

$ find -L . -name “e100*” -type l -print

加上’-L’选项之后,你将查不到需要的东西,除非符号连接已经失效了。

 

(十)文件大小

前面一再使用-size测试项,这里简单介绍一下。

-size测试项根据文件的大小查找文件,文件大小既可以用块(block)来计量,也可以用字节来计量。默认情况下以块计量文件大小,若想使用字节来计量只需要在数字参数后加c即可。find支持的其他计量方式有:

-size n[cwbkMG],分别表示

‘b’    for 512-byte blocks (this is the default if no suffix  is used)

‘c’    for bytes

‘w’    for two-byte words

‘k’    for Kilobytes (units of 1024 bytes)

‘M’    for Megabytes (units of 1048576 bytes)

‘G’    for Gigabytes (units of 1073741824 bytes)

 

 

(十一)用户、用户组

根据用户、用户组来查找文件,这个没有太多要说的,记住命令格式即可:

-uid n

-user username or uid

-nouser

-gid n

-group gname or gid

-nogroup

 

(十二)输出格式

如果你不想查找到你想要的文件事单调的输出文件名,你可以使用-printf动作项输出你想要的格式,下面举几个-printf动作的参数:

%p    输出文件名,包括路径名

%f     输出文件名,不包括路径名

%m    以8进制方式输出文件的权限

%g    输出文件所属的组

%h    输出文件所在的目录名

%u    输出文件的属主名

例如:

$ find . -user xixi -printf “%m %p //n”

644 ./phone1/hello.c

644 ./0dfe.c

 

 

其余的,看man手册页吧。

 

(十三)执行外部命令

这又是一个很容易出彩的地方。find真是强大,对查找到的文件竟然可以调用外部命令进行处理。-exec动作项就是来完成这个功能的,格式是:

find . EXPR1 -exec command {} /;

注意:后一个花括号’}’和’/’之间有一个空格。

例如,查找当前目录下的所有普通文件,并用ls命令输出:

find . -type f -exec ls -l {} /;

有些操作系统中出于安全考虑只允许-exec选项执行诸如l s或ls -l这样的命令。

也可以使用-exec动作项的安全模式:-ok动作项。它的功能和语法都跟-exec一样,只不过它以更安全的模式运行,当要删除文件时,它会给出提示,让你选择到底删除还是不删。

例如:

$ find logs -name “*abc*” -ok rm {} /;

 

使用-exec动作项处理匹配到的文件时,find命令会将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

xargs的使用格式是:

find PATH EXPR1 EXPR2 | xargs command

利用管道,把find命令匹配到的文件名传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec动作项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

例如,要在普通文件中查找文件内容中包含”io”的文件,可以这么写:

$ find . -type f | xargs grep “io”

Binary file ./a_book_of_c.chm matches

./2234.c:#include <stdio.h>

./3e10.c:#include <stdio.h>

 

find命令配合exec和xargs可以对所匹配到的文件执行几乎所有的命令。

(十四)总结

理解并运用find,关键是掌握find命令的处理规则(见第五节):递归遍历所指定的目录树,针对每个文件依次执行find命令中的表达式,表达式首先根据逻辑运算符进行结合,然后依次从左至右对表达式求值。把这个理解了,需要什么功能查一下man就可以了。

 

find命令还有好多功能这里没有涉及到,具体的大家看man手册页吧。在任何时候,man都是一个极好的帮助工具。   ^_^

(十五)附

第五节提出的问题,答案如下:

$ find . -size +0c -wholename “*e*[0-9]*” -o   /

!  /( -name “.” -o -name “*phone” /) -prune  -name “*.c” -user xixi   /

-o -name “*phone”

./e1000

./e100.dat

./phone

./phone/e680gphone

./e100puk.txt

./3e10.c

./phone1

./phone1/hello.c

./phone2

./0dfe.c

./e680phone

这篇文章断断续续写了好久,今天终于基本完工。参考了man手册页以及一些网上的资料。

要把自己心中所想有条理的写出来感觉真是不易,希望对大家有所帮助。

欢迎批评指正。

 

分类: Linux命令大全 标签:

Linux系统启动过程详解

2017年1月24日 评论已被关闭

Linux系统启动过程详解  

 

1)BIOS自检

2)启动Grub/Lilo

3)加载内核

4)执行init进程

5)通过/etc/inittab文件进行初始化

6)登陆Linux

 

1)BIOS自检:

 

a)POST(Power On Self Test),对硬件进行检测

计算机在通电后首先由BIOS进行自检,即所谓的POST(Power On Self Test),对硬件进行检测

依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入”引导块”

在PC中,Linux是从BIOS中的地址0xFFFF0处开始的

BIOS的第一个步骤是加电自检(POST),对硬件进行检测

第二个步骤是进行本地设备的枚举和初始化

BIOS由两部分组成: POST代码和运行时服务

当POST完成后,它从内存中清理出来,但BIOS运行时服务依然保留在内存中,目标操作系统可以使用这些服务

要引导一个操作系统,BIOS运行时会按照CMOS的设置的顺序来搜索处于活动状态并可引导的设备:软盘、CD-ROM、硬盘上的分区、网络上的某个设备、USB(通常Linux是从硬盘引导的

主引导记录MBR中包含主引导加载程序。MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区中(0道0柱面1扇区))当MBR被加载到RAM中之后,BIOS会把控制权交给MBR

b)提取MBR的信息

要看MBR的内容,请使用下面的命令

#从/dev/sda上读取前512个字节的内容,并将其写入mbr.bin文件中

[root@localhost pam.d]# dd if=/dev/sda of=mbr.bin bs=512 count=1

#以十六进制和ASCII码格式打印这个二进制文件的内容

[root@localhost pam.d]# od -xa mbr.bin

0000000 48eb 0090 d08e 00bc fb7c d88e b9fc 0080

k   H dle nul  so   P   < nul   |   {  so   X   |   9 nul nul

0000020 f48b 00bf 8e06 f3c0 a566 2fea 0006 1000

vt   t   ? nul ack  so   @   s   f   %   j   / ack nul nul dle

2)启动GRUB/Lilo:

 

GRUB和LILO都是引导加载程序,它们会引导操作系统。当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(即MBR: master boot record)

3)加载内核:

 

当内核映像被加载到内存后,内核阶段就加开始了

内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个zImage(压缩映像,小于512KB)或bzImage(较大的压缩映像,大于512KB),它是提前使用zlib进行压缩的

在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始RAM磁盘映像,就会将它移动到内存中,并标明以后使用,然后此例程会调用内核,并开始启动内核引导的过程

在GRUB命令中,我们可以使用initrd映像引导一个特定的内核,方法如下:

grub> kernel /bzImage-2.6.14.2

[Linux-bzImage, setup=0x1400, size=0x29672e]

grub>initrd /initrd-2.6.14.2.img

[Linux-initrd @ 0x5f13000, 0xcc199 bytes]

grub> boot

Uncompressing Linux… Ok, booting the kernel.

如果不知道要引导的内核的名称,只需使用/然后按下Tab键,就会显示内核和initrd映像列表

对grub命令行进行加密

a)使用命令/sbin/grub-md5-crypt来产生grub使用的密码

[root@localhost pam.d]# /sbin/grub-md5-crypt

Password:

Retype password:

$1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1

b)修改/etc/grub.conf加入password –md5 $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 一定要放在title之前

这样重启系统时在grub的启动grub菜单时,想再按e命令进行编辑时,必须先按p键后输入密码才成

 

4)执行init进程:

 

init进程是所有进程的起点,内核在完成内核引导后,即在本线程(进程)空间内加载init程序,它的进程号为1

init进程是所有进程的发起者和控制者

init进程有两个作用:

扮演终结父进程的角色:所有的孤儿进程都会被init进程接管

进入某个特定的运行级别时运行相应的程序,以此对各种运行级别进行管理,这个作用由/etc/inittab文件定义的

5)通过/etc/inittab文件进行初始化:

 

init进程的工作是根据/etc/inittab来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等,对于RedHat来说,按以下顺序执行

a)执行/etc/rc.d/rc.sysinit(由init执行的第一个脚本)

此步可进行的工作有:

设置$PATH变量

配置网络

为虚拟内存启动交换

设置系统的主机名

检查root文件系统,以进行必要的修复

检查root文件系统的配额

为root文件系统打开用户和组的配额

以读/写的方式重新装载root文件系统

清除被装载的文件系统表/etc/matb

把root文件系统输入到mtab

使用系统为装入模块做准备

查找模块的相关文件

检查文件系统,以进行必要的修复

加载所有其他文件系统

清除几个/etc文件,如/etc/mtab、/etc/fastboot和/etc/nologin

删除UUCP的lock文件

删除过时的子系统文件

删除过时的pid文件

设置系统时钟

打开交换

初始化串行端口

装入模块

 

b)执行/etc/rc.d/rcX.d[KS]

首先终止K开头的服务(用来关闭一个服务),然后启动S开头的服务(用来启动一个服务)

对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。

这些运行级别的下级子目录的命名方法上rcX.d, 其中X就是代表运行级别的数字

在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接

链接的名称在K与S后有一个数字,表示执行顺序,数字小的先执行如K01tog-pegasus  、 S00microcode_ctl

对以K开头的脚本执行时系统会传递stop参数,而S开头的脚本系统会传递start参数

 

c)执行/etc/rc.d/rc.local

Redhat中运行模式2,3,5都把/etc/rc.d/rc.local作为初始化脚本中的最后一个文件,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登陆之前执行的命令

 

6)执行/bin/login:

 

login程序会提示使用者需输入帐号与密码,接着编码并确认密码的正确性,若二者相合,则为使用者进行初始化环境,并将控制权交给shell,即等用户登录。

分类: Linux入门大全 标签:

openldap安装及常用配置

2017年1月23日 评论已被关闭

openldap安装及常用配置
https://www.52os.net/articles/openldap-install-and-settings.html
openLDAP是LDAP(轻量目录访问协议)在linux系统上的实现,和windows下的AD域是一回事,主要是用来构建集中的身份验证系统,提供高效的查找和管理信息服务,可以减少管理成本并保持数据一致性。

服务器环境:centos 6.6 64位

一、配置OpenLDAP Server

1.安装

服务器端所需的软件:

openldap 包含配置文件、库、文档等
openldap-server slapd服务器
openldap-client 客户端程序
openldap-devel 开发套件,供第三方程序调用
yum自带的源里就有了,直接yum安装:

yum install -y openldap openldap-servers openldap-clients openldap-devel
2.配置slapd

有两个文件要复制:slapd的配置文件和数据库文件,将openldap-servers自带的example复制到相应目录:

cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap.ldap /etc/openldap
chown -R ldap.ldap /var/lib/ldap
使用slappasswd创建LDAP管理员密码,这个命令不会直接将密码写入配置,运行slappasswd后输入两次密码,会返回一串密文,复制下这个密文。

编辑/etc/openldap/slapd.conf,找到”database bdb“,按照自己的需求更改下面的:

suffix “dc=52os,dc=net”
rootdn “cn=admin,dc=52os,dc=net” //管理员为admin
rootpw {SSHA}QeLa25YmQt3csWI2eWcrXbtylxpq5FQ0 //复制的管理员的密码,也支持明文
测试并生成配置文件:

rm -rf /etc/openldap/slapd.d/* //删除原文件
service slapd start //生成bdb文件
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d //生成配置文件
chown -R ldap:ldap /etc/openldap/slapd.d
配置完成重启服务:

service slapd restart
chkconfig slapd on //设置开机自启动
经过上面的配置后,openldap server就配置好了。
查看LDAP数据库结构:

ldapsearch -x -H ldap://127.0.0.1 -b ‘dc=52os,dc=net’
会返回类似:

# extended LDIF
# LDAPv3
# base <dc=52os,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# search result
search: 2
result: 32 No such object
# numResponses: 1
3.配置并迁移系统用户

配置好的LDAP数据库是空的,需要将系统上的用户导入到LDAP数据库中。需要用migrationtools将系统用户转换为LDAP能识别的ldif文件。

先新建一个test用户作为测试用户:

useradd test
echo “pwdpwd” |passwd –stdin test
安装migrationtools:

yum install migrationtools
配置migrationtools:

编辑/usr/share/migrationtools/migrate_common.ph ,按需更改下面两行:

$DEFAULT_MAIL_DOMAIN = “52os.net”;
$DEFAULT_BASE = “dc=52os,dc=net”;
生成ldif文件:

./migrate_passwd.pl >/tmp/passwd.ldif
./migrate_passwd.pl /etc/passwd >/tmp/passwd.ldif
./migrate_group.pl /etc/group >/tmp/group.ldif
如果有需要,也可以编辑passwd.ldif和group.ldif去掉不需要的条目。
将生成的ldif导入到LDAP数据库:

ldapadd -x -D “cn=admin,dc=52os,dc=net” -W -f /tmp/base.ldif
ldapadd -x -D “cn=admin,dc=52os,dc=net” -W -f /tmp/passwd.ldif
ldapadd -x -D “cn=admin,dc=52os,dc=net” -W -f /tmp/group.ldif
需要输入LDAP管理员密码,在用上面的ldapsearch命令就能查看到导入的数据。

二、客户端配置

客户端配置有两种方法:

使用authconfig-tui ,也就是setup命令中的 “Authentication configuration”
手动配置
无论哪种方式,都要先安装客户端:

yum -y install openldap openldap-clients nss-pam-ldapd pam_ldap
第一种方法:
在命令行中输入authconfig-tui或者setup命令中选择”Authentication configuration”,选中 ”Use LDAP“和“Use LDAP Authentication”,之后点击NEXT,输入服务器地址和“BASE DN”即可。全部图形化添加,非常简单,推荐使用。

第二种方法需要修改文件较多:
编辑/etc/openldap/ldap.conf,加入:

URI ldap://10.11.15.78/ //LDAP服务器地址
BASE dc=52os,dc=net
TLS_CACERTDIR /etc/openldap/cacerts
编辑/etc/nslcd.conf,加入:

uri ldap://10.11.15.78/
base dc=52os,dc=net
ssl no
tls_cacertdir /etc/openldap/cacerts
系统命名服务(NSS)配置使用LDAP,编辑 /etc/nsswitch.conf,修改如下几项为:

passwd: files ldap
shadow: files ldap
group: files ldap
netgroup: files ldap
automount: files ldap
编辑/etc/pam.d/system-auth,修改如下几项为:

auth sufficient pam_ldap.so use_first_pass
account required pam_unix.so broken_shadow
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
password sufficient pam_ldap.so use_authtok
session required pam_unix.so
session optional pam_ldap.so #这一行要加在pam_unix.so下面
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0022 #自动创建用户的宿主目录
编辑/etc/sysconfig/authconfig:

USELDAPAUTH=yes
USELDAP=yes
修改好之后启动nslcd服务,并设置开机启动

service nslcd start && chkconfig nslcd on
验证:
test用户只有在ldap server上有,在客户端如果也能查看到,就说明设置成功:

id test
或者使用:

getent passwd |grep test
这时就能用test账号登录客户端了。

三、其它设置:

1.日志配置

openLDAP默认是不打日志的,要配合rsyslog才能打日志。
在/etc/openldap/slapd.conf 中设置日志级别,加入:

loglevel 1
具体的loglevel解释,可以:

man slapd.conf
在/etc/rsyslog.conf最后加入:

local4.* /var/log/slapd.log
重启rsyslog和slapd:

service rsyslog restart
service slapd restart
2.sudo管理

在openldap的服务器端拷贝sudo schema到openldap配置目录

cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
加载sudo schema,在/etc/openldap/slapd.conf  添加:

include /etc/openldap/schema/sudo.schema
重新生产配置文件:

rm -rf /etc/openldap/slapd.d/*
sudo -u ldap slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
service slapd restart
新建一个sudo.ldif文件,内容为:

dn: ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: organizationalUnit
ou: Sudoers

dn: cn=defaults,ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: sudoRole
cn: defaults
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: env_reset
sudoOption: requiretty

dn: cn=test,ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: sudoRole
cn: test
sudoCommand: ALL
sudoHost: ALL
sudoOption: !authenticate
sudoRunAsUser: ALL
sudoUser: test
上面的内容按实际情况更改,注意每行最后不要有空格,ldif里的大小写不敏感。我允许sudo的用户是test,允许使用全部命令,允许所有主机sudo
导入sudo.ldif记录:

ldapadd -x -D “cn=admin,dc=52os,dc=net” -W -f sudo.ldif
设置客户端:
在/etc/sudo-ldap.conf中加入:

uri ldap://10.11.15.78
sudoers_base ou=Sudoers,dc=52os,dc=net
在/etc/nsswitch.conf中加入:

Sudoers: files ldap
在客户端用切换到test用户,测试一下sudo是否可用

3.用户目录自动挂载

使用Openldap的好处就是在服务器端建好一个用户后,各个客户端去服务器端验证,不需要在创建该用户。验证通过后会在客户端/home目录下创建该用户的宿主目录,虽然是同一用户,但目前的配置来说,每个客户端和服务器之间宿主目录是独立的,并没有共享服务器端的宿主目录。举例来说,我在服务器端的宿主目录中上传了一份代码,如果客户端共享服务器的宿主目录,当用户在任意一个客户端登录时,都会看到服务器上宿主目录的代码,管理起来就十分方便了。

配置用户目录共享,需要在服务器端安装nfs,在客户端安装autofs。
安装并启动nfs:

yum install nfs-utils
service rpcbind start
service nfslock start
service nfs start
启动好后用chkconfig加入开机启动。
编辑/etc/exports文件,加入:

/home *(rw,sync)
要注意用户需在nfs服务器/home下有宿主目录,否则autofs无法挂载。”*”可以写成具体的ip或ip段,设置好后重启nfs服务,测试并查看:

showmount -e localhost
服务器端的nfs配置完成。
客户端要安装autofs和nfs-utils,但nfs服务不用启动:

yum install nfs-utils autofs
配置autofs,在/etc/auto.master最后加入:

/home /etc/auto.nfs
新建一个/etc/auto.nfs文件,内容为:

* -fstype=nfs 10.11.15.78:/home/&
启动autofs:

service autofs start
用su – test测试是否正常切换,在用mount命令查看挂载:

10.11.15.78:/home/test on /home/test type nfs (rw,vers=4,addr=10.11.15.78,clientaddr=10.11.15.79)
说明挂载成功了,客户端的用户目录和服务器端的用户目录内容就能正常同步了

其它的一些设置,用到在写。
1.安全设置主要有两点:1.启用TLS加密 2.关闭匿名查询
2.主备高可用配置
3.web管理工具:phpldapadmin和LDAP Account Manager

四、一些问题

1.用户不能建立宿主目录
提示 “could not chdir to home directory /home/user: No such file or directory”
解决方法:
在 /etc/pam.d/password-auth 和/etc/pam.d/system-auth 都要加入:

session optional pam_mkhomedir.so skel=/etc/skel/ umask=0022
2.导入ldif文件时报错
ldap_bind: Invalid credentials (49)
这种情况是管理员密码错误或者rootdn信息错误

3.配置autofs后,切换su – test 报错

Creating directory ‘/home/test’.
Unable to create and initialize directory ‘/home/test’.
su: warning: cannot change directory to /home/test: No such file or directory
这是由于nfs服务器上/home下没有test用户的宿主目录造成的,且权限要正确,否则autofs无法挂载目录,用户也无法在客户端登录。

参考文章:
http://www.zhukun.net/archives/7548
http://54im.com/openldap/centos-6-yum-install-openldap-phpldapadmin-tls-%E5%8F%8C%E4%B8%BB%E9%85%8D%E7%BD%AE.html
http://www.ibm.com/developerworks/cn/linux/l-openldap/

分类: Linux工具使用 标签:

lsyncd+rsync实时文件同步

2017年1月23日 评论已被关闭

lsyncd+rsync实时文件同步

http://xukaizijian.blog.163.com/blog/static/1704331192010112191936700?suggestedreading
客户端:

[root@10.10.90.20 ~]# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
[root@10.10.90.20 ~]# tar -zxf rsync-3.0.7.tar.gz
[root@10.10.90.20 ~]# cd rsync-3.0.7
[root@10.10.90.20 rsync-3.0.7]#./configure –prefix=/usr/local/rsync && make && make install
修改配置文件:

[root@10.10.90.20 ~]#cat /etc/rsyncd.conf
uid = root
gid = root
read only = no
use chroot = yes
max connections = 20
log file = /var/log/rsyncd.log
list = yes
pid file = /var/run/rsyncd.pid
hosts allow =10.10.90.97
hosts deny =0.0.0.0/0
[9097]
path = /root/10.10.90.97
comment =focus backup
启动:

rsync:rsync –daemon

服务器端:
1.安装lsyncd

[root@10.10.90.97 ~]##wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz
[root@10.10.90.97 ~]##tar zxvf lsyncd-1.26.tar.gz
[root@10.10.90.97 ~]##cd lsyncd-1.26
[root@10.10.90.97 ~]##./configure –prefix=/usr/local/lsyncd
[root@10.10.90.97 ~]##make && make install
2.配置lsyncd
[root@10.10.90.97 ~]#vi /etc/lsyncd.conf

/opt/data/ 10.10.90.20::9097
说明:a> /opt/data/ #要实时同步的目录
b>10.10.90.20 #要实时同步到的远端机器
c> 9097 #对应远端机器的rsync的tag。
d> 如果需要同步多台或者同步多个目录就在这个文件中添加相应的行

3.建立lsyncd日志文件
#vi /etc/logrotate.d/lsyncd

/var/log/lsyncd {
missingok
notifempty
sharedscripts
postrotate
/etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true
endscript
}
4.建立lsyncd的启动文件

#!/bin/bash
/etc/rc.d/init.d/functions
lsyncd=”/usr/local/bin/lsyncd”
lockfile=”/var/lock/subsys/lsyncd”
pidfile=”/var/run/lsyncd.pid”
function_start_lsyncd()
{
printf “Starting Lsyncd…\n”
while read i
do
source=`echo $i | awk ‘{print $1}’`
target=`echo $i | awk ‘{print $2}’`
$lsyncd $source $target
done < /etc/lsyncd.conf
}
function_stop_lsyncd()
{
printf “Stoping Lsyncd…\n”
killall $lsyncd
}
function_restart_lsyncd()
{
printf “Restarting Lsyncd…\n”
function_stop_lsyncd
function_start_lsyncd
}
if [ “$1” = “start” ]; then
function_start_lsyncd
elif [ “$1” = “stop” ]; then
function_stop_lsyncd
elif [ “$1” = “restart” ]; then
function_restart_lsyncd
else
printf “Usage: lsyncd.sh {start|stop|restart}\n”
fi
5.启动:
[root@10.10.90.97 ~]# chmod 755 /etc/init.d/lsyncd
[root@10.10.90.97 ~]# /etc/init.d/lsyncd start

后记:个人觉得lsyncd+rsync对于大量小文件的实时同步比rsync要好,消耗资源较少,但在配置rsync客户端时,必须设置无密码连接,而且,数据的传输是完全同步的,并不是增量的。

分类: Linux工具使用 标签: ,

mpstat pmap

2017年1月23日 评论已被关闭

mpstat pmap
http://xukaizijian.blog.163.com/blog/static/1704331192010113015251659?suggestedreading
mpstat: mpstat命令可以显示所有可用处理器的使用情况,处理器编号从0开始。
mpstat -P ALL显示每个处理器的平均使用率。

[root@10.10.90.97 ~]# mpstat -P ALL
Linux 2.6.18-164.el5xen (FOCUS9097) 12/30/2010 _x86_64_ (4 CPU)
01:48:08 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:48:08 PM all 0.33 0.00 0.19 0.37 0.00 0.00 0.00 0.00 99.11
01:48:08 PM 0 1.10 0.00 0.29 1.28 0.00 0.00 0.00 0.00 97.33
01:48:08 PM 1 0.08 0.00 0.18 0.07 0.00 0.00 0.00 0.00 99.66
01:48:08 PM 2 0.07 0.00 0.15 0.07 0.00 0.00 0.00 0.00 99.72
01:48:08 PM 3 0.09 0.00 0.15 0.04 0.00 0.00 0.00 0.00 99.72

pmap:pmap命令可以显示进程的内存映射,使用这个命令可以找出造成内存瓶颈的原因

语法:pmap -d PID :显示pid进程的内存信息

[root@10.10.90.97 ~]# pmap -d 2380
2380: sendmail: accepting connections
Address Kbytes Mode Offset Device Mapping
00002b42542f7000 736 r-x– 0000000000000000 068:00002 sendmail.sendmail
00002b42545af000 20 rw— 00000000000b8000 068:00002 sendmail.sendmail
…………………………
00002b42589a9000 2048 —– 000000000000b000 068:00002 libdigestmd5.so.2.0.22
00002b4258ba9000 4 rw— 000000000000b000 068:00002 libdigestmd5.so.2.0.22
00002b426a18f000 528 rw— 00002b426a18f000 000:00000 [ anon ]
00007fff785b6000 208 rw— 00007ffffffcb000 000:00000 [ stack ]
ffffffffff600000 8192 —– 0000000000000000 000:00000 [ anon ]
mapped: 79288K writeable/private: 2000K shared: 0K
最后一行说明:
mapped: 79288K: 内存映射所占空间大小
writeable/private: 2000K: 私有地址空间大小
shared: 0K :共享地址空间大小

find 实例

2017年1月20日 评论已被关闭

find 实例

 

要在/usr/linux中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR”,最后打印出所有包含”SYSCALL_VECTOR”的文件名,有以下几种方法实现

find /usr/linux -name “*.h” | xargs -n50 grep SYSCALL_VECTOR

grep SYSCALL_VECTOR /usr/linux/*.h | cut -d’:’ -f1 | uniq > filename

find /usr/linux -name “*.h” -exec grep “SYSCALL_VECTOR” {} \; -print

我用find / -name filename| rm -rf,不成功,请问为什么不成功?

find / -name filename -exec rm -rf {} \;

find . -name filename |rm -rf试一下{} 表示你找出来的结果。

\; 则相当于“宪法”,没什么说头,就是这么规定的,在 -exec 后面需要一个表示该命令终结的的符号。可以在 man find 中找到答案。

要让rm识别find的结果,如下:

find / -name filename |xargs rm -rf

之所以find . -name filename |rm -rf不通过,是因为rm命令不接受从标准输入传过来的指令

查找含特定字符串的文件

例如查找当前目录下含有”the string you want find…”字符串的文件:

$find . -type f -exec grep “the string you want find…” {} ; -print

从根目录开始查tmpfile,一旦查到马上删除

find / -name “tmpfile” -exec rm {} \;

find 的perm问题

请问一下以下命令什么意思?关键是那个数字前的-,其他都还知道

find -name “.*” -perm -007

我知道

find -name “.*” -perm 755

这个是用来查找权限位为755的隐藏文件

噢,对了还有,我上边的命令都省略了find的pathname参数 find默认是查找当前工作目录的吗?

如果我用 -ok 替代 -exec, 那么还需要加上 {} \; 吗?

这个已经清楚,仍然需要,因为 -ok 只是 -exec 的提示模式,它只是多了一个确认操作的步骤,刚才没有读懂那几句E文的意思 呵呵 不好意思

-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~

解释解释?

find -name “.*” -perm -007 和 find -name “.*” -perm 777 有区别吗?

-007是怎么来得呢?

不过有一个问题

我用 find . -perm -100 会列出当前目录 . , 这是为什么呢?

下面引用由explover在 2002/10/01 06:15am 发表的内容:

-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~

-007是查找含其它用户(不同组,非属主)可读,写,执行的文件.并不一定要同组可读写,-是指最少权限为007.

下面引用由一颗小白菜在 2002/10/01 10:16am 发表的内容:

OK了, 呵呵

不过有一个问题

我用 find . -perm -100 会列出当前目录 . , 这是为什么呢?

这种方法不会准确的找出目录的. -100是指权限至少是属主可运行.

在unix系统下,你可以拥有对目录文件的执行权你才可以进入一个目录.这便是目录文件被列出的原因.

find . -perm -001 -print找到往往是目录文件.

我的意思当然不是使用这种方法来找目录,只不过不明白其中的 -100 意义了

那以此类推,是不是 -010是指权限至少是owner同组可执行的吗?也就是说其实这里的010和-是分开的,-表示一个至少的意思,而且010才是真正用来描述权限位的?

这样子就明白了 谢谢你噢

将find出来的东西拷到另一个地方?

find *.c -exec cp ‘{}’ /tmp ‘;’

如果有特殊文件,可以用cpio,也可以用这样的语法:

find dir -name filename -print | cpio -pdv newdir

找出磁盘中某个大小范围内的文件

比如要查找磁盘中大于3M的文件:

find . -size +3000k -exec ls -ld {} ;

如何用find查找某一天更改的文件?

可以使用这一行命令来实现:

A=`find ~ -print` | ls -l –full-time $A 2>/dev/null | grep “Jun 27″ | grep 1998

使用find 命令查找某个时间段的shell怎么写。比如11点到12点的。thanks

创建一个脚本judgetime,内容如下:

ls -l $*|awk ‘{split($8,hour,”:”);if((hour[1]>23 || hour[1] < 1)&&hour[1]<24)print}’

到要查找的目录下,运行

find ./ -name “*” -exec judgetime {} \;

注意时间格式为24小时制。

thank you ,如果我要精确到分钟呢

touch -t 04241112 starttemp #精确到12分钟

touch -t 04241220 endtemp #截止到12点20

find [dir] -newer starttemp -a ! -newer endtemp -exec ls -l {} \;

newer?

那昨天12:10文件如何呢?

每天执行的时候,用当天的日期和时间戳替换一下不就行了吗?

我不知道他是不是把所有的11:00~12:00的都找出来,是不是只执行一次还是每天都执行?

这种情况俺猜想是自己的东西放在哪忘了,只记得当时是深夜了。

有道理!

不愧是斑竹!

不光知道怎么解决问题,还知道在什么情况下出现这类问题,佩服佩服!

问题又出现了。创建这个文件的时候。本来应该是时间的一栏现在写上了2002,而不是12:00.

等到12:00过了吧!

删除指定日期的文件

find ./ -name 文件名 -exec rm -f {} \;

例:删除当前30天内没用过的文件,用如下命令:

find / -atime +30 -exec rm -f {} \;

我自己试着写了一小段SHELL,也用ll ,grep, rm 几个命令,用起来还差强人意。

对过滤出来的文件名列表中用了一个FOR语句,再执行rm 。现在我想把这段SHELL 扩展一下让它每天定时运行将 n 天前的文件删掉,有没有人能给我一些提示,谢谢!

还有个问题,对于前面那位朋友提到的”find / -atime +30 -exec rm -f {} \;

“方法,我很早就试过几次,不过好像都不太对,参数 -atime n 是查找n天前被访问过的文件,我不明白的是这里的时间参照点是什么,以及这个n天是怎么计算的。

问 题二、对于”ll |cut -f 1” 这个命令我是不是用错了,我只想取出 ll 中列出的文件名,但用cut -f 命令做不到 ,我只好换用 ll |cut -c 59- 这种方式得到我要的文件名,but it’s a pool idear !我也试过用awk ,好像也不对,看看大家可不可以给我一些小小的提醒,TKS SO MUCH

问题三、如何改变 I结点 的日期格式 我现在的系统显示的格式是:

-rw-r—– 1 msahz01 users 2253 2002年2月 2日 poheader.i

我想把这换成

-rw-rw-rw- 1 house users 2193 Apr 19 2001 hkdisp.p

如何才能做到这点?

awk 应该可以

ll | awk ‘{print $9}’

删除多少天之前的文件

find /yourpath -mtime +31 -exec rm {} \;

find /yourpath -mtime +366 -exec rm {} \;

find中, -ctime, -mtime及其-atime有何区别

请问 -ctime 和 -mtime 有什么关系 ?

如果父目录的 ctime 改变, 那它下面的文件的 ctime 就会自动都改了吗 ?

-ctime 和 -mtime ,-atime 这些信息是存在哪儿呢 ?

我用 -mtime -1 找到了新建或改的文件.

但怎样才能找到一天内 mv 来的文件呢( 它们的时间是原有的时间,早于一天 ) ?

用-newer选项啊。

你可以先touch一个你想要的时间的文件如下:

$ touch -t 08190800 test

$ ls -l test

-rw-r–r– 1 dba other 0 Aug 19 08:00 test

然后

$ find . -newer test -print

.

./.sh_history

$ ls -l .sh_history

-rw——- 1 dba other 154 Aug 20 17:39 .sh_history

用touch可以写出你想要的任何时间的文件,然后用-newer ,! -newer选项即可成功。

1.ctime含inode信息修改的时间.mtime只指文件内容建立或修改的时间.

2 不会.

3.这些信息应该是存在文件系统的超级块里.

我查了书 -ctime 是指 inode 的改变(或称文件的状态改变).

请问 inode 存了哪些信息 ?

做了些小测试,-mtime 改, -ctime 一定也改.

改文件名, -ctime 也会改.

谁能回答 i-node 存了哪些东西 ?

vi /usr/include/sys/inode.h

班主,我不能 access /usr/include/sys/inode.h .

摘书如下:

Directories contain directory entries. Each entry contains a file or subdirectory name and an index node reference number (i-node number). To increase speed and enhance use of disk space, the data in a file is stored at various locations in the computer’s memory. The i-node contains the addresses used to locate all the scattered blocks of data associated with a file. The i-node also records other information about the file including time of modification and access, access modes, number of links, file owner, and file type.

可我发现 -atime 改了, -ctime 还没改. why ?

( 我先 cat 一个 ASCII 文件,再用 -atime -1 有它用 -ctime -1 居然没有它.)

着岂不跟 inode 信息改变, ctime 就改矛盾吗?

我不同意你贴出来的那段文章,正如我提到的那样,atime,ctime,mtime是放到超级块里,在sco unix下是一种叫stat的结构.(stat_32),不同的系统文件系统可能不同.

sco 下inode的结构如下:

typedef struct inode

{

struct inode *i_forw; /* inode hash chain */

struct inode *i_back; /* ‘’ */

struct inode *av_forw; /* freelist chain */

struct inode *av_back; /* ‘’ */

int *i_fsptr; /* “typeless” pointer to fs dependent */

ino32_t i_number; /* i number, 1-to-1 with dev address */

ushort i_ftype; /* file type = IFDIR, IFREG, etc. */

short i_fstyp; /* File system type */

off_t i_size; /* size of file */

ushort i_uid; /* owner */

ushort i_gid; /* group of owner */

ushort i_flag;

ushort i_want; /* i_flag extension to avoid MP races */

ushort i_count; /* reference count */

short i_nlink; /* directory entries */

dev_t i_rdev; /* Raw device number */

#define i_namtype i_rdev /* i_ftype==IFNAM subtype */

dev_t i_dev; /* device where inode resides */

struct mount *i_mton;/* ptr to mount table entry that */

/* this directory is mounted on */

struct region *i_rp; /* ptr to shared region if any */

struct stdata *i_sp; /* ptr to associated stream */

struct iisem *isem; /* ptr to XENIX semaphores */

struct iisd *isd; /* ptr to XENIX shared data */

} i_un;

#define i_mnton i_un.i_mton /* i_ftype==IFDIR IMOUNT */

#define i_rptr i_un.i_rp /* i_ftype==IFREG || i_ftype==IFBLK */

#define i_sptr i_un.i_sp /* i_ftype==IFCHR || i_ftype==IFIFO */

#define i_sem i_un.isem /* i_ftype==IFNAM && i_namtype==IFSEM */

#define i_sd i_un.isd /* i_ftype==IFNAM && i_namtype==IFSHD */

struct fstypsw *i_fstypp; /* ptr to file system switch FSPTR */

long *i_filocks; /* pointer to filock (structure) list */

unsigned long i_mappages; /* number of pages currently cached */

unsigned long i_vcode; /* read-ahead block save (NFS) */

short i_wcnt; /* write open count or ITEXT count */

struct lockb i_cilock; /* tas to synchronize i_flag changes */

ushort i_rdlocks; /* count of non-exclusive lockers */

} inode_t;

所以,访问一个文件不能改变inode信息.

使用chown, chgrp, chmod命令可以很好的比较mtime和ctime

chown改变一个文件的属主,用ctime可以找到,用mtime便找不到.

试试看.

多谢斑竹! 我是在 Solaris 上面试的.我是对 -ctime 不明白.

试的结果如下:

修改文件,-mtime 改了, -ctime 也会改.

访问文件,-atime 改了, -ctime 没变.

chown, chgrp, chmod,mv, 都会使 -ctime 改变,但不影响 -atime 和 -mtime.

touch 可以改 -mtime and/or -atime,但 touch -a 只改访问时间时,-ctime也改了.

touch -m 改修改时间时,-ctime当然也改了.

好象还有别的很多东西可以令 -ctime 改变, 搞不清楚.

有什么方法可以显示 -mtime,atime,ctime 吗?

可以用 -ctime 来实现对目录的增量文件进行备份或 transfer 吗 ?

多谢!

没有什么工具显示,(可能是俺不知道)

把下面程序里的st_mtime换成st_ctime,或st_atime便可以得到你要的了.

#include

int

main (int argc, char **argv)

{

struct stat buf;

char date[80];

char fname[80];

printf(“Enter filename (with full path) to check mtime : “);

scanf(“%s”,fname);

stat(fname, &buf);

printf (“mtime (in sec) of %s = %ld\n”, fname, buf.st_mtime);

strcpy(date, ctime((time_t *)&(buf.st_mtime)));

printf (“mtime (in date) of %s = %s\n”, fname, date);

}

至于文件备份,有什么不可以的么?

mtime ls -l 最近修改文件内容的时间

atime ls -lu 最近访问文件的时间

ctime ls -li 最近文件有所改变的状态 ,如文件修改,属性\属主 改变 ,节点 ,链接变化等 ,应该是不拘泥只是时间前后的改变

俺看了ls的帮助,以为只是按ctime或atime排序,显示的时间还是mtime.

仔细比较了一下,ayhan说的是对的.谢谢ayhan.

多谢 ahyan 提示 ! 我在 Solaris 上试过如下:

mtime 用 ls -l 看到

atime 用 ls -lu 看到

ctime 用 ls -lc 看到. (ls -li 只有 inode number)

摘书如下:

-c Uses time of last modification of the i-node (file

created, mode changed, and so forth) for sorting (-t)

or printing (-l or -n).

-u Uses time of last access instead of last modification

for sorting (with the -t option) or printing (with the

-l option).

-i For each file, prints the i-node number in the first

column of the report.

 

分类: Linux命令大全 标签:

常用命令速查备忘

2017年1月20日 评论已被关闭

常用命令速查备忘
http://blog.chinaunix.net/uid-26495963-id-3184804.html
一. 启动,关机,登入,登出相关命令

[login] 登录

[logout] 登出

[exit] 登出

[shutdown] 停止系统

[halt] 停止系统

[reboot] 重启动

[poweroff] 切断电源

[sync] 把内存里的内容写入磁盘

[lilo] 安装lilo启动管理程序

[grub] 安装lilo启动管理程序

二. Shell相关命令
[chsh] 切换Shell

[history] 显示命令履历

[alias] 设置命令别名

[unalias] 取消命令别名

[which] 显示命令所在位置

[type] 查询命令种类

[echo] 显示字符串或者变量内容

[set] 设置/显示Shell变量

[printenv] 显示环境变量

[export] 设置环境变量

[env] 设置临时环境变量

[unset] 释放环境变量

[setenv] 设置环境变量

[unsetenv] 释放环境变量

[source] 执行文件当中的命令

[man] 查询命令手册

[info] 查询超文本命令手册

[whatis] 显示命令简介

[apropos] 通过关键字查询手册

三. 用户管理相关命令

[su] 切换到其他用户

[useradd] 追加用户

[adduser] 追加用户

[userdel] 删除用户

[usermod] 修改用户设置

[chfn] 修改用户私人信息

[groupadd] 追加组

[groupdel] 删除组

[groupmod] 修改组设置

[passwd] 更改密码

[whoami] 显示用户名

[logname] 显示登录用户帐号

[users] 显示所有登录用户信息

[who] 查询登录用户信息

[w] 查询登录用户信息

[id] 显示指定用户的ID信息

[groups] 显示指定用户的所属组

[finger] 显示指定用户的个人信息

[mesg] 开关与他人收发消息

[write] 给其他用户发消息

[wall] 给所有用户发消息

[talk] 和其他用户聊天

四. 系统消息相关命令

[top] 提供了实时的对系统处理器的状态监视

[date] 显示/设置当前时间

[uptime] 显示系统运行时间

[arch] 显示机器的核心构架(如i386)

[uname] 显示操作系统信息

[tty] 显示终端名

[last] 显示登录/登出在履历

[lastb] 显示非法登录信息

[dumpkeys] 显示当前键盘配置

[loadkeys] 变更键盘配置

[df] 查询磁盘使用信息

[du] 查询磁盘使用信息

[dmesg] 显示系统启动消息

[script] 保存输入输出到文件

五. 文件操作相关命令

[ls] 显示文件列表

[tree] 显示目录树

[pwd] 显示当前路径

[cd] 更改当前路径

[pushd] 追加路径到目录堆栈

[popd] 从目录堆栈删除路径

[dirs] 显示目录堆栈的内容

[mkdir] 创建路径

[rmdir] 删除路径

[cp] 复制文件/目录

[rm] 删除文件/目录

[mv] 移动文件/目录,修改文件名

[chown] 更改文件/目录的所有者

[chgrp] 修改文件/目录的所有组

[chmod] 修改文件/目录的权限

[touch] 更改文件时间

[ln] 建立文件/目录链接

[find] 查找文件

[whereis] 显示文件存在的路径名

[file] 查询文件种类

[size] 查询文件大小

六. 文件编辑相关命令

[cat] 显示文件内容

[tee] 输出到文件和屏幕

[more] 分屏显示文件内容

[less] 分屏显示文件内容

[head] 显示文件头部内容

[tail] 显示文件尾部内容

[fold] 折叠显示长行

[sort] 排列文件的行

[cmp] 比较文件内容

[diff] 显示文件差异

[nkf] 更改日语文件编码

[dd] 变更文件之后复制

[wc] 统计文本单词数,文件大小等

[split] 分割文件

[paste] 以行连接文件

[join] 以字段连接文件

[grep] 查询文字

[uniq] 过滤重复部分显示文件内容

[tr] 替换文字

[sed] 替换文字

[vi] vi文字编辑器

七. 压缩/解压缩相关命令

[tar] 压缩/解压缩文件

[compress] 压缩/解压缩文件

[uncompress] 解压缩

[gzip] 压缩/解压缩文件

[gunzip] 解压缩

[zcat] 显示压缩文件的内容

[lha] 压缩/解压缩文件

[uuencode] 把二进制文件编码为文本文件

[uudecode] 把经过编码的文本文件还原为二进制文件

八. MS-DOS工具集

[mtools]命令

[mdir] 显示文件列表

[mcd] 改变当前目录

[mmd] 新建目录

[mrd] 删除目录

[mdeltree] 删除目录树

[mcopy] 复制文件

[mdel] 删除文件

[mmove] 移动文件

[mren] 更改文件或目录名

[mattrib] 修改文件属性

[mtype] 显示文件内容

[mdu] 查询文件或目录大小

[minfo] 显示磁盘信息

[mformat] 以MS-DOS方式格式化磁盘

[mlabel] 设置磁盘标签

九. 控制外部设备相关命令

[mount] mount上设备

[umount] 解除已经mount上的设备

[eject] 弹出(CD/DVD等)

[fdformat] 格式化软盘

[fdisk] 配置/显示硬盘分区

[mkfs] 格式化磁盘分区

[fsck] 检查/修复磁盘错误

[lpr] 打印到打印机

[lprm] 中断打印任务

[lpq] 显示打印任务的状态

[lpc] 管理/控制打印任务

[ifconfig] 显示/设定NIC配置

十. 进程及任务管理相关命令

[ps] 显示正在运行的进程

[jobs] 显示后台运行任务

[fg] 把任务切换到前台

[bg] 把任务切换到后台

[kill] 中止进程或任务

[killall] 中止进程或任务

[wait] 等待进程或任务的结束

[at] 设置定时执行任务

[atq] 显示尚未执行的任务

[atrm] 删除定时执行任务

[batch] 在系统负荷减轻的时候执行任务

[nice] 改变优先度并执行任务

[nohup] 在后台执行任务,Logout之后也不退出

[sleep] 休眠一定的时间

[crond] 用来定期执行程序的命令

[screen] 可以在多个进程之间多路复用一个物理终端的窗口管理器

十一. 网络管理相关命令

[netstat] 显示当前网络连接状况

[route] 显示/设置路由

[host] 显示网络主机情况

[hostname] 显示/设置当前主机的名字

[ping] 确认和远程机器的连接情况

[traceroute] 显示路由信息

[rwho] 查询网上机器的登陆用户

[ruptime] 查询网上机器的系统运行时间

[rlogin] 登陆到远程机器

[telnet] 用telnet登陆到远程机器

[rsh] 给远程机器发送命令

[rcp] 在远程机器之间复制文件

[mail] 收取邮件

[sendmail] 发送邮件

[mailq] 确认邮件队列

[ftp] 用ftp传输文件

十二. 其他命令

[cal] 显示日历

[clear] 清屏

[gcc] 编译C语言代码

[as] 汇编

[bc] 计算

[rpm]Redhat的包管理

[dpkg] Debain的包管理

[installpkg] Slackware的包安装(删除命令则是removepkg)

[xf86setup ,turboxfg,Xconfigurator] 配置X服务

[startx] 启动 X-Window 图形界面

分类: Linux命令大全 标签:

常用端口简介

2017年1月17日 评论已被关闭

常用端口简介

1) 公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。
2) 注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。
3) 动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始

用端口对照
端口:0
服务:Reserved
说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。
端口:1
服务:tcpmux
说明:这显示有人在寻找SGI Irix机器。Irix是实现tcpmux的主要提供者,默认情况下tcpmux在这种系统中被打开。Irix机器在发布是含有几个默认的无密码的帐户,如:IP、GUEST UUCP、NUUCP、DEMOS 、TUTOR、DIAG、OUTOFBOX等。许多管理员在安装后忘记删除这些帐户。因此HACKER在INTERNET上搜索tcpmux并利用这些帐户。
端口:7
服务:Echo
说明:能看到许多人搜索Fraggle放大器时,发送到X.X.X.0和X.X.X.255的信息。
端口:19
服务:Character Generator
说明:这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时会发送含有垃圾字符的数据流直到连接关闭。HACKER利用IP欺骗可以发动DoS攻击。伪造两个chargen服务器之间的UDP包。同样Fraggle DoS攻击向目标地址的这个端口广播一个带有伪造受害者IP的数据包,受害者为了回应这些数据而过载。
端口:20、21
服务:FTP
说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录。木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口。
端口:22
服务:Ssh
说明:PcAnywhere建立的TCP和这一端口的连接可能是为了寻找ssh。这一服务有许多弱点,如果配置成特定的模式,许多使用RSAREF库的版本就会有不少的漏洞存在。
端口:23
服务:Telnet
说明:远程登录,入侵者在搜索远程登录UNIX的服务。大多数情况下扫描这一端口是为了找到机器运行的操作系统。还有使用其他技术,入侵者也会找到密码。木马Tiny Telnet Server就开放这个端口。
端口:25
服务:SMTP
说明:SMTP服务器所开放的端口,用于发送邮件。入侵者寻找SMTP服务器是为了传递他们的SPAM。入侵者的帐户被关闭,他们需要连接到高带宽的E-MAIL服务器上,将简单的信息传递到不同的地址。木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口。

端口:31
服务:MSG Authentication
说明:木马Master Paradise、Hackers Paradise开放此端口。
端口:42
服务:WINS Replication
说明:WINS复制
端口:53
服务:Domain Name Server(DNS)
说明:DNS服务器所开放的端口,入侵者可能是试图进行区域传递(TCP),欺骗DNS(UDP)或隐藏其他的通信。因此防火墙常常过滤或记录此端口。
端口:67
服务:Bootstrap Protocol Server
说明:通过DSL和Cable modem的防火墙常会看见大量发送到广播地址255.255.255.255的数据。这些机器在向DHCP服务器请求一个地址。HACKER常进入它们,分配一个地址把自己作为局部路由器而发起大量中间人(man-in-middle)攻击。客户端向68端口广播请求配置,服务器向67端口广播回应请求。这种回应使用广播是因为客户端还不知道可以发送的IP地址。

端口:69
服务:Trival File Transfer
说明:许多服务器与bootp一起提供这项服务,便于从系统下载启动代码。但是它们常常由于错误配置而使入侵者能从系统中窃取任何 文件。它们也可用于系统写入文件。
端口:79
服务:Finger Server
说明:入侵者用于获得用户信息,查询操作系统,探测已知的缓冲区溢出错误,回应从自己机器到其他机器Finger扫描。
端口:80
服务:HTTP
说明:用于网页浏览。木马Executor开放此端口。

端口:88
说明:Kerberos krb5。另外TCP的88端口也是这个用途。
端口:99
服务:Metagram Relay
说明:后门程序ncx99开放此端口。
端口:102
服务:Message transfer agent(MTA)-X.400 over TCP/IP
说明:消息传输代理。
端口:109
服务:Post Office Protocol -Version3
说明:POP3服务器开放此端口,用于接收邮件,客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交 换缓冲区溢出的弱点至少有20个,这意味着入侵者可以在真正登陆前进入系统。成功登陆后还有其他缓冲区溢出错误。

端口:110
服务:SUN公司的RPC服务所有端口
说明:常见RPC服务有rpc.mountd、NFS、rpc.statd、rpc.csmd、rpc.ttybd、amd等
端口:113
服务:Authentication Service
说明:这是一个许多计算机上运行的协议,用于鉴别TCP连接的用户。使用标准的这种服务可以获得许多计算机的信息。但是它可作为许多服务的记录器,尤其是FTP、POP、IMAP、SMTP和IRC等服务。通常如果有许多客户通过防火墙访问这些服务,将会看到许多这个端口的连接请求。记住,如果阻断这个端口客户端会感觉到在防火墙另一边与E-MAIL服务器的缓慢连接。许多防火墙支持TCP连接的阻断过程中发回RST。这将会停止缓慢的连接。

端口:119
服务:Network News Transfer Protocol
说明:NEWS新闻组传输协议,承载USENET通信。这个端口的连接通常是人们在寻找USENET服务器。多数ISP限制,只有他们的客户才能访问他们的新闻组服务器。打开新闻组服务器将允许发/读任何人的帖子,访问被限制的新闻组服务器,匿名发帖或发送SPAM。
端口:135
服务:Location Service
说明:Microsoft在这个端口运行DCE RPC end-point mapper为它的DCOM服务。这与UNIX 111端口的功能很相似。使用DCOM和RPC的服务利用计算机上的end-point mapper注册它们的位置。远端客户连接到计算机时,它们查找end-point mapper找到服务的位置。HACKER扫描计算机的这个端口是为了找到这个计算机上运行Exchange Server吗?什么版本?还有些DOS攻击直接针对这个端口。
端口:137、138、139
服务:NETBIOS Name Service
说明:其中137、138是UDP端口,当通过网上邻居传输文件时用这个端口。而139端口:通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于windows文件和打印机共享和SAMBA。还有WINS Regisrtation也用它。
端口:143
服务:Interim Mail Access Protocol v2
说明:和POP3的安全问题一样,许多IMAP服务器存在有缓冲区溢出漏洞。记住:一种LINUX蠕虫(admv0rm)会通过这个端口繁殖,因此许多这个端口的扫描来自不知情的已经被感染的用户。当REDHAT在他们的LINUX发布版本中默认允许IMAP后,这些漏洞变的很流行。这一端口还被用于IMAP2,但并不流行。

端口:161
服务:SNMP
说明:SNMP允许远程管理设备。所有配置和运行信息的储存在数据库中,通过SNMP可获得这些信息。许多管理员的错误配置将被暴露在Internet。Cackers将试图使用默认的密码public、private访问系统。他们可能会试验所有可能的组合。SNMP包可能会被错误的指向用户的网络。
端口:162
说明:SNMP Trap(SNMP陷阱)

端口:177
服务:X Display Manager Control Protocol
说明:许多入侵者通过它访问X-windows操作台,它同时需要打开6000端口。
端口:389
服务:LDAP、ILS
说明:轻型目录访问协议和NetMeeting Internet Locator Server共用这一端口。
端口:443
服务:Https
说明:网页浏览端口,能提供加密和通过安全端口传输的另一种HTTP。
端口:445
说明:Common Internet File System(CIFS)(公共Internet文件系统)
端口:456
服务:[NULL]
说明:木马HACKERS PARADISE开放此端口。
端口:464
说明:Kerberos kpasswd(v5)。另外TCP的464端口也是这个用途。

分类: Linux入门大全 标签:

tcp不能保证数据传输的万无一失

2017年1月16日 评论已被关闭

tcp不能保证数据传输的万无一失
http://www.cppblog.com/isware/archive/2011/07/21/151548.html
■tcp认识的误区
应用开发人员常常遇到这样的困惑:为什么用tcp写的应用还会出现数据丢失呢?很多人都以为tcp 协议可以确保数据的传输,但事实上没有任何一种协议可以做到这一点。tcp所能做只是传输数据,如果失败了,它会通知你,但它无法告诉你有多少数据没有被正确传送。

tcp 协议中的应答机制使得发送方的tcp栈确保接收方tcp栈收到了数据。

tcp包头包括32位的顺序码和应答码,顺序码是在连接建立时随机产生的,并随着传输的字节数递增。当数据被接收时,接收方的tcp栈会给发送方发送应答码, 如果发送方没收到应答码, 它就会重发该数据。发方和收方的顺序码是各自独立的。
■tcp是一个窗口式的协议
tcp是一个窗口式的协议。tcp包头数据中也包含窗口的大小,它告诉远端再传多少数据后就必须停止。窗口大小实际上就是缓存区的大小,当缓冲区满的 时候,窗口就会关闭。当发送方收到的应答中窗口大小为零时,它会自动停止发送。发送方会记住自己发送了多少数据,即使没有收到窗口大小为零的应答,它也不 会发送大于缓冲区的数据。

通常接收方应答这些数据时,应用会不断读数据,这样窗口就经常处于开放状态。

导致窗口关闭的最常见原因是i/o阻塞。这通常是临时性的,一般i/o通畅后,缓存(窗口)会自动开放。第二个原因就是应用代码中的bug使得接收应用程序忽略了连接,重要的不在于接收方读没读数据,而在于发送方在收到应答后是否正确地发送了数据。
■tcp的缓存机制
发送tcp栈在收到应答前必须对数据进行缓存,而应用程序在调用tcp栈发送数据时并不知道数据已经在缓存区了。只要发送tcp栈还有空间,它就会接收来自应用的数据并进行缓存。一旦缓存满了导致应用程序无法继续发送,它就会认为有问题了。

如果问题是发送tcp栈没有收到应答,那么它会重发,等待应答的时间会越来越长,直至最终放弃并重新建立连接。重新连接后本地缓存会清空,并通知应用 程序。但是至于有多少数据在缓存区没有收到应答仍不得而知。本地tcp栈无法知道远端是否收到了数据,也不知道是否收到了远端应答。

如果问题是窗口关闭了,那么发送tcp栈会定期发送窗口探针来探测接收方窗口是否开放。接收tcp栈必须应答窗口探针包。应答包含当前窗口大小。在收到探针应答前,发送tcp栈只能等待。
■路在何方
也许有人会说:既然如此,为何还要用tcp协议?如果应用中必须包括数据标识和应答,为什么不用udp协议?tcp的优势在于你不必担心数据传输机 制,如果数据包在传输过程中由于路由的关系,其到达顺序被打乱,接收tcp栈会将这些数据包按其顺序码重新排列,从而保证了数据的正确性。而如果采用 udp的话,则应用中必须设法提供所有这些机制。

如果发生了传输线路中断,仅有应用层的应答是不够的。按照应用层应答机制,在重建连接后,发送方会重发那些没有收到应答的数据包,但是有可能虽然这些 应答丢了,可数据却到达了,并已用于应用程序。为了防止这种情况,发送应用方需保存没被接收应用应答的数据段的标识 ,接收应用方也应保存自己已接收和处理过的数据段的标识。当重建连接时,发送方将发送第一个没有收到应答的数据段,或者询问接收方最后发出的应答进行确 认。为了确保数据传输的无误, 应该保证接收应用方保存的数据段标识在应用重启或系统瘫痪时仍能安然无恙。

尽管tcp协议十分优秀,但它并不能确保数据数据传输万无一失。

分类: Linux入门大全 标签:

用curl和wget命令远程查看服务器信息

2017年1月10日 评论已被关闭

用curl和wget命令远程查看服务器信息
http://blog.csdn.net/androidzhaoxiaogang/article/details/8186027
curl -I www.csdn.net
TTP/1.1 200 OK
erver: nginx/0.7.68
ate: Thu, 15 Nov 2012 03:09:17 GMT
ontent-Type: text/html; charset=utf-8
onnection: keep-alive
ary: Accept-Encoding
ache-Control: max-age=900
ontent-Length: 132193
ontent-Location: http://www.csdn.net/index.htm
ast-Modified: Thu, 15 Nov 2012 03:01:12 GMT
ccept-Ranges: bytes
Tag: W/”1e281678ddc2cd1:1e7e”
-UA-Compatible: IE=EmulateIE7
-Powered-By: ASP.NET
$ wget -S –spider www.baidu.com
开启 Spider 模式。检查是否存在远程文件。
–2012-11-15 11:16:25– http://www.baidu.com/
正在解析主机 www.baidu.com (www.baidu.com)… 119.75.217.56, 119.75.218.77
正在连接 www.baidu.com (www.baidu.com)|119.75.217.56|:80… 已连接。
已发出 HTTP 请求,正在等待回应…
HTTP/1.1 200 OK
Date: Thu, 15 Nov 2012 03:16:27 GMT
Server: BWS/1.0
Content-Length: 9803
Content-Type: text/html;charset=gbk
Cache-Control: private
Expires: Thu, 15 Nov 2012 03:16:27 GMT
Set-Cookie: BAIDUID=D9437ABF9E8126F93E0DD75AB654B85B:FG=1; expires=Thu, 15-Nov
-42 03:16:27 GMT; path=/; domain=.baidu.com
P3P: CP=” OTI DSP COR IVA OUR IND COM ”
Connection: Close
长度:9803 (9.6K) [text/html]
存在远程文件且该文件可能含有更深层的链接,
但不能进行递归操作 — 无法取回。

分类: Linux命令大全 标签: ,