linux常用实用命令详解

今天是程序员节,就让今天作为我linux的新征程的开始吧

2013.10.24

1 chmod 改变文件或目录的权限

    rwx分别对应着421,这里有两种改变权限的方法,我常用的是数字法,因为这种更简单,更直观

    【ugoa】有这四种权限

    具体语法 chmod 参数 权限值 目标文件,实例chmod (-R) 777 zhuxinlei.php

2 chgrp 改变文件盒目录所属工作组

用法:chgrp 选项 参数

选项: -v 显示指令的详细执行过程

         -R 递归修改指定目录下的目录和文件

参数: 组 文件

实例:chgrp -R root index 更改index目录及其下所有内容的所属组为root

2013.10.27

3 chown 改变文件和目录的所有者和所属工作组

chown【选项】【参数】

选项

-c 或者changes            显示文件的所有者或所属组详细的变化

-v或者verbose               显示指令详细的执行过程

-R或者recursive            递归操作,依次修改指定目录及其目录下的所有内容的所有者和所属组

--reference=<模板文件> 把文件的所有者和所属组改为与模板文件相同

参数

用户:组

文件

实例 chown-v root newfile 将newfile文件的所有者修改成root

chown-R -v user100 test/ 将test目录下的所有文件的所有者都修改成user100

chown-v --reference=template file1 使用模板文件template的所有权

4 find 硬盘查找文件并执行相应的操作

find 【参数】【选项】

选项

-name<查找模式> 按照指定的文件名查找模式查找文件

-lname<查找模式> 按照指定的文件名查找模式查找符合连接

-perm<权限模式> 查找指定的权限的文件或目录

-type<文件类型>   按照指定的文件类型查找文件,支持的文件类型如下 b块设备文件 c字符设备文件 d目录 p 命名管道 l符号链接文件 f普通文件

-gid<组id> 查找属于组ID的所有文件

-uid<用户ID>查找所有属于指定用户ID的所有文件

-group<组名>查找属于指定组名的所有文件

-user<用户名>查找属于指定用户名所有的文件

-empty 查找文件大小为0的目录或文件

-path<查找模式>按照指定的路径查找模式查找文件

-size<文件大小>按照指定的文件大小查找文件。“文件大小”的默认单位为块(每块512个字节)

-exec 用指定的linux指令操作查找到的文件。{}表示将查找到的文件作为linux指令的参数;\是固定字符,放在find指令的最后。提示用户进行确认

-fprintf<文件名> 将查找到的 信息保存到指定文件

-print 将查找的信息输出在标准输入设备,这是默认选项

参数 起始目录

instance1   find /etc -name httpd 查找etc目录下文件名为httpd文件或目录

instance2   find / -name core -print -exec rm -f {} \;          查找输出并删除文件名为core的文件或目录

这里需要注意的是:{}后面和\之间要有空格,并且\后面一定要有分号;

instance3   find . -name '*.txt* 在当前目录下查找txt文件

instance4   find . -name '[A-Z]*' 查找以大写字母开头的文件或目录

instance5  find . -name '*mysql*' -type f      查找名称包含mysql的文件(因为指定了查找的文件类型,所以只能是文件不能是目录)

instance6   find . -perm 755 很明显搜索指定权限的文件或目录

instance7   find . -size +3000k 查找文件大小大于3M的文件或者目录

instance8   find . -name '*.html' -exec grep ‘test' {}  \;从查找到的文件中包含test的行

instance9   find . -name '*.php' | wc -l 查找当前目录下有多少个php文件

上面说的有好多貌似平时不常用,但面试的时候应该很管用。尤其是最后一个

2012.10.30 不知道还会不会做程序员这一行,20年后看到这篇文章时会作何感想呢?

5 useradd  前三个命令将的是关于修改权限的命令,权限一般和用户和联系在一起,这里先讲一下关于用户和用户组的命令

useradd 创建新用户

最基本的用户即为useradd username

需要重新指定密码才能登录。有几个参数是为用户指定bash和宿主目录的,不太重要,使用默认的即可

6 userdel 删除用户

userdel只有两个参数

-f 强制删除用户,即使用户当前已经登录

-r 删除用户的同事删除与用户相关的所有文件

一般用法 userdel -r username

7 passwd 设置用户密码

最基本的用法当然是passwd username然后根据提示两次输入密码就可以

passwd还有好多参数可以锁定用户,解锁等。不过这些貌似都不常用

2013.10.31

8 su 切换用户身份

这个没什么好将的说实话,su后面如果不跟参数的话默认是切换到root

2013.11.3 

9 usermod 修改用户

usermod【选项】【参数】

-a 向组中追加用户。此选项仅与-G选项两用

-c 修改用户的注释信息

-d 修改用户的宿主目录

-e 修改用户的过期时间

-G 添加到指定附属组

-l 修改登录名

-L 锁定用户密码,在密码字段前添加“!”表示禁止用户登录

-U 解锁用户

instance1 usermod -c  "the desc of user" username

10 chfn 改变用户finger信息

这些信息保存在/etc/passwd中,用finger命令可以看到

有好多参数,我看就一个有用的-f 设置全名

chfn -f full_username username

11 chsh 修改用户使用的shell

我觉得这个命令基本可以忽略不计了吧,首先,很少用。其次,userMod中就有-s这个参数和它是同样的功能。知道即可

2013.11.4

12 finger 查询用户的基本信息

没什么要值得注意的参数,基本用法finger username

13 logname 打印当前用户名

跟finger命令一样,单独使用此命令意义不大,更多的是用在shell脚本中,基本用法logname  username

14 groupadd 添加工作组

这里有一个值得注意的选项

-g 指定工作组的id号

基本用法 groupadd -g 400 test

15 groupdel 删除工作组

基本用法groupdel test

需要注意的是groupdel无法删除用户的主要组,即无法删除创建用户时自动为用户创建的组(如果用户还存在)

16 gpasswd 工作组文件管理

参数:

-a 向组中添加用户

-d 从组中删除用户

-A 设置组管理员

-M 设置组成员

参数: 指定要管理的工作组

instance1 gpasswd -a zhuxinlei group1 把用户zhuxinlei加入到组group1

instance2 gpasswd -d zhuxinlei group1 从用户组group1中移除用户zhuxinlei

17 groupmod 修改工作组的组ID和组名

-g 指定ID

-n 指定组名

instance -g 1000 group1 修改组group1的id为1000

18 groups 打印用户所属工作组

groups root 打印root用户所属的工作组

 好了,关于用户和组的主要命令掌握这些就可以了,下面做一些题目来巩固下,毕竟实际应用才是最重要的

ps1 创建两个项目program1和program2,然后分别创建分配两个人来做这两个项目,相应的项目的人只能访问自己的项目

首先,是创建项目mkdir program1 mkdir program2 然后分别设置权限,设置成自己可做任何操作,同组的人可查看和修改,其他人无任何权限,所以chmod -R 750 program1 chmod -R 750 program1

然后创建四个用户 useradd zhangsan  useradd lisi  useradd wangwu useradd zhuliu

创建两个用户组 useradd groupprogram1  useradd groupprogram2

然后分别将两个用户移到用户组中

gpasswd -a zhangsan groupprogram1   gpasswd -a lisi groupprogram1

gpasswd -a wangsu groupprogram2   gpasswd -a zhuliu  groupprogram2

然后设置文件的所属组和所有者

chgrp -R groupprogram1 zhangsan program1其实这里设置lisi也可以

chgrp -R groupprogram2 wangsu program2 这里设置zhuliu也可以

ok,done!!!

2013.11.14

19 ln为文件创建连接

连接类型分为硬链接(hard link)和符号链接(symbol link),默认连接类型为硬链接。若要创建符号连接需加参数-s。。。

只能为普通文件创建硬链接,不能为目录创建硬链接。软连接没有限制

【参数】 源文件 目标文件

ln /etc/fstab ./myfstab

这里需要注意的只有一点:默认创建的是硬连接,硬连接只能在文件上创建,要想创建符号链接需使用-s

软链接实际上只是一段文字,里面包含着它所指向的文件的名字,系统看到软链接后自动跳到对应的文件位置处进行处理;相反,硬链接为文件开设一个新的目录项,硬链接与文件原有的名字是平权的,在Linux看来它们是等价的。由于这个原因,硬链接不能连接两个不同文件系统上的文件。
 
软连接与windows下的快捷方式类似

至于硬连接,举个例子说吧,你把dir1/file1硬连接到dir2/file2, 就是在dir2下建立一个dir1/file1的镜像文件file2,它与file1是占用一样大的空间的,并且改动两者中的一个,另一个也会发生同样的改动.

软连接和硬连接可以这样理解:
硬连接就像一个文件有多个文件名,
软连接就是产生一个新文件(这个文件内容,实际上就是记当要链接原文件路径的信息),这个文件指向另一个文件的位置,
硬连接必须在同一文件系统中,而软连接可以跨文件系统

硬连接 :源文件名和链接文件名都指向相同的物理地址,目录不能够有硬连接,文件在磁盘中只有一个复制,可以节省硬盘空间,由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除软连接(符号连接)用ln -s命令创建文件的符号连接,符号连接是linux特殊文件的一种,作为一个文件,它的资料是它所连接的文件的路径名,类似于硬件方式,******可以删除原始文件 而连接文件仍然存在。********


20 whereis 显示指令及其相关文件的路径 where指令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径

21 which 显示指令的绝对路径

22 locate/slocate 快速定位文件的路径

上面这三个东西目前没发现什么大用处

23 file 查看文件的类型,目前不需要掌握它的参数

2013.11.26

24 vi文本编辑器

0跳到行首

$跳到行尾

25 cat 将多个文件连接,并将结果通过标准输出显示出来。

26 more 文件内容分屏查看器

27 less 文件内容分屏查看器,功能比more强大,支持向后查看

2013.11.27

28 grep 在文件中搜索匹配的行

这里需要注意的参数我认为只有一个,因为grep的作用是查找包含指定字符串的行的,所以我们有必要知道行数 -n

下面说一下,pattern正则表达式的主要参数

\: 忽略正则表达式中特殊字符的原有含义

^正则表达式的开始行

$正则表达式的结束行

\< 从匹配正则表达式的单词开始

\> 到匹配正则表达式的单词结束

instance1 grep 'define' test.php 从test.php中查找包含define的行

instance2 grep 'define' d* 查找所有已d开头的文件中包含test的行

instance3 grep 'define' /usr/local/* 搜索指定目录下所有文件中包含define的行,必须要写星号,不然不会查找

instance4 grep '\<define' test.php

instance5 grep '[0-9]\{8\}' test.php 在test.php中匹配格式为20131219的时间,注意貌似出了[]之外的所有符号都要使用\来转义

instance6 ls|grep '^test.php$' 查找当前目录下是否有test.php,'^$'这种写法是判断是匹配文件名不是包含文件名的行

instance7 grep '^file' test.php 不能检索出包含file字母的行,因为^是检测行首是否包含有匹配字符的

instance8 grep '\<file' test.php 检索出包含file字母的行

2013.11.30

29 alias 设置命令别名

instance1 alias bakpasswd = 'cp /etc/passwd /etc'

30 unalias 取消命令别名

31 history 历史命令

2013.12.2

32 head 显示文件的头部信息,默认显示10行信息

33 tail 显示文件的尾部信息,默认显示10行信息

34 wc 统计文件的行数 单词数 字节数(不太常用,但挺有用)

-w 统计单词数

-l 统计行数

-c 统计字节数

instance1 wc abc.php

990 4843 34554 abc.php

991行,4843个单词,34554个字节

instance2 ps aux|grep httpd| wc -l

查看有多少个httpd的进程

the start of shell command

35 echo 在shell中打印变量的值或者直接输出字符串

2013.12.6

36  kill 管理进程和作业

kill的默认使用信号为15,用于结束进程或作业。如果想要强制杀死进程或作业使用9

kill杀死作业时必须在作业号前加上%,作业号可通过jobs查询

kill -s 9 %2 强制杀死作业号2

37 jobs 显示任务列表

38 bg 后台执行作业

39 fg将后台作业放到前台执行

40 set 显示或设置shell特性及shell变量

set 用于显示系统中已存在的shell变量,或者重新设置已经存在的shell变量,如果要定义新变量需要使用declare或者在shell中使用"变量名=值"的方式来定义

41 unset删除指定的shell变量与函数

42 env 在定义的环境中执行指令(之后会详细介绍)

43 type判断内部指令和外部指令

44 export 将变量输出为环境变量

45 read 从键盘读取变量值

-p 指定读取时的变量值

-t 指定等待的时间(秒)

46 export  将变量输出为环境变量

47 test 检查文件详细信息(是否存在,是否可读,是否相等)

test不输出信息,因为需要用重定向查看输出信息

test的参数太多,这里只介绍一个先,不知道以后用到的时候多不多

test -e 探测文件是否存在

test -e filename && echo 1 || echo 2

48


2013.12.11  进程与作业管理

48 at 在指定的时间执行任务

49 batch在指定时间执行任务,与at不同的是batch只有在系统平均负载在0.8以下时才会执行

50 date 显示与设置系统当前时间 这个命令平时基本上没有用户,在shell中常被用到,比如备份时的文件名

-r 显示指定文件的最后修改时间(这个选项貌似10年之内用不到吧)

-s 设置系统日期时间

参数

<+日期时间格式> 指定显示使用的日期时间格式

date +%Y%m%d 会显示这样的结果20131213

date +%s 显示当前日期的时间戳

51 curl 强大的http命令行工具

《1》 将访问地址的内容输出到屏幕 curl www.baidu.com

《2》 把页面保存下来,相当于php中的file_get_contents函数 curl -o page.html www.baidu.com.此时访问page.html就可以看到百度的首页

《3》 访问有些网站的时候比较讨厌,他使用cookie来记录session信息。我们来学习这个option: -D <— 这个是把http的response里面的cookie信息存到一个特别的文件中去

           curl  -o page.html -D cookie0001.txt www.baidu.com   这样就把cookie信息存放在cookie0002.txt

《4》 那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道,很多网站都是靠监视你的cookie信息,来判断你是不是不按规矩访问他们的网站的。
         这次我们使用这个option来把上次的cookie信息追加到http request里面去: -b
         curl -b cookie0001.txt www.baidu.com
         这样,我们就可以几乎模拟所有的IE操作,去访问网页了!

         建立test.php,里面设置cookie.在test2.php里面判断如果有cookie值执行条件,没有值执行另一个条件。答案肯定是执行有值的那个条件。但是如果我们通过curl的设置的话,将test2.php使用的cookie文件修改,删除cookie值,那么在执行这个文件的时候就会走没有cookie值的条件。这和我们通过浏览器修改cookie的值是一个道理

52 crontab 周期性执行的任务

任务保存在crontab文件中,格式为 分钟 、小时 、月的第几天、月份、星期几 、等待执行的命令

选项说明

-l 显示待执行任务列表

-e 编辑用户的crontab文件

-r 删除用户的计划任务

-u 对指定用户的任务计划进行管理

53 mount 加载文件系统。用于加载文件系统到指定的加载点

选项说明

-v 冗长模式,输出指令执行的详细信息

-r 将文件系统加载为只读模式

参数说明

设备文件名+ 加载点

umount

选项说明

-v 冗长模式,输出指令执行的详细信息

参数

指定要卸载的文件系统或者对应的设备文件名







你可能感兴趣的:(linux常用实用命令详解)