常用Linux命令
对于习惯了Windows系统,初步接触Linux系统的人来说,从绝大部分操作只需要鼠标点点界面就能实现,到无桌面版的Linux(桌面版另当别论),操作只能是依赖命令来实现,可能会晕菜:命令如此之多!
其实对于简单的系统维护来说,我们需要用的命令并不多,我们在需要用到的时候可以man
或者-h
一下,或者一些在线文档或者社区都能找到答案。在此整理记录一些常用的命令,方便自己和别人查看~
1. cd
cd应该是最最常用的命令了,它用来改变当前工作目录。
它的参数可以是绝对路径:
cd /usr/
也可以是相对路径:
cd ./local/
另外cd
或cd ~
可以直接切换到用户home目录。
2. ls
ls(LiSt directory contents),如果参数是目录,则列出目录里的所有内容,如果参数是文件,则列出此文件。
ls的-参数非常之多,可以使用man ls
查看。这里罗列几个常用的参数:
ls // 无参数
Applications Documents Library Music Public
Desktop Downloads Movies Pictures
ls -l // 列出较为详细的信息
total 0
drwx------ 3 YONG staff 102 7 2 14:52 Applications
drwx------@ 5 YONG staff 170 8 4 10:20 Desktop
ls -lh // l 和 h 配合使用,文件大小将以易读方式呈现
drwx------ 3 YONG staff 102B 7 2 14:52 Applications
drwx------@ 5 YONG staff 170B 8 4 10:20 Desktop
ls -a // 会显示隐藏文件
-rw------- 1 YONG staff 14574 8 4 10:56 .bash_history
-rw-r--r-- 1 YONG staff 330 5 4 17:49 .bash_profile
很多参数都可以合并使用,比如-la
。另外ll
命令是ls -l
的简化版,一般系统都有自带。如果没有的话,在.bash_profile
加入alias ll="ls -l"
或alias ll="ls -la"
即可。
3. pwd
pwd(Print Working Directory)用于显示当前工作目录的完整路径:
pwd
/usr/local
4. cp
cp(CoPy)即复制,可以复制一个文件为另一个文件,也可以复制多个文件到一个目录,或者复制整个目录及下面所有文件:
cp fileA fileA2
cp fileA fileB fileC DirecA
cp -r DirecA DirecB
cp同样接受多个-参数,其中-r
对复制目录时使用,会递归复制目录下的所有文件和子目录。
注1:cp等文件操作命令,源文件参数可以使用通配符,如需要复制A目录下的所有以a开头以php为后缀的文件到B目录,可以使用cp A/a*.php B
。
注2:在生产环境中轻易不要使用-f
参数,我的理解f是force的意思,即这些操作都是强制性,并不会有任何警报信息或需要Y/N确认的步骤。然而有时候这种操作是致命的(特别是rm -f
命令千万不要使用 - 相信你听过很多cd / && rm -rf
的段子)!
5. mv
mv(MoVe)命令类似于cp,不同的是他不保留源文件,即移动(或重命名)。
6. rm
rm(ReMove)用于删除文件或目录(删除目录时候使用-r
执行递归删除)。
7. touch
touch命令一般不会用到。他如果文件已经存在,他会更新文件的时间戳(访问时间、修改时间),如果文件不存在,会常见一个新的空文件(注:带有-c
参数例外)。
touch fileA
8. cat
cat(conCATenate)连接过个文件并将其内容打印出来,就不用通过vim等方式打开文件查看就可以直接在终端查看文件内容:
cat fileA
cat fileA fileB
一个好用的地方是:
cat fileA fileB > fileC
将不会往终端输出,而是把fileA和fileB的内容输出到fileC中,这在整合多个文件为一个文件时非常方便。
9. mkdir
mkdir(MaKe DIRectory)创建新目录,可以是相对路径也可以是绝对路径
mkdir ./dir1
mkdir /tmp/dir2
10. chown
chown(CHange file OWNer and group)修改文件或目录的所有者和用户组。如,把文件修改为apache所有,用户组未root:
chown apache:root fileA
对于目录,如果连同目录内的文件和子目录也要修改,需要带上-R
参数,否则将只修改目录本身:
chown -R apache:root DirecA
11. chmod
chmod(CHange file MODes)修改文件或目录的模式位(权限)。
了解了文件的所有者和用户组的概念后,需要知道,文件(或目录)有严格的权限管理,例如上面ll命令的结果可以看到形如drwx------
的就表示权限(除了第一位d表示这是个目录)。
rwxrwxrwx
中,前3位表示所有者的权限,中间3位表示用户组的权限,后3位表示其他人的权限。
这3位又分别代表了读(r)、写(w)、执行(x)权限,如果按照1代表有权限,0代表没权限的,那么可读+可写+不可执行可以表示为110
,而这个二进制数转化成十进制相当于6
。类似的只读就是100
,转化为十进制就是4
。终上所述:如果你希望一个文件的拥有者“可读+可写+不可执行”,用户组“只读”,其他人什么都不能操作,那么这个文件的权限用十进制可以表示为640
,操作命令即:
chmod 640 fileA
同时,chmod还可以使用u(user)、g(group)、o(other)、a(all)和+(加入)、-(删除)、=(设置)跟rwx搭配来对文件的权限进行更改。如向fileA的文件权限中加入用户组可写权限:
chmod g+w fileA
又如向fileB的文件权限中删除拥有者可执行权限:
chmod u-x fileB
同样的,对于目录,如果连同目录内的文件和子目录也要修改,需要带上-R
参数,否则将只修改目录本身:
chmod -R 640 DirecA
12. tar
tar(manipulate Tape ARchives)对文件进行压缩或解压。
常用的方法:
tar -zcf a.tgz fileA fileB direcA #压缩
tar -zxf a.tgz #解压
常用参数:
-c:新建压缩文件,压缩时候使用
-t:查看压缩文件的内容
-x:解压缩文件,解压时候使用。-c,-t,-x不能同时出现
-j:通过bzip2的支持进行压缩/解压缩
-z:通过gzip的支持进行压缩/解压缩
-v:在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename:filename为要处理的文件
-C dir:指定压缩/解压缩的目录dir
--exclude:排除指定的文件或目录,可用通配符
注:除了-t
可以查看压缩包内容外,用vim也可以查看。
13. grep
grep是一个非常强大的搜索工具,他会分析一行信息,并找到我们需要的信息打印出来。grep的帮助信息如下:
grep -h
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
看起来好复杂是不是。距离说明常用的地方会简单一些。
在指定目录中的所有文件(或通配符包含的文件)中查找包含某一字符串的文件:
#将会显示包含some string的文件名和包含的那一列内容
grep 'some string' *.php
#如果希望只显示文件名,可以使用-l参数
grep 'some string' *.php -l
#如果搜索的是目录,且希望递归目录搜索,可以使用-r参数
grep 'some string' /some/path -rl
配合其他命令,只显示需要的信息:
#针对ls -l的结果,仅显示后缀是php的文件
ls -l | grep .php
更进阶的grep操作,由于篇幅原因没法全部列举,感兴趣可以Google找到相关信息。
14. find
find文件查找。
find -h
find: illegal option -- h
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
看起来也好复杂是不是。距离说明常用的地方会简单一些。
根据文件名查找文件:
#查找/path目录下以a开头的所有文件
find /path -name 'a*'
根据文件修改日期查找:
参数:
-mtime n: 在n天之前的“一天内”被更改过的文件
-mtime +n: 在n天之前(不含n天本身)被更改过的文件
-mtime -n : 在n天之内(含n天本身)被更改过的文件
#查找/path目录下今天之内有改动过的所有文件
find /path -mtime 0
配合xargs使用:
#查找/path目录下今天之内有改动过的所有文件,并打包成压缩文件
find /path -mtime 0 | xargs tar -zcf a.tgz
关于xargs和他的用法,Google可以找到详细的信息。
更进阶的find操作,由于篇幅原因没法全部列举,感兴趣可以Google找到相关信息。
15. date
date打印或设置系统日期时间。
date
2016年 8月 4日 星期四 15时32分17秒 CST
date -s '2016-08-04 15:00:00' #设置系统日期时间
注意,date -s
只设置了系统的时间,如果要同步到硬件时间,需要再执行hwclock -w
。关于系统时钟和硬件时钟以及两者之间的关系和同步,自行Google。
16. shutdown
shutdown可用于让系统关机或重启:
shutdown -h now #马上关机
shutdown -h 20:00 #20:00关机
shutdown -r now #马上重启
shutdown -r +5 #5分钟后重启
注:时间参数是必须的。
17. kill
kill(terminate or signal a process),常用于杀死一个进程:
kill -9 [pid]
具体使用方法man kill
会有更详细介绍。
18. service
service用于管理系统服务。可用的命令包括start
、restart
、stop
、status
、reload
。如重启httpd服务:
service httpd restart
注:对于rhel7,变成使用systemctl restart httpd
。
service通常配合chkconfig使用。chkconfig可用于设置服务开机启动/不启动:
chkconfig httpd on
chkconfig mysqld off
19. du
du(display Disk Usage statistics)磁盘用量,可以查看磁盘的使用情况,通常带的参数是-h
,可让用量数值易读。
总结
以上这些命令是暂时能想到的,常用的且比较入门级的,当然,linux下的高阶命令还是有非常之多,还有管道命令、通配符等等,有兴趣可以自己摸索。
个人知识有限,以上若有不当或错误之处,欢迎指正 :)