作为软件开发工程师,你不得不会的32个Linux命令(上)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 做软件开发的朋友,相信大家或多或少都接触过Linux,知道Linux中的命令是非常多的,但是我们也不必因此而烦恼,因为我们只需要掌握常用的命令,就可以满足我们日常工作开发了。下面汇总了果冻做开发以来最常用的32个命令,分享给有需要的朋友。

1、cd-切换当前目录

这是一个最基本,也是最常用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。

cd /root   # 切换到目录/root
cd ./path          # 切换到当前目录下的path目录中,“.”表示当前目录    
cd ../path         # 切换到上层目录中的path目录中,“..”表示上一层目录  
复制代码


2、ls-查看文件与目录

这也是一个非常有用的查看文件与目录的命令,它的参数非常多,下面就列出一些常用的参数:

  • -l :列出长数据串,包含文件的属性与权限数据等
  • -a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
  • -d :仅列出目录本身,而不是列出目录的文件数据
  • -h :将文件容量以较易读的方式(GB,kB等)列出来
  • -R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来

注:这些参数也可以组合使用

ls -l   # 以长数据串的形式列出当前目录下的数据文件和目录 
ls -al   # 以长数据串的形式列出当前目录下的数据文件和目录及隐藏文件(常用)
ls -lR  # 以长数据串的形式列出当前目录下的所有文件  
ls -aR # 列出当前目录所有文件,包括子目录
ls -al --block-size=m  # 查看文件大小,其中k,m,g表示单位
复制代码

相关命令:

如果想展示树形结构,可使用tree命令

# 使用yum install tree命令先安装tree
tree # 树形展示当前目录下所有子文件和目录,该命令不显示中文
tree -N # 中文展示
tree -N -L 2 # 遍历两级菜单
tree /home --charset=gbk -L 2 # 设定中文编码
# -a显示所有文件,-C文件与目录清单加上颜色,-L 2遍历两级菜单
tree -aC -L 2 
复制代码


3、grep-分析一行内容过滤筛选

分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等,下面就列出一些常用的参数:

  • -a :将binary文件以text文件的方式查找数据
  • -c :计算找到‘查找字符串’的次数
  • -i :忽略大小写的区别,即把大小写视为相同
  • -v :反向选择,即显示出没有‘查找字符串’内容的那一行
# 把ls -l的输出中包含字母file(不区分大小写)的内容输出  
ls -l | grep -i file  
# 取出文件/etc/passwd中包含root的行,并把找到的关键字加上颜色  
grep --color=auto 'root' /etc/passwd
# 当我们需要过滤多个文件时,也很管用
# 查看以smart开头的目录下面以smart开头的properties配置文件是否包含kafka
grep --color=auto 'kafka' smart*/smart*.properties
复制代码


4、cat-查看文本文件的内容

该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据,下面就列出一些常用的参数:

  • -n :由 1 开始对所有输出的行数编号。
  • -b :和 -n 相似,只不过对于空白行不编号。
cat text | less # 查看text文件中的内容,这条命令也可以使用less text来代替 
cat /etc/redhat-release # 查看操作系统版本号
cat /proc/version  # 查看操作系统版本
cat /etc/os-release # 查看操作系统版本号
cat /etc/*release*  # 查看操作系统版本号,这个命令比较好使
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
cat /proc/cpuinfo # 查看CPU信息
# 查看物理CPU个数
cat /proc/cpuinfo | grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo | grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo | grep "processor" | wc -l
# 查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/meminfo # 查看内存信息
# 查看所有用户帐号的信息,包括用户名和密码
# passwd文件由许多条记录组成,每条记录占一行,记录了一个用户帐号的所有信息。
# 每条记录由7个字段组成,字段间用冒号“:”隔开,其格式如下:
# username:password:User ID:Group ID:comment:home directory:shell
cat /etc/passwd 
cat /etc/resolv.conf # 查看DNS
# 过滤有error的行,并输出行号
cat -n app.log | grep 'error'
# 清空 /etc/test.txt 文档内容
cat /dev/null > /etc/test.txt
复制代码


5、tail/tailf-从尾部查看文本文件的内容

用于从文件尾部查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

常用参数如下:

  • -f:循环读取
  • -c<数目>:显示的字节数
  • -n<行数>:显示文件的尾部 n 行内容
# 查看文件的后10行
tail -10 /etc/passwd 或 tail -n 10 /etc/passwd 
# 不停地去读/var/log/messages文件最新的内容,这样有实时监视的效果,用Ctrl+c来终止!
tail -f /var/log/messages 
# 显示文件 notes.log 的内容,从第 20 行至文件末尾:
tail +20 notes.log
# 显示文件 notes.log 的最后 10 个字符:
tail -c 10 notes.log
复制代码

tailf 等同于tail -f -n 10,与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电。


6、find-查找文件

一个查找文件的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出。

# 命令格式
find [PATH] [option] [action]  
# 与时间有关的参数:  
-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件
-mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名
-mtime -n : 列出在n天之内(含n天本身)被更改过的文件名
-newer file : 列出比file还要新的文件名
# 例如:  
find /root -mtime 0 # 在当前root目录下查找今天之内有改动的文件  
find /root -newer xxx # 在当前root目录下查找比file还要新的文件名
# 与用户或用户组名有关的参数:  
-user name : 列出文件所有者为name的文件  
-group name : 列出文件所属用户组为name的文件  
-uid n : 列出文件所有者为用户ID为n的文件  
-gid n : 列出文件所属用户组为用户组ID为n的文件
# 例如:  
find /home/liguodong -user liguodong # 在目录/home/liguodong 中找出所有者为liguodong的文件  
# 与文件权限及名称有关的参数:  
-name filename :找出文件名为filename的文件  
-size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件  
-tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、  
             目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p);  
-perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;  
-perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示  
-perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示  
# 例如:  
find / -name passwd # 查找文件名为passwd的文件  
find . -perm 0755 # 查找当前目录中文件权限的0755的文件, 第一个0,表示十进制  
find . -size +1k # 查找当前目录中大于1KB的文件,注意c表示byte  
find . -size +1024c # 查找当前目录中大于1KB的文件
复制代码


7、locate-查找文件

用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。当我们不知道某个文件放哪里了,能够通过他快速定位到文件目录,这是一条非常有用的命令。

# 查找eureka-server-xxx.jar文件的位置
locate 'eureka-server-xxx.jar'
# 查询包含passwd的目录或文档
locate passwd
复制代码

locate与find的不同:

find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为:

locate -u 
复制代码


8、cp-复制文件

该命令用于复制文件,它还可以把多个文件一次性地复制到一个目录下,它的常用参数如下:

  • -a :将文件的特性一起复制
  • -p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
  • -i :若目标文件已经存在时,在覆盖时会先询问操作的进行
  • -r :递归持续复制,用于目录的复制行为
  • -u :目标文件与源文件有差异时才会复制
cp -a file1 file2  # 连同文件的所有特性把文件file1复制成文件file2  
cp file1 file2 file3 dir  #把文件file1、file2、file3复制到目录dir中  
复制代码


9、scp-远程复制文件

该命令用于 Linux 之间复制文件和目录。 scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 是加密的。

# 命令格式
scp [可选参数] file_source file_target
scp local_file remote_username@remote_ip:remote_folder 
scp local_file remote_username@remote_ip:remote_file 
scp local_file remote_ip:remote_folder 
scp local_file remote_ip:remote_file  
复制代码

下面就列出一些常用的参数:

  • -p:保留原文件的修改时间,访问时间和访问权限。
  • -q: 不显示传输进度条。
  • -r: 递归复制整个目录。
  • -v:详细方式显示输出。
# 从本地服务器复制到远程服务器
# 复制文件
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 
# 复制文件夹
scp -r /home/space/music/ root@www.runoob.com:/home/root/others/ 
# 从远程服务器复制到本地服务器
# 复制文件
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
# 复制文件夹
scp -r www.runoob.com:/home/root/others/ /home/space/music/
复制代码


10、vim-编辑文件

该命令主要用于文本编辑,它接一个文件名作为参数,如果文件存在就打开,如果文件不存在就以该文件名创建一个文件。vim是一个非常好用的文本编辑器,它里面有很多非常好用的命令,在这里不再多说。

vim demo.txt # 编辑demo.txt文件
复制代码


11、mv-移动目录文件

该命令用于移动文件、目录或更名,move之意,它的常用参数如下:

  • -f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
  • -i :若目标文件已经存在,就会询问是否覆盖
  • -u :若目标文件已经存在,且比目标文件新,才会更新

注: 该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是“目录”。

mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中  
mv file1 file2  # 把文件file1重命名为file2
mv xxdir/ tempdir # 把目录xxdir下的所有文件和目录移动到temp目录下,包含xxdir目录
mv xxdir/* tempdir # 把目录xxdir下的所有文件和目录移动到temp目录下,不包含xxdir目录
复制代码


12、rm-删除目录文件

该命令用于删除文件或目录,remove之意,它的常用参数如下:

  • -f :就是force的意思,忽略不存在的文件,不会出现警告消息
  • -i :互动模式,在删除前会询问用户是否操作
  • -r :递归删除,最常用于目录删除,它是一个非常危险的参数
rm -i file # 删除文件file,在删除之前会询问是否进行该操作  
rm -rf dir # 强制删除目录dir中的所有文件  
复制代码

**避免rm -rf ***

cd ${log_path}
rm -rf *
复制代码

上面的命名,先进入到日志目录,然后把日志都删除。看上去没有任何问题。但是,当目录不存在时,悲剧就发生了。

ps:偷偷告诉你一个小故事,我之前就犯过这种错误,不过好在是自己学习虚拟机上面。如果实现线上生产环境,就不是故事了,而是事故了。

上诉问题有四种方法进行规避:

第一、命令替换,在生产环境把rm -rf 命令替换为mv,再写个定时shell定期清理。模拟了回收站的功能。

第二、收拢权限,帐号权限的分离,线上分配work帐号,只能够删除/home/work/logs/目录,无法删除根目录。大公司一般线上权限管理比较规范,小公司就未必了,搞不好所有的小伙伴都有权限在线上乱搞。

第三、使用&& ,可以通过“&&”,将

cd ${log_path}
rm -rf *
复制代码

合并成一个语句

cd ${log_path} && rm -rf *
复制代码

当前半句执行失败的时候,后半句不再执行。

第四、判断目录是否存在,制定编码规范,对目录进行操作之前,要先判断目录是否存在。靠人的自觉来保证规范的执行,总感觉有些不太靠谱。当然,规范是有必要的。


13、ln-连接

这是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接它就可以,不必重复的占用磁盘空间。

而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

它的常用参数如下:

  • -f : 链接时先将与 dist 同档名的档案删除
  • -i : 在删除与 dist 同档名的档案时先进行询问
  • -n : 在进行软链接时,将 dist 视为一般的档案
  • -s : 进行软链接(symbolic link)
  • -v : 在连结之前显示其档名
  • -b : 将在链接时会被覆写或删除的档案进行备份
# 创建软链接在/usr/bin/目录下freeswitch文件,
# 如果 /usr/local/freeswitch/bin/freeswitch丢失,/usr/bin/freeswitch将失效
ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/
# 删除软链接,和删除普通的文件是一眼的,删除都是使用rm来进行操作
rm -rf 软链接名称
# 下面我们来创建test_chk目录的软链接
ln -s test_chk test_chk_ln
#软链接创建好了,我们来看看怎么删除它
# 正确的删除方式(删除软链接,但不删除实际数据)
rm -rf  ./test_chk_ln
# 错误的删除方式
rm -rf ./test_chk_ln/ (这样就会把原来test_chk下的内容删除)
复制代码

软链接与硬链接的区别:

软链接:

  • 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 软链接可以 跨文件系统 ,硬链接不可以
  • 软链接可以对一个不存在的文件名进行链接
  • 软链接可以对目录进行链接

硬链接:

  • 硬链接,以文件副本的形式存在。但不占用实际空间。
  • 不允许给目录创建硬链接
  • 硬链接只有在同一个文件系统中才能创建


14、chmod-修改文件权限

chmod用于管理文件或目录的权限,文件或目录权限的控制分别以读取(r)、写入(w)、执行(x)3种,一般的用法如下:

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表示读可执行

chmod g+w file # 向file的文件权限中加入用户组可写权限 
# 文件 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt 
chmod 755 file # 把file的文件权限改变为-rxwr-xr-x 
chmod a=rwx file  等价于 chmod 777 file
chmod ug=rwx,o=x file 等价于 chmod 771 file
复制代码


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
5天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
17 2
|
5天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
22 3
|
8天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
33 6
|
8天前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
22 7
|
9天前
|
监控 Linux Perl
Linux 命令小技巧:显示文件指定行的内容
在 Linux 系统中,处理文本文件是一项常见任务。本文介绍了如何使用 head、tail、sed 和 awk 等命令快速显示文件中的指定行内容,帮助你高效处理文本文件。通过实际应用场景和案例分析,展示了这些命令在代码审查、日志分析和文本处理中的具体用途。同时,还提供了注意事项和技巧,帮助你更好地掌握这些命令。
23 4
|
8天前
|
缓存 网络协议 Linux
Linux ip命令常用操作
Linux的 `ip`命令是一个强大且灵活的网络管理工具,能够执行从基本的网络接口配置到高级的路由和VLAN管理等多种操作。通过熟练掌握这些常用操作,用户可以更加高效地管理和配置Linux系统的网络环境。无论是在日常管理还是故障排除中,`ip`命令都是必不可少的工具。
11 2
|
4月前
|
Linux
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
|
4月前
|
Linux
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
|
4月前
|
Linux
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的