【Linux】Linux常用命令

1,501 阅读9分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

所有文件和目录管理命令都很常用,查看知道cat基本够用 没有看到需要的命令的话,试试看Linux命令分类或者Linux命令大全

0. 简单命令

man命令:显示联机帮助手册

格式:man 命令 如:man ls 显示出ls命令的功能及选项的含义

0.1. date命令:显示或设置系统时间。

-d datestr : 显示 datestr 中所设定的时间 (非系统时间) -s datestr : 将系统时间设为 datestr 中所设定的时间 --version : 显示版本编号

0.2. cal命令:显示日历。

0.3. who用户信息

列出所有正在使用系统的用户、所有终端名和注册到系统的时间。

0.4. echo命令:将命令行中的参数显示到标准输出(即屏幕)上

(1)显示普通字符串:
echo "It is a test"
这里的双引号完全可以省略

(2)显示转义字符
echo "\"It is a test\""
结果将是:"It is a test"   同样,双引号也可以省略

(3)显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh
read name 
echo "$name It is a test"
以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:
[root@www ~]# sh test.sh
OK                     #标准输入
OK It is a test        #输出

(4)显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
输出结果:
OK!

It is a test

(5)显示不换行
#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
输出结果:
OK! It is a test

(6)显示结果定向至文件
echo "It is a test" > myfile

(7)原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'
输出结果:$name\"

(8)显示命令执行结果
echo `date`
注意: 这里使用的是反引号 `, 而不是单引号 '。
结果将显示当前日期
Thu Jul 24 10:08:46 CST 2014

0.5. clear 清屏

0.6. 符号说明

0.6.1 > >>输入、输出重定向命令:

输出重定向命令>和>>:可将某命令的结构输出到文件中。“>”该文件原有的内容会被删除;“>>”附加到文件中,原文件内容不会被清除。如:

ls –a >dir.txt					将ls –a命令执行结果输出到dir.txt文件

cat data1.txt  >>data2.txt		将data1.txt 内容附加到data2.txt文件之后

输入重定向命令<:将文件的内容作为某命令的输入。如:

sort <file1 >file2	sort命令从file1中取得输入,输出送到file2

0.6.2 |管道命令

“|”管道命令:将某命令的结果输出给另一命令。如:

ls | gerp conf      搜索并显示ls命令的运行结果中包含有“conf”的字符串

cat file1 file2 file3 | sort >/dev/lp  
cat命令将三个文件合并,并将结果送出到sort命令,按字母表顺序排序,sort的输出又重定向到文件/dev/lp中,这通常是打印机。

1.文件与目录管理

速览:

  • ls(英文全拼:list files): 列出目录及文件名
  • cd(英文全拼:change directory):切换目录
  • pwd(英文全拼:print work directory):显示目前的目录
  • mkdir(英文全拼:make directory):创建一个新的目录
  • rmdir(英文全拼:remove directory):删除一个空的目录
  • cp(英文全拼:copy file): 复制文件或目录
  • rm(英文全拼:remove): 删除文件或目录
  • mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
  • 你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp 详细解析:

1.1 ls 列出目录

选项与参数:

代码功能
-a全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-d仅列出目录本身,而不是列出目录内的文件数据(常用)
-l长数据串列出,包含文件的属性与权限等等数据,显示文件的详细信息;(常用)
-k显示文件大小,以K为单位
-s显示每个文件所用的空间
-S指定按所用空间的大小排序文件
-i在输出的第一列显示文件的i节点号

ls 参数 目录名称

[root@www ~]# ls -al ~  

将目录下的所有文件列出来(含属性与隐藏档)

1.2 cd 切换目录

cd tony		切换到当前目录下的tony子目录
cd ..			切换到上一层目录
cd /			切换到系统根目录
cd			切换到用户主目录
cd /usr/bin	切换到/usr/bin目录

1.3 pwd显示目前所在的目录

[root@www ~]# pwd [-P]

选项与参数:

  • -P :显示出确实的路径,而非使用连结 (link) 路径。

1.4 mkdir 创建新目录

mkdir [-mp] 目录名称

选项与参数:

  • -m :配置文件,无视权限
  • -p :多层创建目录

1.5 rmdir 删除空目录

rmdir [-p] 目录名称

选项与参数:

  • -p :从该目录起,一次删除多级空目录

1.6 rm 移除文件或目录

rm [-fir] 文件或目录
rm file1.txt		删除指定的文件file1.txt
rm *			删除当前目录下的所有文件
rm –r dir1		加-r递归删除dir1目录下的所有文件及子目录
rm –f file2.txt	加-f强迫删除文件file2.txt,即rm命令会直接删除文件,不再询问

选项与参数:

  • -f : force 的意思,忽略不存在的文件,不会出现警告信息;
  • -i :互动模式,在删除前会询问使用者是否动作
  • -r :非常危险的选项!!!多层删除
  • -v : 显示删除过程

1.7 cp 复制文件或目录

[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
cp data1.txt data2.txt		将data1.txt复制成data2.txt,相当于重命名
cp data3.txt /tmp/data		将data3.txt复制到/tmp/data目录中
cp –v zip.txt zip3.txt		加-v显示复制过程
cp –v –R * backup		加-R递归复制,
将当前目录下所有文件(含子目录文件)复制到backup目录下

选项与参数:

  • -a:相当 -pdr 的意思,至於 pdr 请参考下列说明;(常用)

  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;

  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

  • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;

  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);

  • -r递归持续复制,用於目录的复制行为;(常用)

  • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;

  • -u:若 destination 比 source 旧才升级 destination

  • -v: 显示复制过程

1.8 mv 移动文件与目录,或修改名称

语法:

[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory

选项与参数:

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
  • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

示例:复制一文件,创建一目录,将文件移动到目录中

[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest

将刚刚的目录名称更名为 mvtest2

[root@www tmp]# mv mvtest mvtest2

1.9 locate 查找文件

locate 命令可用来搜索包含指定条件字符串的文件或目录。如:

locate zh_CN 		列出所有包含“zh_CN”字符串的文件和目录

由于locate命令是从系统中保存文件及目录名称的数据库中搜索文件,虽然系统会定时更新数据库,但对于刚新增或删除的文件、目录,仍然可能会因为数据库尚未更新而无法查得,此时可用root身份运行updatedb命令更新,为此数据库得内容正确。

1.10 grep 搜索字符串

grep text *.conf		搜索当前目录中扩展名为.conf且包含“text”字符串的文件

具体grep菜鸟教程

1.11 chmod 修改文件权限

格式:chmod [选项] 文件或目录名

选项说明
u文件所有者
g文件所属组
o其它用户
a所有用户
+增加权限
-取消权限
=赋给权限
r读权限
w写权限
x执行权限
chmod 	a+rw 	file1
chmod	755		file2		即file2的保护位为:rwx r-x r-x

1.12 chown 改变文件所有者

格式:chown [选项] [用户名][组名] 文件或目录名 选项说明: -c 文件属主改变时显示说明。 -R/r 改变目录下的文件及其子目录下所有文件的属主。

chown -R bugboy dir	   
改变 dir 目录下的文件及其子目录下的文件的属主为bugboy 

1.13 ln 在文件间建立链接

格式:ln [选项] 源文件 目录文件或目录 格式说明

-b  	为删除的文件建立备份。
-d  	允许root用户建立硬链接。
-F  	与b相同。
-f  	强行删除目标文件。
-i  	在删除文件时给出提示。
-n  	当目标文件是目录的符号链接时,替代该符号链接。
-s  	用符号链接代替硬链接(建立符号链接)。
-v  	输出被链接文件的文件名。

2.文件内容查看

速览:

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示,看出 tac 是 cat 的倒着写!
  • nl 显示的时候,顺道输出行号
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行

你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。

2.1 cat 由第一行开始显示文件内容

语法:

cat [-AbEnTv]

选项与参数:

  • -A :相当-vET 的整合选项,可列出一些特殊字符而不是空白而已;
  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
  • -E :将结尾的断行字节 $ 显示出来;
  • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
  • -T :将 [tab] 按键以 ^I 显示出来;
  • -v :列出一些看不出来的特殊字符 检看 /etc/issue 这个文件的内容:

2.2 tac与cat命令刚好相反,文件最后一行开始显示

2.3 nl 显示行号

语法:

nl [-bnw] 文件

选项与参数:

  • -b :指定行号指定的方式,主要有两种:
    • -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    • -b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种:
    • -n ln :行号在荧幕的最左方显示;
    • -n rn :行号在自己栏位的最右方显示,且不加 0 ;
    • -n rz :行号在自己栏位的最右方显示,且加 0 ;
  • -w :行号栏位的占用的位数。

2.4 more 一页一页翻动

为了避免画面显示瞬间就闪过去,用户可以使用more命令,让画面在显示满一页时暂停,此时可按空格键继续显示下一个画面,或按Q键停止显示。 当使用ls命令查看文件列表时,若文件太多则可以配合more命令使用。如:

ls	–al	more
单独使用more命令时,可用来显示文件的内容。如:
[root@www ~]# more /etc/man_db.config 

....(中间省略).... --More--(28%) 你的光标也会在这里等待你的命令,在 more 这个程序的运行过程中,你有几个按键可以按的:

  • 空白键 (space):代表向下翻一页;
  • Enter :代表向下翻『一行』;
  • /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
  • :f :立刻显示出档名以及目前显示的行数;
  • q :代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

2.5 less 一页一页翻动

以下实例输出/etc/man.config文件的内容:

[root@www ~]# less /etc/man.config

....(中间省略).... : <== 这里可以等待你输入命令! less运行时可以输入的命令有:

  • 空白键 :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字串 :向下搜寻『字串』的功能;
  • ?字串 :向上搜寻『字串』的功能;
  • n :重复前一个搜寻 (与 / 或 ? 有关!)
  • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q :离开 less 这个程序;

2.6 head 取出文件前面几行

语法:

head [-n number] 文件 

选项与参数:

  • -n :后面接数字,代表显示几行的意思
[root@www ~]# head /etc/man.config

默认的情况中,显示前面 10 行,若要显示前 20 行,就得要这样:

[root@www ~]# head -n 20 /etc/man.config
[root@www ~]# head -20 /etc/man.config

2.7 tail 取出文件后面几行

语法:

tail [-n number] 文件 

选项与参数:

  • -n :后面接数字,代表显示几行的意思
  • -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~]# tail /etc/man.config

默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:

[root@www ~]# tail -n 20 /etc/man.config
tail mfile			显示文件mfile的最后10行
tail +20 mfile		显示文件mfile的内容,从第20行至文件末尾
tail –c 10 mfile		显示文件mfile的最后10个字符

3. yum常用命令

3.1 install 安装

安装指定的软件:yum install <package_name> 可安裝的软件清单:yum list

3.2 update 更新

列出可更新的软件清单:yum check-update 更新所有软件:yum update 更新指定的软件:yum update <package_name>

3.3 remove 删除

删除软件包命令:yum remove <package_name>

3.4 search 查找

查找软件包命令:yum search 例子:找出以 pam 为开头的软件名称

yum list pam*

3.5 clean 清除缓存

yum clean packages: 清除缓存目录下的软件包 yum clean headers: 清除缓存目录下的 headers yum clean oldheaders: 清除缓存目录下旧的 headers yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers

3.6 设置yum源

首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo

运行以下命令生成缓存

yum clean all
yum makecache

除了网易之外,国内还有其他不错的 yum 源,比如中科大和搜狐。

中科大的 yum 源,安装方法查看:lug.ustc.edu.cn/wiki/mirror…

sohu 的 yum 源安装方法查看: mirrors.sohu.com/help/centos… 阿里云CentOS 8 EOL如何切换源?

4. 其他

4.1 tar gzip unzip 打包压缩解压(常用)

4.1.1 tar 打包文件

tar命令位于/bin目录中,它能将用户所指定的文件或目录打包成一个文件,不过它并不做压缩。一般Unix上常用的压缩方式是先用tar命令将许多文件打包成一个文件,再以gzip等压缩命令压缩文件

格式:tar [选项] 选项说明:

-c		创建一个新的tar文件  --create
-v		显示运作过程信息 --verbose
-f		指定文件名称 -file=
-z		调用gzip压缩命令执行压缩 --gzip
-j		调用bzip2压缩命令执行压缩 
-t		查看压缩文件内容
-x		解开tar文件 --extract

如:

tar cvf  usr.tar  /home		把/home目录下包括其子目录全部做备份文件usr.tar
tar czvf usr.tar.gz  /home	把/home目录下包括其子目录全部做备份文件,并进行压缩
tar tvf	 usr.tar	| more	查看usr.tar备份文件的内容,并以分屏方式显示
tar	xvf	 file1.tar			解开file1.tar文件
tar	zxvf file2.tar.gz		使用-z参数来解开.tar.gz文件
tar	jxvf file3.tar.bz2		使用-j参数来解开.tar.bz2文件
# 创建一个名为 abc 的目录
mkdir abc

# 进入 abc 这个目录
cd abc

# 创建两个文件,文件名为1.txt 2.txt
touch 1.txt 2.txt

# 切换到 abc 的父目录
cd ..

# 将文件 abc 进行压缩时,排除1.txt,压缩后的文件名为 abc.tar
tar --exclude=abc/1.txt -zcvf abc.tgz abc

# 解压文件
tar -zxvf abc.tgz

# 删除压缩文件
rm abc.tgz

# 删除解压后的文件,并删除文件夹
rm -rf abc

4.1.2 gzip

gzip是在Linux系统中经常使用的一个对文件进行压缩

格式:gzip [选项] 压缩(解压缩)的文件名 选项说明:

-c 		将输出写到标准输出上,并保留原有文件。
-d 		将压缩文件解压。
-l 		对每个压缩文件,显示下列字段:压缩文件的大小、未压缩文件的大小、压缩比、未压缩文件的名字
-r 		递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
-t 		测试,检查压缩文件是否完整。
-v 		对每一个压缩和解压的文件,显示文件名和压缩比。
-num 	用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6
gzip usr.tar			将usr.tar压缩为usr.tar.gz文件
gzip file1.txt			将file1.txt压缩为file1.txt.gz文件
gzip –dv usr.tar.gz		将压缩文件usr.tar解压,并列出详细的信息

4.1.3 unzip 解压缩

该命令用于解扩展名为.zip的压缩文件。 格式:unzip [选项] 压缩文件名.zip 选项说明:

-x 		文件列表 解压缩文件,但不包括指定的file文件。
-v 		查看压缩文件目录,但不解压。
-t 		测试文件有无损坏,但不解压。
-d 		目录 把压缩文件解到指定目录下。
-z 		只显示压缩文件的注解。
-n 		不覆盖已经存在的文件。
-o 		覆盖已存在的文件且不要求用户确认。
-j 		不重建文档的目录结构,把所有文件解压到同一目录下
uzip text.zip			将压缩文件text.zip在当前目录下解压缩

4.2 screen命令

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s <shell>][-S <作业名称>]
-A  		将所有的视窗都调整为目前终端机的大小。
-d<作业名称> 将指定的screen作业离线。
-h<行数>  	指定视窗的缓冲区行数。
-m  		即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r<作业名称> 恢复离线的screen作业。
-R  		先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s<shell>  指定建立新视窗时,所要执行的shell。
-S<作业名称> 指定screen作业的名称。
-v  		显示版本信息。
-x  		恢复之前离线的screen作业。
-ls或--list 显示目前所有的screen作业。
-wipe  	检查目前所有的screen作业,并删除已经无法使用的screen作业。

4.3 kill命令

Linux kill 命令用于删除执行中的程序或工作。

kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。

语法

kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]

参数说明:

  • -l <信息编号>  列出系统支持的信号
  • -s <信息名称或编号>  指定向进程发送的信号
  • [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。 使用 kill -l 命令列出所有可用信号。

最常用的信号是: 0 检查进程是否存在 1 (HUP):重新加载进程。 9 (KILL):-9 表示无条件退出,但由进程自行决定是否退出 15 (TERM):正常停止一个进程,程序可以在完成收尾工作后再退出 实例:

杀死进程
# kill 12345

将进程挂起
# kill -stop PID

强制杀死进程
# kill -KILL 123456

发送SIGHUP信号,可以使用一下信号
# kill -HUP pid

彻底杀死进程
# kill -9 123456

杀死指定用户所有进程
#kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程 
#kill -u hnlinux //方法二

4.4 系统任务有关

4.4.1 具体场景

执行一个命令后,用Ctrl+Z把命令转移到了后台,想要kill该进程

  • 方法一 通过jobs命令查看job号(假设为num),然后执行kill %num 输入命令:jobs 终端显示:[1]+ Stopped vim /etc/network/interfaces > /home/leo/Desktop/ip.txt (wd: /) 执行 KILL %1
  • 方法二 通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid 输入命令:jobs -l 终端显示:[1]+ 4664 停止 vim /etc/network/interfaces > /home/leo/Desktop/ip.txt (wd: /) 看到4664,这个就是PID了 执行:kill 4664 终端没有显示。ok。

4.4.2 & 后台执行

这个用在一个命令的最后,可以把这个命令放到后台执行

4.4.3 ctrl + z 暂停执行

可以将一个正在前台执行的命令放到后台,并且暂停

4.4.4 jobs 查看任务

  • -l 显示作业列表时包括进程号
  • -n 显示上次使用jobs后状态发生变化的作业
  • -p 显示作业列表时仅显示其对应的进程号
  • -r 仅显示运行的(running)作业
  • -s 仅显示暂停的(stopped)作业

4.4.5 fg 调至前台

将后台中的命令调至前台继续运行 如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

4.4.6 bg 后台暂停的命令继续执行

将一个在后台暂停的命令,变成继续执行 如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

4.4.7 nohup 不挂起

nohup命令:该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。   该命令的一般形式为:nohup command &   使用nohup命令提交作业   如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:   

nohup command > myout.file 2>&1 &

  在上面的例子中,输出被重定向到myout.file文件中。

4.5 tumx

比screen好的窗口管理 tumx使用 先安装:

sudo dnf -y install tmux 【Fedora 22】
sudo yum -y install tmux 【Centos或RHEL】
sudo apt-get -y install tmux 【ubuntu】
# 开启新session
tmux
# 开启新session并命名
tmux new -s my_session


# 显示所有session
tmux ls


# 使用session编号接入
tmux attach -t 0
# 使用session名称接入
tmux attach -t <session-name>
tmux a -t name #简写


# 使用session编号kill
tmux kill-session -t 0
# 使用session名称kill
tmux kill-session -t <session-name>


# 使用session编号切换
tmux switch -t 0
# 使用session名称切换
tmux switch -t <session-name>


# 重命名会话
tmux rename-session -t 0 <new-name>



# 选择需要跳转的session会话
C + b s

# 重命名当前会话
C + b $

# 断开当前session
C + b d

# 在当前session中多加一个window
C + b c

# 在一个session中的多个window中作出选择
C + b w

# 关闭当前session中的当前window
C + b x

# 进入tmux翻屏模式, 实现上下翻页
C + b [  
### 进入翻屏模式后PgUp PgDn 实现上下翻页(mac可以用fn + ↑ ↓实现上下翻页)
### q 退出翻屏模式

#############
# 其他常用快捷键
##############

C + b !  #关闭一个session中所有窗口
C + b % #将当前窗口分成左右两分
C + b " #将当前窗口分成上下两分
C + b 方向键 #让光标在不同的窗口中跳转 
C + b 方向键 #按住C+b不放,同时按住方向键,可以调节光标所在窗口的大小