Linux 常用命令
1、cd - 切换当前目录
这是一个最基本,也是最常用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。
1 | cd /root # 切换到目录/root |
2、ls - 查看文件与目录
这也是一个非常有用的查看文件与目录的命令,它的参数非常多,下面就列出一些常用的参数:
- -l :列出长数据串,包含文件的属性与权限数据等
- -a :列出全部的文件,连同隐藏文件(开头为. 的文件)一起列出来(常用)
- -d :仅列出目录本身,而不是列出目录的文件数据
- -h :将文件容量以较易读的方式(GB,kB 等)列出来
- -R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来
注:这些参数也可以组合使用
1 | ls -l # 以长数据串的形式列出当前目录下的数据文件和目录 |
相关命令:
如果想展示树形结构,可使用 tree 命令
1 | # 使用yum install tree命令先安装tree |
-I
命令允许你使用正则匹配来排除掉你不想看到的文件夹。
1 | tree -I "node_modules" |
3、grep - 分析一行内容过滤筛选
分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等,下面就列出一些常用的参数:
- -a :将 binary 文件以 text 文件的方式查找数据
- -c :计算找到‘查找字符串’的次数
- -i :忽略大小写的区别,即把大小写视为相同
- -v :反向选择,即显示出没有‘查找字符串’内容的那一行
1 | # 把ls -l的输出中包含字母file(不区分大小写)的内容输出 |
4、cat - 查看文本文件的内容
该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与 more 和 less 一起使用,从而可以一页页地查看数据,下面就列出一些常用的参数:
- -n :由 1 开始对所有输出的行数编号。
- -b :和 -n 相似,只不过对于空白行不编号。
1 | cat text | less # 查看text文件中的内容,这条命令也可以使用less text来代替 |
5、tail/tailf - 从尾部查看文本文件的内容
用于从文件尾部查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
常用参数如下:
- -f:循环读取
- -c <数目>:显示的字节数
- -n <行数>:显示文件的尾部 n 行内容
1 | # 查看文件的后10行 |
tailf 等同于 tail -f -n 10,与 tail -f 不同的是,如果文件不增长,它不会去访问磁盘文件,所以 tailf 特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电。
6、find - 查找文件
一个查找文件的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出。
1 | # 命令格式 |
7、locate - 查找文件
用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。当我们不知道某个文件放哪里了,能够通过他快速定位到文件目录,这是一条非常有用的命令。
1 | # 查找eureka-server-xxx.jar文件的位置 |
locate 与 find 的不同:
find 是去硬盘找,locate 只在 / var/lib/slocate 资料库中找。locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 / var/lib/slocate/slocate.db 中,所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为:
1 | locate -u |
8、cp - 复制文件
该命令用于复制文件,它还可以把多个文件一次性地复制到一个目录下,它的常用参数如下:
- -a :将文件的特性一起复制
- -p :连同文件的属性一起复制,而非使用默认方式,与 - a 相似,常用于备份
- -i :若目标文件已经存在时,在覆盖时会先询问操作的进行
- -r :递归持续复制,用于目录的复制行为
- -u :目标文件与源文件有差异时才会复制
1 | cp -a file1 file2 # 连同文件的所有特性把文件file1复制成文件file2 |
9、scp - 远程复制文件
该命令用于Linux之间复制文件和目录。 scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 是加密的。
1 | # 命令格式 |
下面就列出一些常用的参数:
- -p:保留原文件的修改时间,访问时间和访问权限。
- -q: 不显示传输进度条。
- -r: 递归复制整个目录。
- -v:详细方式显示输出。
1 | # 从本地服务器复制到远程服务器 |
10、vim - 编辑文件
该命令主要用于文本编辑,它接一个文件名作为参数,如果文件存在就打开,如果文件不存在就以该文件名创建一个文件。vim 是一个非常好用的文本编辑器,它里面有很多非常好用的命令,在这里不再多说。
1 | vim demo.txt # 编辑demo.txt文件 |
11、mv - 移动目录文件
该命令用于移动文件、目录或更名,move 之意,它的常用参数如下:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件已经存在,就会询问是否覆盖
- -u :若目标文件已经存在,且比目标文件新,才会更新
注: 该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是 “目录”。
1 | mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中 |
12、rm - 删除目录文件
该命令用于删除文件或目录,remove 之意,它的常用参数如下:
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告消息
- -i :互动模式,在删除前会询问用户是否操作
- -r :递归删除,最常用于目录删除,它是一个非常危险的参数
1 | rm -i file # 删除文件file,在删除之前会询问是否进行该操作 |
** 避免 rm -rf ***
1 | cd ${log_path} |
上面的命名,先进入到日志目录,然后把日志都删除。看上去没有任何问题。但是,当目录不存在时,悲剧就发生了。
ps:偷偷告诉你一个小故事,我之前就犯过这种错误,不过好在是自己学习虚拟机上面。如果实现线上生产环境,就不是故事了,而是事故了。
上诉问题有四种方法进行规避:
第一、命令替换,在生产环境把 rm -rf 命令替换为 mv,再写个定时 shell 定期清理。模拟了回收站的功能。
第二、收拢权限,帐号权限的分离,线上分配 work 帐号,只能够删除 / home/work/logs / 目录,无法删除根目录。大公司一般线上权限管理比较规范,小公司就未必了,搞不好所有的小伙伴都有权限在线上乱搞。
第三、使用 && ,可以通过 “&&”,将
1 | cd ${log_path} |
合并成一个语句
1 | cd ${log_path} && rm -rf * |
当前半句执行失败的时候,后半句不再执行。
第四、判断目录是否存在,制定编码规范,对目录进行操作之前,要先判断目录是否存在。靠人的自觉来保证规范的执行,总感觉有些不太靠谱。当然,规范是有必要的。
13、ln - 连接
这是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用 ln 命令链接它就可以,不必重复的占用磁盘空间。
而链接又可分为两种 : 硬链接 (hard link) 与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
它的常用参数如下:
- -f : 链接时先将与 dist 同档名的档案删除
- -i : 在删除与 dist 同档名的档案时先进行询问
- -n : 在进行软链接时,将 dist 视为一般的档案
- -s : 进行软链接 (symbolic link)
- -v : 在连结之前显示其档名
- -b : 将在链接时会被覆写或删除的档案进行备份
1 | # 创建软链接在/usr/bin/目录下freeswitch文件, |
软链接与硬链接的区别:
软链接:
- 软链接,以路径的形式存在。类似于 Windows 操作系统中的快捷方式
- 软链接可以 跨文件系统 ,硬链接不可以
- 软链接可以对一个不存在的文件名进行链接
- 软链接可以对目录进行链接
硬链接:
- 硬链接,以文件副本的形式存在。但不占用实际空间。
- 不允许给目录创建硬链接
- 硬链接只有在同一个文件系统中才能创建
14、chmod - 修改文件权限
chmod 用于管理文件或目录的权限,文件或目录权限的控制分别以读取 ®、写入 (w)、执行 (x)3 种,一般的用法如下:
1 | chmod [-R] abc 文件或目录 |
参数说明如下:
- -R:进行递归的持续更改,即连同子目录下的所有文件都会更改
- abc : a,b,c 各为一个数字,分别表示 User、Group、及 Other 的权限。
该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体 (group) 者,o 表示其他以外的人,a 表示这三者皆是。
- 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
另一种是包含数字的数字设定法。其中 4 表示读,2 表示写,1 表示可执行,因此 7 表示读写可执行,5 表示读可执行
1 | chmod g+w file # 向file的文件权限中加入用户组可写权限 |
15、chgrp - 修改文件所属用户组
该命令用于改变文件所属用户组,它的使用非常简单,它的基本用法如下:
1 | chgrp [-R] dirname/filename |
参数说明如下:
- -R :进行递归的持续对所有文件和子目录更改
1 | # 递归地把dir目录下中的所有文件和子目录下所有文件的用户组修改为users |
16、chown - 修改文件所属用户、用户组
该命令用于改变文件的所有者,与 chgrp 命令的使用方法相同,只是修改的文件属性不同
1 | # 将文件 file1.txt 的拥有者设为 runoob,用户组组 runoobgroup : |
17、sz/rz - 文件上传下载
这是 Linux/Unix 同 Windows 进行 ZModem 文件传输的命令行工具。windows 端需要支持 ZModem 的 telnet/ssh 客户端(比如 SecureCRT、XShell)
sz:将选定的文件发送到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到 Linux 服务器
1 | # 安装 |
18、yum - 包安装卸载
Linux 包管理器 ,解决依赖问题,方便快捷
1 | yum install <package_name> -y # 安装包 |
19、curl - 与服务器之间传输数据
curl 是一个非常实用的、用来与服务器之间传输数据的工具;支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl 设计为无用户交互下完成工作;curl 提供了一大堆非常有用的功能,包括代理访问、用户认证、ftp 上传下载、HTTP POST、SSL 连接、cookie 支持、断点续传等。
1 | # 下载页面 |
20、wget - 文件下载
一个下载文件的工具,,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget 支持 HTTP,HTTPS 和 FTP 协议,可以使用 HTTP 代理。
1 | # 使用wget下载单个文件 |
21、ps - 查看进程运行情况
该命令用于将某个时间点的进程运行情况选取下来并输出,它的常用参数如下:
- -a : 显示除控制进程与无端进程外的所有进程
- -d :显示除控制进程外的所有进程
- -e :显示所有进程
- -g :显示会话或组 ID 在 grplist 列表中的进程
- -p :显示 PID 在 pidlist 列表中的进程
- -s :显示会话 ID 在 sesslist 列表中的进程
- -t :显示终端 ID 在 ttylist 列表中的进程
- -u :显示有效用户 ID 在 userlist 列表中的进程
- -x :以用户为中心组织进程状态信息显示
- -M :显示进程的安全信息
- -f :显示完整格式的输出
- -j :显示任务信息
- -l :显示长列表
- -o :仅显示由 format 指定的列
- -y :不要显示进程标记
- -L :显示进程中的线程
其实我们只要记住 ps 一般使用的命令参数搭配即可,它们并不多,如下:
1 | ps aux # 查看系统所有的进程数据 |
22、top - 查看系统的整体运行情况
实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过 top 命令所提供的互动式界面,用热键可以管理。它的常用参数如下:
- -b:以批处理模式操作;
- -c:显示完整的命令;
- -i <时间>:设置间隔时间;
- -u <用户名>:指定用户名;
- -p <进程号>:指定进程;
- -n <次数>:循环显示的次数。
top 交互命令如下:
- h:显示帮助画面,给出一些简短的命令总结说明;
- k:终止一个进程;
- i:忽略闲置和僵死进程,这是一个开关式命令;
- q:退出程序;
- r:重新安排一个进程的优先级别;
- S:切换到累计模式;
- s:改变两次刷新之间的延迟时间(单位为 s),如果有小数,就换算成 ms。输入 0 值则系统将不断刷新,默认值是 5s;
- f 或者 F:从当前显示中添加或者删除项目;
- o 或者 O:改变显示项目的顺序;
- l:切换显示平均负载和启动时间信息;
- m:切换显示内存信息;
- t:切换显示进程和 CPU 状态信息;
- c:切换显示命令名称和完整命令行;
- M:根据驻留内存大小进行排序;
- P:根据 CPU 使用百分比大小进行排序;
- T:根据时间 / 累计时间进行排序;w:将当前设置写入~/.toprc 文件中。
1 | top # 显示系统中进程的资源占用状况 |
相关命令:iotop、htop
23、kill - 根据进程 ID 杀死进程
该命令用于向某个工作(%jobnumber)或者是某个 PID(数字)传送一个信号,它通常与 ps 和 jobs 命令一起使用,它的基本语法如下:
1 | kill -signal PID |
signal 的常用参数如下:
- 1:SIGHUP,启动被终止的进程
- 2:SIGINT,相当于输入 ctrl+c,中断一个程序的进行
- 9:SIGKILL,强制中断一个进程的进行
- 15:SIGTERM,以正常的结束进程方式来终止进程
- 17:SIGSTOP,相当于输入 ctrl+z,暂停一个进程的进行
注: 最前面的数字为信号的代号,使用时可以用代号代替相应的信号。
1 | # 以正常的结束进程方式来终于第一个后台工作,可用jobs命令查看后台中的第一个工作进程 |
kill -15 PID 和 kill -9 PID 的区别
kill -9 PID 是操作系统从内核级别强制杀死一个进程。
kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭。效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是 Linux 缺省的程序中断信号。
尽量使用 kill -15 PID 而不要使用 kill -9 PID。
kill -9 PID 没有给进程留下善后的机会:
- 关闭 socket 链接
- 清理临时文件
- 将自己将要被销毁的消息通知给子进程
- 重置自己的终止状态
一些磁盘操作多的程序更是不要使用 kill -9 PID,会导致数据的丢失,如 ES,kafka 等。
批量杀死进程 (ps/grep/awk/kill)
1 | ps aux|grep server|grep -v grep | awk '{print $2}'|xargs kill -9 |
说明:
管道符”|” 用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
awk 的作用是输出某一列,{print $2} 就是输出第二列,如上即是 pid 这一列。
“xargs kill -9” 中的 xargs 命令是用来把前面命令的输出结果作为”kill -9″命令的参数,并执行该命令。”kill -9″会强行杀掉指定进程。
24、killall - 杀死指定名字的进程
用于杀死指定名字的进程,向一个命令启动的进程发送一个信号,它的一般语法如下:
1 | killall [-iIe] [command name] |
它的参数如下:
- -i :交互式的意思,若需要删除时,会询问用户
- -e :表示后面接的 command name 要一致,但 command name 不能超过 15 个字符
- -I :命令名称忽略大小写
1 | killall -SIGHUP syslogd # 重新启动syslogd |
25、file - 辨识文件类型
该命令用于辨识文件类型,因为在 Linux 下文件的类型并不是以后缀为分的,所以这个命令对我们来说就很有用了,它的用法非常简单,基本语法如下:
1 | file filename |
查看 test 文件格式:
1 | file ./test |
26、tar - 对文件压缩解压缩
该命令用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如 gzip 和 bzip 等)进行压缩和解压。它的常用参数如下:
- -c :新建打包文件
- -t :查看打包文件的内容含有哪些文件名
- -x :解打包或解压缩的功能,可以搭配 - C(大写)指定解压的目录
- -j :通过 bzip2 的支持进行压缩 / 解压缩
- -z :通过 gzip 的支持进行压缩 / 解压缩
- -v :在压缩 / 解压缩过程中,将正在处理的文件名显示出来
- -f filename :filename 为要处理的文件
- -C dir :指定压缩 / 解压缩的目录 dir
注意:-c,-t,-x 不能同时出现在同一条命令中
通常我们只需要记住下面几条命令即可:
1 | # 压缩 |
27、zip/unzip/gzip/gunzip - 对文件压缩解压缩
用于压缩、解压缩文件,zip 压缩的后文件是 *.zip ,而 gzip 压缩后的文件 *.gz,相应的解压缩命令则是 gunzip 和 unzip。
1 | # 将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip: |
28、adduser/useradd/userdel - 增加删除用户
adduser/useradd 为创建用户命令,使用权限:系统管理员,root 用户。常用参数说明如下:
- -c comment:加上备注文字。备注文字会保存在通常是 /etc/passwd)的备注栏位中。
- -d home_dir:设定使用者的根目录为 home_dir ,预设值为预设的 home 后面加上使用者帐号
- -e expire_date:设定此帐号的使用期限(格式为 YYYY-MM-DD),预设值为永久有效
- -f inactive_time:帐号过期几日后永久停权。当值为 0 时帐号则立刻被停权。而当值为 - 1 时则关闭此功能,预设值为 - 1
- -g <群组>:指定用户所属的群组。
- -r :建立一个系统的帐号,这个帐号的 UID 会有限制 (/etc/login.defs)
1 | # 添加一个一般用户 |
用户删除命令:userdel,语法如下:
1 | userdel [login ID] |
删除用户 kk:
1 | userdel kk |
29、passwd - 修改用户密码
更改使用者的密码,常用参数如下:
- -d:删除密码
- -l:停止账号使用
- -S:显示密码信息
- -u:启用已被停止的账户
- -x:设置密码的有效期
- -g:修改群组密码
- -i:过期后停止用户账号
1 | # 修改用户密码 |
30、time - 测算一个命令的执行时间
该命令用于测算一个命令的执行时间。就像平时输入命令一样,不过在命令的前面加入一个 time 即可。
在程序或命令运行结束后,在最后输出了三个时间,它们分别是:
- user:用户 CPU 时间,命令执行完成花费的用户 CPU 时间,即命令在用户态中执行时间总和;
- system:系统 CPU 时间,命令执行完成花费的系统 CPU 时间,即命令在核心态中执行时间总和;
- real:实际时间,从 command 命令行开始执行到运行终止的消逝时间;
1 | time ./process.sh # 查看process.sh脚本执行时间 |
31、free - 显示内存的使用情况
显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
参数说明:
- -b:以 Byte 为单位显示内存使用情况。
- -k:以 KB 为单位显示内存使用情况。
- -m :以 MB 为单位显示内存使用情况。
- -g :以 GB 为单位显示内存使用情况。
- -o :不显示缓冲区调节列。
- -s <间隔秒数>:持续观察内存使用状况。
- -t:显示内存总和列。
1 | # 显示内存使用情况 |
32、crontab - 定时任务
用来定时的去跑一些脚本或者程序,linux 内置的 cron 进程能帮我们实现这些需求,精确到分,设计秒的我们一般自己写脚本。
相关配置文件说明:
- /var/spool/cron / 目录下存放的是每个用户包括 root 的 crontab 任务,每个任务以创建者的名字命名
- /etc/crontab 这个文件负责调度各种管理和维护任务。
- /etc/cron.d/ 这个目录用来存放任何要执行的 crontab 文件或脚本。
- 我们还可以把脚本放在 / etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly 目录中,让它每小时 / 天 / 星期、月执行一次。
常用参数说明:
- -u :省略该参数,表示操作当前用户的 crontab
- -e:编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
- -l:显示某个用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
- -r:从 / var/spool/cron 目录中删除某个用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
- -i:在删除用户的 crontab 文件时给确认提示
注意:-r,-i 尽量不要执行
常见操作命令如下:
1 | crontab -e # 编辑定时任务 |
定时任务配置实例如下:
1 | # Example of job definition: |