今天是程序员节,就让今天作为我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 冗长模式,输出指令执行的详细信息
参数
指定要卸载的文件系统或者对应的设备文件名