常用Linux命令

对于习惯了Windows系统,初步接触Linux系统的人来说,从绝大部分操作只需要鼠标点点界面就能实现,到无桌面版的Linux(桌面版另当别论),操作只能是依赖命令来实现,可能会晕菜:命令如此之多!

其实对于简单的系统维护来说,我们需要用的命令并不多,我们在需要用到的时候可以man或者-h一下,或者一些在线文档或者社区都能找到答案。在此整理记录一些常用的命令,方便自己和别人查看~

1. cd

cd应该是最最常用的命令了,它用来改变当前工作目录。
它的参数可以是绝对路径:

cd /usr/

也可以是相对路径:

cd ./local/

另外cdcd ~可以直接切换到用户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用于管理系统服务。可用的命令包括startrestartstopstatusreload。如重启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下的高阶命令还是有非常之多,还有管道命令、通配符等等,有兴趣可以自己摸索。

个人知识有限,以上若有不当或错误之处,欢迎指正 :)