(9)Linux ---- 我的linux命令学习笔记(20150831)

===LINUX常用命令总结===

1%%%%%%%%%
cal
日历形式显示当前日期年月日,当前天选中
cal 2014
日历形式显示2009年全部      calendar就是日历的英文单词 

2%%%%%%%%%
logout
可以退出系统,这个和Windows中的注销是同等效果。
输入这个命令按下Enter之后,我们就又回到我们的登录界面了。

linux命令中 logout和exit的区别:
logout 注销用户   exit 退出控制台,对于多层shell,用于逐层退出,到最顶层shell,作用就和logout相同。
如果没有切换过用户的话,这两个命令都是退出控制台了。 如果切换过用户的话,这两个命令都是注销当前用户,
返回上一个用户。

3%%%%%%%%%
Shutdown
关闭系统使用Shutdown命令,确保用户和系统的资料完整。只有root用户才能使用这个命令。一般的用户是不允许执行这个命令的。

shutdown [options] when [message]
options: -r 表示重启,-h表示系统服务停滞(halt)后,立刻关机 ,-f 表示快速重启
when:   为shutdown指定时间。hh:mm:绝对时间,hh指小时,mm指分钟;如08:30,+m 表示m分钟后执行,now 等效于 +0,也就是立刻执行
message: 表示系统的广播信息,一般提示各个用户系统关机或重启,要求用户保存资料后退出。

shutdown -h now 立刻关机
shutdown -h 21:30 今天21:30关机
shutdown -h +10 十分钟后关机
shutdown -r now 立刻重启
shutdown -r +10 ‘the system will reboot’  10分钟后重启,管理员提示用户系统要重启了,便于用户保存工作中的资料。

4%%%%%%%%%
ls
显示当前目录下的所有文件及目录
白色的文件:一般的文件
蓝色的文件:目录
绿色的文件:可执行文件

ls -l (“ls -l”有一个简写是“ll”)
直接使用“ls”可能看到的信息有限,为了知道关于文档的更多资料,我们可以增加一个参数“-l”,这样可以看到更多关于文件的信息:

ls /var    只显示var下的
ls /var/*  显示var下的 同时还显示 子目录的
ls */20150327/*  显示当前文件夹中名为20150327的子文件夹中的所有文件
 
示例:
drwxr-x--- 2 root  adm    4096 2013-08-07 11:03 apache2
-rwxr-xr-x 2 root  root   4096 2013-08-07 09:43 apparmor

第一列 : “drwxr-x---”  表识 文件的类型 和 文件权限 
第二列:  “2”是纯数字 ,表示 文件链接个数
第三列 : “root” 表示文件的所有者   
第四列:  “adm”  表示文件的所在群组 
第五列:  “4096”,表示为文件长度(大小)
第六列:  “2013-08-07 11:03”,表示文件最后更新(修改)时间
第七列:  “apache2” 表示文件的名称

“drwxr-x---” 含义:两部分组成 ,
一部分是第一列即为“d” ,表示文件类型(目录或文件夹),
另一部分是“rwxr-x---” ,表示文件权限,权限有分为三段:
即为 “ rwx ”,“  r-x  ”和 “ ---  ”分别表示文件所有者的权限,文件所属组的权限 和其他用户对文件的权限。

文件类型:
d :目录   
- :文件   
l :链接   
s :socket   
p :named pipe   
b :block device   
c :character device 

文件权限:
r :含义为 “可读”,用数字 4 表示 
w:含义为 “可写”用数字 2 表示
X(小X):含义为“可执行”用数字 1 表示
-:含义为“无权限”用数字0 表示

例一:列出/home/peidachang文件夹下的所有文件和目录的详细资料
ls -l -R /home/peidachang    # -R, –recursive 同时列出所有子目录层

例二:列出当前目录中所有以“t”开头的目录的详细内容,可以使用如下命令:
ls -l t*   

例三:只列出文件下的子目录
命令:ls -F /opt/soft |grep /$  

解释: 
ls -F的意思是把文件按照类型归类,并且在末尾加上/ 或者 *等符号标识
| 管道输出,把前面命令的结果当做输入传给后面的命令
grep /$的意思是从中挑出以/结尾的行,/就是标识是目录
-F, --classify  append indicator (one of */=>@|) to entries 
-F开关对可执行文件添加一个*号,为目录添加一个/号,为符号链接添加一个@号

例四:列出目前工作目录下所有名称是s开头的档案,愈新的排愈后面,可以使用如下命令:
ls -ltr s*  # -t 以文件修改时间排序  -r, –reverse 依相反次序排列

例五:列出目前工作目录下所有档案及目录;目录于名称后加"/", 可执行档于名称后加"*" 
ls -AF       #-A 同-a,但不列出“.”(表示当前目录)和“..”(表示当前目录的父目录)

$ ls -a
.  ..  recordFlumeHearth.sh  recordRun110.log
$ flumeHealth]$ ls -A
recordFlumeHearth.sh  recordRun110.log

例六:计算当前目录下的文件数和目录数
ls -l * |grep "^-"|wc -l    ---文件个数  
ls -l * |grep "^d"|wc -l    ---目录个数

例七: 在ls中列出文件的绝对路径
ls | sed "s:^:`pwd`/:"   # sed命令 在开头加入`pwd`/

例十:递归列出当前目录下的所有文件(包括隐藏文件)的绝对路径
find $PWD | xargs ls -ld    # 变量$PWD代表当前目录


5%%%%%%%%%
ls -a  (ls -al  //  ls -la // ls -a -l // ls -l -a 这些写法都是等效的)
系统中一些文件,和Windows中的系统文件一样,这些文件一般是不显示出来的,那么我们可以使用“-a”参数来显示隐藏的文件
可以发现,隐藏文件是以“.”开头的文件。这些文件一般都有特殊的作用,如果显示出来,有可能被用户不小心删除。

我们发现目录下面有两个奇怪的家伙,一个是“.”,一个是“..”。其实这又要讲到路径的知识,路径的表示方法有两种:

A :绝对路径:就是表示出目标文件或子目录的目录树结构。我们这个例子中的目录“one”,的绝对路径表示方法为“/root/one”,
    如果one目录下还有一个目录xu,那么目录xu的绝对路径就是:“/root/one/xu”。

B :相对路径:就是相对于当前工作目录的路径来表示位置。相对路径中有两个符号,就是“..”,“.”。“..”表示当前当前工作目录的上一层目录。
    如当前我们处在one目录中,我们作如下操作:cd .. 即返回上层目录。
    “.”表示当前的工作目录。如果当前我们处在one目录中,那么“.”就表示当前的工作目录one。

ls / (ls -l / 根目录)
上面都是显示当前工作目录中的文件,
如果要显示其他目录中的文件,那么我们只要在“ls”后面加入所要显示的目录的路径。如下所示:

6%%%%%%%%%
mkdir folderName
建立一个目录的时候,我们可以使用“mkdir”命令来建立一个目录
mkdir myfile 建立了一个名字叫“myfile”的目录

实例1:创建一个空目录 
mkdir test1

实例2:递归创建多个目录 
mkdir -p test2/test22/test33 
# -p此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录

实例3:创建权限为777的目录  
mkdir -m 777 test3  #-mode=模式,设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask

实例4:创建新目录都显示信息
mkdir -v test4

tree 文件目录  :显示文件的目录树
实例五:一个命令创建项目的目录结构
mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}
[root@localhost test]# mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}
mkdir: 已创建目录 “scf”
mkdir: 已创建目录 “scf/lib”
mkdir: 已创建目录 “scf/bin”
mkdir: 已创建目录 “scf/doc”
mkdir: 已创建目录 “scf/doc/info”
mkdir: 已创建目录 “scf/doc/product”
mkdir: 已创建目录 “scf/logs”
mkdir: 已创建目录 “scf/logs/info”
mkdir: 已创建目录 “scf/logs/product”
mkdir: 已创建目录 “scf/service”
mkdir: 已创建目录 “scf/service/deploy”
mkdir: 已创建目录 “scf/service/deploy/info”
mkdir: 已创建目录 “scf/service/deploy/product”
[root@localhost test]# tree scf/
scf/
|-- bin
|-- doc
|   |-- info
|   `-- product
|-- lib
|-- logs
|   |-- info
|   `-- product
`-- service
    `-- deploy
      |-- info
        `-- product
12 directories, 0 files

7%%%%%%%%%
rmdir folderName (有前提:这个目录下必须是没有任何文件和文件夹)
删除一个目录。使用这个命令来删除一个目录的时候,那么这个目录下必须是没有任何文件和文件夹。
我们在myfile目录下建立了一个one的目录,当我们删除myfile目录时,提示目录不为空,
所以必须将这个目录下的所有文件和目录全部删除之后,才能删除这个目录。
[root@Linux ~]# mkdir myfile
[root@Linux ~]# cd myfile        cd命令是切换目录,这里就是进入myfile
[root@Linux myfile]# mkdir one
[root@Linux myfile]# cd ..       ..表示当前目录的上一层目录
[root@Linux ~]# rmdir myfile
rmdir: myfile: 目录非空

实例:rmdir -p 当子目录被删除后使它也成为空目录的话,则顺便一并删除  
rmdir -p logs/product #参考:http://www.cnblogs.com/peida/archive/2012/10/27/2742076.html


8%%%%%%%%%
cd 切换目录
cd ~  或者 仅输入  进入用户所在的家目录
cd .. 退回到上级目录
cd -  返回进入此目录之前所在的目录

9%%%%%%%%%
cp
工作的时候,有是需要保存文件的一个副本,便于以后还原。我们可以使用“cp”命令复制文件
如将install.log文件复制一份到当前目录中的one目录中,我们可以使用“cp install.log ./one”就可以了,
注意了,这里使用了相对路径中的“.”, ./one表示当前工作目录下的one目录。

将one文件夹 复制到 two文件夹中 发现没有two目录下没有one文件夹。这个时候我们需要使用参数“-r”,
在cp命令后面加入参数“-r”之后,就可以用来复制目录了。并且会发现原来one目录中的文件也一起被复制了

[root@Linux ~]# cp one two    two目录如果不存在会被创建
cp: 略过目录 “one”            cp: 略过目录 “one”
[root@Linux ~]# cd two
[root@Linux two]# ll
总计 0

[root@Linux ~]# cp -r one two   one中的所有文件会被赋值到two文件夹中,但是文件的修改时间信息对应的刚刚操作时间
[root@Linux ~]# cd two
[root@Linux two]# ll
总计 4
drwxr-xr-x 2 root root 4096 03-19 13:00 one


复制文件并重新命名的新文件
cp install.log install.log.bak   //复制install.log并将文件命名为install.log.bak。
复制了一个文件,并将复制的文件更名,我们可以看到目录下有两个文件了。


10%%%%%%%%%
mv
将一个文件移动到另外一个目录中。除此之外,我们还可以为文件更名
mv install.log.syslog ./one  将当前目录下的install.log.syslog,移动到当前目录下的one目录中
mv install.log install.sys   将install.log这个文件名称变为了install.sys。
mv aa.log  iptest/xx.log     移动带更名

实例1:将文件log1.txt,log2.txt,log3.txt移动到目录test3中。  
mv log1.txt log2.txt log3.txt test3
mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt 
#即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。

实例2:将文件file1改名为file2,如果file2已经存在,则询问是否覆盖
mv -i log1.txt log2.txt

实例3:将文件file1改名为file2,即使file2存在,也是直接覆盖掉。 
mv -f log3.txt log2.txt

实例4:目录的移动 
mv dir1 dir2   #如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。

实例5:移动当前文件夹下的所有文件到上一级目录 
mv * ../

实例6:把当前目录的一个子目录里的文件移动到另一个子目录里
mv test3/*.txt test5

实例7:文件被覆盖前做简单备份,前面加参数-b 
mv log1.txt -b log2.txt

参考:http://www.cnblogs.com/peida/archive/2012/10/27/2743022.html


11%%%%%%%%%
touch
创建文件 。和前面的创建目录(mkdir 创建一个文件夹 即目录 )是有区别的,创建文件是指创建一个一般的普通文件,
并且这个文件为空,我们可以使用touch命令来建立一般文件,

12%%%%%%%%%
rm
删除文件,和前面的rmdir有点区别,不过rm也可以实现删除目录

我们先查看目录下的文件,然后删除这个目录下的文件111.txt,删除的时候,提示我们是否要删除文件,
我们输入“y”,然后删除文件,删除之后,我们查看这个文件夹下的文件,发现少了111.txt文件。
[root@Linux two]# rm 111.txt
rm:是否删除 一般空文件 “111.txt”? y

如果我们不需要系统提示我们就要增加一个参数“-f”,增加参数后,系统没有提示用户,直接删除了文件
这样只要输入命令之后,系统直接删除文件。看如下操作:
[root@Linux two]# rm -f 112.txt

在one目录下建立一个文件 再删除one会提示无法删除。增加参数“-r”就可以了。连目录带内部的文件全删了。
rm -f one/
rm: 无法删除"one/": 是一个目录
rm -rf one  增加参数“-r”就可以了。连目录带内部的文件全删了。

扩充扩充扩充扩充:
find . -name "flume_bjxd*.tmp"|xargs rm -f   
//查找当前目录下所有符合"flume_bjxd*.tmp"条件的 之后 作删除操作。
find . -name "*.o"  | xargs rm -f
//查找当前目录下所有符合"*.o"条件的 之后 作删除操作。
rm -rf "*.o" 
//只是删除当前目录下的所有"*.o"文件,不会递归子目录!


实例一:删除文件file,系统会先询问是否确认删除。 
rm 文件名

实例二:强行删除file,系统不再提示。 
rm -f log1.log    # -f, --force    忽略不存在的文件,从不给出提示。

实例三:删除任何.log文件;删除前逐一询问确认  
rm -i *.log       # -i, --interactive 进行交互式删除

实例四:将 test1子目录及子目录中所有档案删除 (交互式的 会一一确认)
rm -r test1       # -r, -R, --recursive  指示rm将参数中列出的全部目录和子目录均递归地删除。 

实例五:rm -rf test2命令会将 test2 子目录及子目录中所有档案删除,并且不用一一确认
rm -rf  test2 


13%%%%%%%%%
通配符
A:* :任何字符和字符串。
B:? :一个任意字符
C:[abc...] :[]内的任意一个字符。[abc]表示a、b、c任一个字符;有时候也表示范围,如[a-x],表示a到x的任一个字符;[1-9]表示1到9的任一数字。
D:[!abc...]:和上面的相反,表示除[]内的字符外的任意一个字符。

14%%%%%%%%%
pwd
如果切换目录次数太多,可能不知道自己在那个目录,那么就可以使用pwd命令,显示当前所在的目录。
是print working directory的缩写


15%%%%%%%%%
增加用户
我们来看看增加用户的操作。到目前为止,我们都是使用的root用户登录系统,由于root这个用户的权限非常的高,
可以进行任何的操作,所以有的时候,可能破坏系统。如前面的操作,如果执行了一个“rm -rf /*”这个命令,
这样就会把“/”下面的文件全部删除。我们如果使用一般的用户,我们还是可以执行大部分的程序,除了少数的一些
管理员的命令不能执行外,一些目录不能进行操作外,其他的操作我们都可以。所以建议:在使用一般操作的时候,
我们使用一般用户,如果需要对系统进行维护,我们就使用root用户。

“useradd”命令来增加用户,使用“passwd”命令来为用户设置密码。
到此,我们就为系统增加了一个用户“user1”,下次登录的时候,我们就可以使用这个用户了。
注意,这里只有root用户可以设置其他用户的密码,一般用户登录后可以更改自己的密码,但不能更改别人的密码
useradd pan1 //增加用户pan1   
passwd  pan1 //为用户pan1设置密码

user1用户自己登陆后自己修改自己的密码,输入现在的密码,之后输入新的密码即可。
[user1@Linux ~]$ passwd

linux下添加,删除,修改,查看用户和用户组
组操作:
1,创建组groupadd test           //增加一个test组
2,修改组groupmod -n test2 test  //将test组的名子改成test2
3,删除组groupdel test2          //删除 组test2
4,查看组
a),查看当前登录用户所在的组 groups,查看用户名为apac所在组groups apac
b),查看所有组 cat /etc/group
用户操作:
1,增加用户useradd pjm //增加用户pjm    passwd  hellopjm //为用户pjm设置密码
2,修改用户usermod -d /home/test -G test2 test
   将test用户的登录目录改成/home/test,并加入test2组,注意这里是大G。
3,删除用户userdel test 将test用户删除
   gpasswd -a test test2 将用户test加入到test2组
   gpasswd -d test test2 将用户test从test2组中移出
4,查看用户
a),查看当前登录用户  [root@krlcgcms01 ~]# who
b),查看自己的用户名  
[root@krlcgcms01 ~]# whoami    //仅显示用户名  
[root@krlcgcms01 ~]# who am i  //显示用户名等信息  
c),查看单个用户信息
[root@krlcgcms01 ~]# id apacheuser
d),查看用户登录记录
[root@krlcgcms01 ~]# last 查看登录成功的用户记录
[root@krlcgcms01 ~]# lastb 查看登录不成功的用户记录
e),查看所有用户
[root@krlcgcms01 ~]# cut -d : -f 1 /etc/passwd
[root@krlcgcms01 ~]# cat /etc/passwd |awk -F \: '{print $1}'


16%%%%%%%%%
locate
如果知道文件名,却不知道文件在那个目录下面了,我们就可以使用locate命令来搜索文件

[root@Linux one]# locate install.log
/root/install.log
/root/install.log.syslog

看一下,我们一下就搜索了两个与install.log相关的文件,他们都在/root目录下,同时我们感觉到,使用这个命令搜索文件的速度比较快,
其实要使用这个命令,必须配合数据库来使用,因为这个命令是从数据库中来搜索文件,这个数据库的更新速度是7天更新一次(控制台提示
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory如果出现此错误,请执行updatedb命令)。


locate这个命令是从数据库中来搜索文件,这个数据库的更新速度是7天更新一次如下操作:
[root@Linux one]# touch 001.txt
[root@Linux one]# locate 001.txt


发现这个命令找不到新建立的文件,所以我们要使用这个命令搜索文件之前,必须自己更新一下数据库,如下操作:
[root@Linux one]# updatedb
[root@Linux one]# locate 001.txt
/root/one/001.txt

看看,如果执行updatedb这个命令更新数据库之后,我们就可以找到我们所需要的数据。不过更新数据库的时间需要一段时间。
locate经测试 locate root 会把路径中包含root 或者是 名字含有root的 全部列出来。

17%%%%%%%%%
cat
[root@Linux ~]# cat install.log
我们只看到了这个文件的后面的部分,由此可以知道,这个命令适合于显示内容少于屏幕所能显示的最大行数。

cat命令可以显示文件的内容,它反过来写就是tac,而tac恰巧也是一个Linux命令,
它的功能就是把文件内容反过来显示,文件内容的最后一行先显示,第一行最后显示。
原文      cat   tac
1         1      5
2         2      4
3         3      3
4         4      2
5         5      1

cat -n  /etc/passwd   (cat显示内容 每行都显示行号)

18%%%%%%%%%
more
cat命令我们只能看到文件的部分或者只能看比较小的文件,那么more解决这个问题。
显示文件内容-more

[root@Linux ~]# more install.log
注意最下面显示了一个提示,表示只显示这个文件的2%%%%%%%%%,按下空格键就翻下一页,当内容显示完后,就自动的退出,还可以按下“Q”键也可以退出。

空格键 :代表向下翻一页; 
Enter  :代表向下翻一行;
B键    :代表向上翻一页; 
【esc :f】 : 显示当前行数
当内容显示完后,就自动的退出,还可以按下“Q”键也可以退出

19%%%%%%%%%
less install.log
最下面显示的是这个文件的名称,我们可以使用“PageUp”和“PageDown”可以进行上一页和下一页的翻页。
如果要知道具体的控制键,我们可以按下“H”键,可以显示less命令的所有控制键,如果想结束,可以按“Q”键。

20%%%%%%%%%
head是显示文件的头几行,  默认情况下,都是10行
tail是显示文件的尾几行,默认情况下,都是10行
[root@Linux ~]# head install.log
[root@Linux ~]# tail install.log
分别显示的是这个文件的前10行与后10行.

head -5   /etc/passwd    (-数字  显示文件的头(数字)行)
head -n 5 /etc/passwd 查看文件的前N行      //此条命令和上一行的命令实现效果一致

tail -5 /etc/passwd   ( -n 5  显示文件的末尾的5行)
tail -n 5 /etc/passwd                         //此条命令和上一行的命令实现效果一致

tail -F /usr/local/nginx/logs/vdnlog_access.log  //动态的循环显示指定行数的文件尾部

18%%%%%%%%%
使用df 查看当前系统中所有分区占用的大小
df 的结果不是很好认识,加后缀-h比较好读 每一个结果都会有一个后缀
[root@panjinming two]# df
文件系统         1K-块      已用      可用 已用%%%%%%%%% 挂载点
/dev/sda5             22091644   3198500  17770944  16%%%%%%%%% /
tmpfs                   506272        72    506200   1%%%%%%%%% /dev/shm
/dev/sda1               806288     40516    724812   6%%%%%%%%% /boot
/dev/sda3              4031680   2458968   1367912  65%%%%%%%%% /home
[root@panjinming two]# df -h
文件系统      容量  已用  可用 已用%%%%%%%%%%%%%%%%%% 挂载点
/dev/sda5              22G  3.1G   17G  16%%%%%%%%% /
tmpfs                 495M   72K  495M   1%%%%%%%%% /dev/shm
/dev/sda1             788M   40M  708M   6%%%%%%%%% /boot
/dev/sda3             3.9G  2.4G  1.4G  65%%%%%%%%% /home

19%%%%%%%%%
du
du /* (du -h /* )根目录下的所有文件夹中文件的大小

Df只能查看每个分区的使用情况不能使用每个目录的使用情况,
如果向查看每个目录的大小使用du。  

比如查看home目录的大小:
du -s /home
也可以:
du -sh /home

[hadoop2@nn1-hadoop2 ~]$ du -s /home
2620500 /home
[hadoop2@nn1-hadoop2 ~]$ du -sh /home
2.5G /home
[hadoop2@nn1-hadoop2 ~]$ 

du -sh .
查看当前文件夹的总大小

20%%%%%%%%%
chmod
u 文件属主权限。
g 属组用户权限。
o 其他用户权限。

a 所有用户(文件属主、属组用户及其他用户)。


+ 增加权限。
- 取消权限。
= 设定权限。

chmod a-x temp //rw- rw- rw- 收回所有用户的执行权限
chmod og-w temp //rw- r-- r- - 收回属组用户和其他用户的写权限
chmod g+w temp //rw- rw- r- - 赋予属组用户写权限
chmod u+x temp //rwx rw- r- - 赋予文件属主执行权限
chmod go+x temp //rwx rwx r- x 赋予属组用户和其他用户执行权限

chmod -R 664 /temp/*   这样就可以一次将/temp目录下的所有文件连同各个子目录下的文件的权限全部设置为文件属主和属组用户可读和写,
                       其他用户只读。使用- R选项一定要谨慎,只有在需要改变目录树下全部文件权限时才可以使用。
20%%%%%%%%%
who  当前系统登录人信息
who |wc -l   当前系统登录人总数
    |   管道命令      前个命令的结果 作为后个命令的输入
    wc  字数计算程序  可以计算 行数(line)  字数(word) 字符数(character)


21%%%%%%%%%
env
查看所有与此终端进程相关的环境变量


22%%%%%%%%%
history
history命令就是历史记录。它显示了在终端中所执行过的所有命令的历史。
在历史中的命令可以使用  !数字 来执行同样的命令。


23%%%%%%%%%
tar -zxvf  xxx.log将xxx.log文件打包为tar包。


一次解压N多个tar日志文件 (1day 144tar.gz 2.4GB)(所在的文件夹  144个tar.gz 外加  一个脚本 文件 13G)
---------------------------------
#! /bin/bash
#  在脚本所在目录执行
for var in `ls *.tar.gz`
do
  tar -zxvf  ${var}
done
----------------------------------


24%%%%%%%%%
**提升权限至root
sudo su -
exit  退出root权限


25%%%%%%%%%
xshell4操作技巧  12台机器同时执行一样的命令
http://blog.csdn.net/pestd/article/details/7613499
(Xshell会话共享实现多台服务器同步操作)




26%%%%%%%%%
kill -9 pid   强制杀死pid进程


#杀死当前的flume进程
kill -9 `ps -ef | grep flume | grep -v grep | awk '{print $2}' | head -1`
#启动一个新的flume进程
cd /usr/local/flume;./bin/flume-ng agent -n agent -c conf -f ./conf/flume-rollfile_branch_all.properties &
cd /usr/local/flume;./bin/flume-ng agent --conf conf --conf-file ./conf/flume-rollfile_branch_all.properties --name agent &


测试中的启动flume语句
./bin/flume-ng agent --conf conf --conf-file ./conf/flume-rollfile_branch_all.properties  --name agent -Dflume.root.logger=DEBUG,console,LOGFILE
实际中统一启动flume语句 < &后台 >
/usr/local/flume/bin/flume-ng agent -n agent -c conf -f /usr/local/flume/conf/flume-rollfile_branch_all.properties &


查询所有hive进程 并将其杀死
ps -ef|grep hive|grep -v grep|cut -c 9-15|xargs kill -9
---------------------------------
  ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
  管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令:
    “ps - ef”是Red Hat 里查看所有进程的命令。这时检索出的进程将作为下一条命令“grep LOCAL=NO”的输入。
   “grep LOCAL=NO”的输出结果是,所有含有关键字“LOCAL=NO”的进程,这是Oracle数据库中远程连接进程的共同特点。
  “grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
  “cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
  “xargs kill -9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -9”命令的参数,并执行该令。   
“kill -9”会强行杀掉指定进程,这样就成功清除了oracle的所有远程连接进程。其它类似的任务,只需要修改“grep LOCAL=NO”中的关键字部分就可以了。
      ps -ef|grep /usr/local/apache-tomcat-document/|grep -v grep|cut -c 9-15|xargs kill -9
---------------------------------


27%%%%%%%%%
date命令的功能是显示和设置系统日期和时间。 
[hadoop2@nn1-hadoop2 pt]$ date
Wed Jan 21 09:27:26 UTC 2015
[hadoop2@nn1-hadoop2 pt]$ date -d yesterday +%%%%%%%%%Y-%%%%%%%%%m-%%%%%%%%%d  //昨天的时间
2015-01-20
#获取三天前的yyyymmdd 
[hadoop2@nn1-hadoop2 pt]$ date -d '-3 days' +%%%%%%%%%Y%%%%%%%%%m%%%%%%%%%d   //可以-数字 ,也可以 +数字 来得到需要的日期 
20150118

28%%%%%%%%%
不同机器之间文件拷贝
发现linux服务器之间的文件拷贝可以使用scp命令


本地服务器复制到其他服务器   -r目录
scp -r /home/panjinming/flumeHealth  root@10.70.63.27:/home/panjinming/flumeHealth
本地服务器文件复制到其他服务器  
scp  /home/panjinming/flumeHealth/recordFlumeHearth.sh  panjinming@10.70.63.27:/home/panjinming/flumeHealth


但是,在windows和linux下呢?后来发现了putty下的pscp.exe 这个文件
可以实现将windows下的文件拷贝到linux下。


使用pscp实现Windows 和 Linux服务器间远程拷贝文件
(将win7一个文件传到N台服务器同样的路径之下)
http://blog.csdn.net/pandajava/article/details/43017573 (自己总结,记录个blog!)


29%%%%%%%%%
win7写的脚本传值linux,执行报错 -bash: ./aa.sh: /bin/bash^M: bad interpreter: No such file or directory
例如:
在win7上面写了个脚本aa.sh,仅仅输出helloworld,通过ftp传至linux,给予执行权限。
执行报错 -bash: ./aa.sh: /bin/bash^M: bad interpreter: No such file or directory


win编辑的文件 传值linux
vi编辑的时候  :set ff?  结果 fileformat=dos
将其修改fileformat=unix
:set ff=unix 保存退出。再次执行aa.sh可以正常输出结果helloworld


30%%%%%%%%%
设置时区
执行tzselect命令-->选择Asia-->选择China-->选择east China - Beijing, Guangdong, Shanghai, etc-->然后输入1回车。
执行完tzselect命令选择时区后,时区并没有更改,只是在命令最后提示你可以执行TZ='Asia/Shanghai'; 
export TZ 并将这行命令添加到.profile中,然后退出并重新登录。参考下图中date命令看到的结果,最终时区显示为CST,即中国标准时间。


date命令将日期设置为2014年6月18日
 ----   date -s 06/18/14
将时间设置为14点20分50秒
 ----   date -s 14:20:50
将时间设置为2014年6月18日14点16分30秒(MMDDhhmmYYYY.ss)
----date 0618141614.30


31%%%%%%%%%
ssh hadoop2:hadoop2TEST@10.240.8.20
ssh hadoop2:hadoop2TEST@10.240.15.5


33%%%%%%%%%
awk 字符串处理 (!!!!!!)
[hadoop2@nn1-hadoop2 personbt]$ cat hehe.txt |awk  -F '\t'  '{print $7}'  //仅仅显示第七列 注意是列
99.238.132.113
99.238.72.109
99.241.68.197
99.244.135.58
99.244.187.172
99.244.32.64
99.245.50.148


34%%%%%%%%%
cat /proc/version
查看linux的系统版本
[root@nn1-hadoop2 local]# cat /proc/version
Linux version 2.6.32-431.17.1.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Wed May 7 23:32:49 UTC 2014


35%%%%%%%%%
find命令  (!!!!!)


查找指定目录的空文件夹然后执行删除操作
find /data/logs/flume -type d -empty -exec rm -rf {} ';'


通过文件名查找法:
find /dir -name httpd.conf 
指定类型为文件夹 查找文件夹
find /(查找范围) -name '查找关键字' -type d


36%%%%%%%%% 
crontab 定时任务
*  *  *  *  *  command 
分  时  日  月  周  命令 
第1列表示分钟1~59 每分钟用*或者 */1表示 
第2列表示小时1~23(0表示0点) 
第3列表示日期1~31 
第4列表示月份1~12 
第5列标识号星期0~6(0表示星期天) 
第6列要运行的命令 


crontab -e   编辑crontab
crontab -l   查看crontab
查看crontab日志(/var/log/cron包含了root用户和非 root用户的的定时运行日志)
cat /var/log/cron
也可以用tail -f /var/log/cron观察


37%%%%%%%%%
Linux文件的合并、排序和分割 
主要内容:sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令、tar命令
http://blog.sina.com.cn/s/blog_6bd7d9430101504l.html


38%%%%%%%%%
Linux shell脚本防止重复执行的解决方案
1、脚本 nginx_compress.sh 定时执行 每隔两分钟吧   为了防止重复启动 所以 脚本里  判断了 正在运行的 nginx_compress.sh个数 。
   nums=`ps -ef |grep nginx_compress.sh|grep -v "grep"|wc -l`  。但是 第一次运行的时候  nums的值是2。  预期的应该是1 才对。
2、bash 中防止脚本重复执行的方法(flock)http://blog.ailms.me/2013/08/04/bash-flock.html?utm_source=rss


38%%%%%%%%%
clear
清屏命令

39%%%%%%%%%
查看系统有多少个命令
连续按两次命令补全Tab键。
[pjm@pjm ~]$ 
Display all 2186 possibilities? (y or n)


40%%%%%%%%%
linux指令在线求助系统 [manual手册,指南]
man date
向下翻页 空格键   [page down]
向上翻页          [page up]
去第一页          [home]
去最后一页        [end]
向下搜索str这个串 /str    [小写n]定位到下一处str位置 [大写N]定位至上一处
向上搜索str这个串 ?str    [小写n]定位到下一处str位置 [大写N]定位至上一处
退出这次man操作   [q]


41%%%%%%%%%
xshell操作
定位到一行的开始      [home]
定位到一行的结束      [end]
删除字符              [del]
在别处复制的文字粘贴  [shift+ins]


42%%%%%%%%%
wget命令 http://www.cnblogs.com/peida/archive/2013/03/18/2965369.html
wget [参数] [URL地址]

wget是一个下载文件的工具,它用在命令行下。我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。
wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在
后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,
相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。
wget 可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常
被称作”递归下载”。在递归下载的时候,wget 遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,
将链接转换成指向本地文件,以方便离线浏览。wget 非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的
适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,
它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

实例1:使用wget下载单个文件  命令:
wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip
说明:从网络下载一个文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,
当前下载速度,剩余下载时间)。

实例2:使用wget -O下载并以不同的文件名保存
wget -O wordpress.zip http://www.minjieren.com/download.aspx?id=1080

实例3:使用wget –limit -rate限速下载
wget --limit-rate=300k http://www.minjieren.com/wordpress-3.1-zh_CN.zip


实例4:使用wget -c断点续传
wget -c http://www.minjieren.com/wordpress-3.1-zh_CN.zip


实例5:使用wget -b后台下载 
wget -b http://www.minjieren.com/wordpress-3.1-zh_CN.zip



43%%%%%%%%%
scp命令  http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html
scp [参数] [原路径] [目标路径]


scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,
而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。
另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件
众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。


实例1:从远处复制文件到本地目录
scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
说明:从192.168.120.204机器上的/opt/soft/的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/目录中


实例2:从远处复制到本地 
scp -r root@192.168.120.204:/opt/soft/mongodb /opt/soft/
说明:从192.168.120.204机器上的/opt/soft/中下载mongodb 目录到本地的/opt/soft/目录来


实例3:上传本地文件到远程机器指定目录 
scp /opt/soft/nginx-0.5.38.tar.gz root@192.168.120.204:/opt/soft/scptest
说明:复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器192.168.120.204的opt/soft/scptest目录


实例4:上传本地目录到远程机器指定目录 
scp -r /opt/soft/mongodb root@192.168.120.204:/opt/soft/scptest
说明:上传本地目录 /opt/soft/mongodb到远程机器192.168.120.204上/opt/soft/scptest的目录中去

44%%%%%%%%%
查看linux的系统版本
1.cat /etc/issue    //查看linux的版本信息


[panjinming@h4-vm4 etc]$ cat /etc/issue 
CentOS release 6.4 (Final)
Kernel \r on an \m


2.lsb_release -a    //查看LSB本身的版本信息
[panjinming@h4-vm4 etc]$ lsb_release -a 
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.4 (Final)
Release: 6.4
Codename: Final


3.uname -r      //Kernel版本
[panjinming@h4-vm4 etc]$ uname -r  
2.6.32-042stab085.20


45%%%%%%%%%
uptime 命令
uptime 命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况。 


以下是 uptime 的运行实例: 
11:07:03 up 2 days, 25 min,  3 users,  load average: 0.53, 0.31, 0.25
当前时间   11:07:03
系统已运行的时间 2 days, 25 min
当前在线用户  3 users
平均负载:0.53, 0.31, 0.25 最近1分钟、5分钟、15分钟系统的负载




46%%%%%%%%%
sudo su -   以及   sudo xxx操作


Linux给用户添加sudo权限有时候,linux下面运行sudo命令,会提示类似: 
xxxis not in the sudoers file.  This incident will be reported. 
这里,xxx是用户名称,然后导致无法执行sudo命令,这时候,如下解决:
进入超级用户模式。也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。(当然也可以直接登录root)
添加文件的写权限。也就是输入命令"chmod u+w /etc/sudoers"。 
编辑/etc/sudoers文件。也就是输入命令"vim /etc/sudoers",进入编辑模式,找到这一行:"root ALL=(ALL) ALL"在起下面
添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存退出。撤销文件的写权限。也就是输入命令"chmod u-w /etc/sudoers"。 
然后就行了。


47%%%%%%%%%
grep 命令  (linux下开发相当于ied中的 ctrl+h 按条件检索整个工作空间)


grep -rwn  'xxxxx'  *  查找xxxxx并显示xxx在文件名及所在行号 


48%%%%%%%%%
tree命令 查看以树形图的方式查看文件夹及文件
使用tree需要服务器上安装tree命令

49%%%%%%%%%
linux查看线程 。其实linux没有线程,都是用进程模仿的


1. ps -ef f
用树形显示进程和线程,pf -ef f中最后的参数f 指定显示的格式为树形


比如说我想找到proftp现在有多少个进程/线程,可以用
$ ps -ef f | grep proftpd
nobody  23117 1     0 Dec23 ? S 0:00 proftpd:   (accepting   connections)   
jack    23121 23117 0 Dec23 ? S 7:57 \_ proftpd: jack - ftpsrv:   IDLE
jack    28944 23117 0 Dec23 ? S 4:56 \_ proftpd: jack - ftpsrv:   IDLE
这样就可以看到proftpd这个进程下面挂了两个线程。
在Linux下面好像因为没有真正的线程,是用进程模拟的,有一个是辅助线程,所以真正程序开的线程应该只有一个。


50%%%%%%%%%
Linux下自带了一个unzip的程序可以解压缩文件,
解压命令是:unzip filename.zip 
同样也提供了一个zip程序压缩zip文件,命令是 
zip filename.zip files 
会将files压缩到filename.zip 
另外看看你的文件的后缀名,不同的后缀的文件解压和压缩的命令都不一样
 总结一下
 1、*.tar 用 tar –xvf 解压 
 2、*.gz 用 gzip -d或者gunzip 解压 
 3、*.tar.gz和*.tgz 用 tar –xzf 解压 
 4、*.bz2 用 bzip2 -d或者用bunzip2 解压 
 5、*.tar.bz2用tar –xjf 解压 
 6、*.Z 用 uncompress 解压 
 7、*.tar.Z 用tar –xZf 解压 
 8、*.rar 用 unrar e解压 
 9、*.zip 用 unzip 解压


51dirname命令%%%%%%%%%
dirname命令的作用是处理路径,以获取路径的父目录,而且dirname不会检查路径是否合法。

用法:dirname [path | options]
作用:输出已经去除了尾部的"/"字符部分的名称;如果名称中不包含"/",则显示"."(表示当前目录)。
可选选项:
      --help      显示此帮助信息并退出
      --version   显示版本信息并退出
示例:
$ dirname /usr/bin/sort        输出"/usr/bin"
$ dirname stdio.h                  输出"."
$ dirname hh/dfdnm/df/       输出"hh/dfdnm",不检查路径有效性
$ dirname hh/dfdnm/df        输出"hh/dfdnm",不检查路径有效性


52 linux抓包%%%%%%%%%

sudo tcpflow -cp -i eth0 port 9200

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------










  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值