基本命令

命令入门

命令提示符详解

1
2
3
[root@localhost ~]#      #/root
[gtjin@localhost ~]$ #/home/gtjin
[root@node1 ~]# #/root

命令格式

命令 [选项] [参数] (三者之间要有空格,区分大小写)
command [-options] [args]

案例演示

1
2
3
4
5
6
[root@node1 ~]# ls
anaconda-ks.cfg
[root@node1 ~]# ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout bash_profile .bashrc .cshrc
.tcshrc .viminfo
[root@node1 ~]# ls -a -l

获取命令的帮助

查手册
man 命令
命令 –help
搜索引擎

echo

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@node1 ~]# help echo

#echo-n表示不要另起新行
[root@node1 ~]# echo "hello world"
helloworld
[root@node1 ~]# echo -n "hello world"
helloworld[root@node1~]#
#-e表示解释逃逸字符
[root@node1 ~]# echo -e "hello \nworld"
hello
world
[root@node1 ~]# echo "hello \nworld"
hello \nworld

环境变量:PATH

当在shell中执行命令的时候,默认到PATH指定的路径中查找可执行文件。
如果在PATH中的多个目录都包含该可执行文件,则执行最先找到的。

1
2
3
[root@node1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/us
r/sbin:/usr/bin:/root/bin

如果找不到,这提示命令不识别。

ls

ls:命令用于列出目录内容
ls:添加-l以长格式输出,列出根目录下内容的详细列表
ls -l:也可以后面跟多个目录,列出多个目录的内容
ls / /usr:也可以通过命令的别名列出详细列表

1
2
3
4
ll
ls -a
ls -a -l
ls -al

pwd

打印当前工作目录路径

1
2
[root@node1 ~]# pwd
/root

cd

cd用于更改shell工作目录,也就是切换目录change directory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#如果cd后什么都不写,表示直接回当前用户家目录
cd
cd /etc
#cd后跟波浪线,也表示回用户家目录
cd ~
#cd后也可以跟减号(-)用以表示回到最后一次切换之前的目录,多次使用减号在最近两个目录之间切换
cd /etc/sysconfig/network-scritps
cd -
#root用户可以直接通过绝对路径进到普通用户的家目录
cd /home/god
cd ..
ll
#也可以直接跟波浪线用户名表示直接进入到某个用户的家目录
cd ~bjsxt 到用户bjsxt家中去,root不受限制

mkdir

mkdir用于创建目录

1
2
3
4
5
6
7
8
9
10
11
mkdirabc
mkdir a1 a2 a3
#如果直接创建多层目录,则报错,因为默认只能创建最后一级目录
mkdir a/b/c
#可以添加-p选项,用以创建多层目录,因为系统发现某一级目录不存在的时候创建父目录
mkdir -p a/b/c
#也可以在mkdir后跟多个目录,用于一次性创建多个目录
mkdir ./abc/1dir ./abc/2dir ./abc/3dir
#但是可以使用大括号高效创建相似的目录
mkdir ./abc/{x,y,z}dir
mkdir abc/{a..c}dir

cp

cp文件…目标目录
拷贝文件…到目标目录,可以同时拷贝多个文件,文件名之间用空格隔开

1
2
3
[root@node1xdir]# cp ~/anaconda-ks.cfg.
cp:是否覆盖"./anaconda-ks.cfg"?y
[root@node1xdir]#

cp -r 文件…目标目录
拷贝目录到目标目录

1
2
3
4
5
6
7
8
9
10
[root@node1test]# mkdir xyz
[root@node1test]# ls
a a1 a2 a3 abc xyz
[root@node1test]# cp abc xyz/
cp:略过目录"abc"
[root@node1test]# cp -r abc xyz/
[root@node1test]# ls
a a1 a2 a3 abc xyz
[root@node1test]# ls xyz
abc

mv

mv用于移动或重命名文件

  • 移动文件/目录#mv源文件/[源文件1源文件2]目标目录
    1
    2
    3
    [root@node1abc]# mv anaconda-ks.cfg x/y/
    [root@node1abc]# ls x/y/
    anaconda-ks.cfgz
  • Linux中没有专门改名的命令,兼职改名工作:
    1
    2
    3
    4
    5
    6
    7
    8
    #修改目录名称mv旧名称新名称
    [root@node1test]# mv a3 ao3
    [root@node1test]#ls
    a a1 a2 abc ao3 xyz
    #修改文件
    [root@node1test]# mv anaconda-ks.cfg ks.cfg
    [root@node1test]#ls
    a a1 a2 abc ao3 ks.cfg xyz

ln

ln:用于创建硬链接或软链接

  • 可以使用ll -i选项让ll打印文件的inode信息
    1
    2
    [root@node1 ~]# cp /etc/profile ./
    [root@node1 ~]# ll –i
  • 创建硬链接
    1
    [root@node1 ~]# ln profile ln1
  • 创建软链接:让ln2指向profile,给profile创建软连接,相当于windows中的快捷方式
    1
    2
    3
    [root@node1 ~]#ln -s profile ln2
    #再次打印inode信息查看
    [root@node1 ~]# ll -i
    如果两个文件inode一样,表示两个文件(ln1和profile)实际上是同一个文件,硬连接。如果inode不一样,但是有ln2->profile,表示ln2是profile的软链接

    注意:ln1、ln2都不能提前创建,或是已经存在的文件,否则报错。

    1
    2
    3
    4
    #英文语言环境下的提示
    ln: creating symbolic link `ln1`:Fileexists
    #中文语言环境下的提示
    ln: 无法创建硬链接"ln1": 文件已存在
    软连接删除不会删除源文件
    硬链接删除后如果源文件没有硬链接,则文件被删除

rm

rm用于删除文件 直接删除,需要确认yes
rm file:添加-f选项可以不用确认强制删除
rm -f file

1
2
3
4
5
6
7
[root@node1 ~]# ls
anaconda-ks.cfg ln1 profile test x
[root@node1 ~]# rm profile
rm:是否删除普通文件"profile"?y
[root@node1 ~]# ls
anaconda-ks.cfg ln1 test x
[root@node1 ~]#rm -f anaconda-ks.cfg

如果rm的参数是目录,则会提示需要迭代删除而不能成功
rm adir

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@node1 ~]# ls
ln1 test x
[root@node1 ~]# rm x
rm:无法删除"x":是一个目录
#此时可以添加-r参数表示迭代删除
[root@node1 ~]# rm -r x
rm:是否进入目录"x"?y
rm:是否进入目录"x/y"?y
rm:是否删除目录"x/y/z"?y
rm:是否删除普通文件"x/y/anaconda-ks.cfg"?n
rm:是否删除目录"x/y"?n
rm:是否删除目录"x"?n
[root@node1 ~]# ls
ln1 test x
#也可以使用-rf选项,迭代强制删除某个文件或目录,此命令慎用。尤其是rm-rf/
[root@node1 ~]# rm -rf x
[root@node1 ~]# ls
ln1 test

df

  • 查看系统挂载的磁盘情况
    1
    2
    3
    4
    [root@node1 ~]# df
    文件系统 1K-块 已用 可用 已用% 挂载点
    devtmpfs 485816 0 485816 0% /dev

    在linux中用到了虚拟目录树,它的存在就是为了解耦应用和底层存储。

mount

  • 将光驱挂载到/mnt目录
    1
    2
    3
    4
    5
    [root@node1 ~]# mount /dev/cdrom /mnt
    #进入到/mnt目录
    [root@node1 ~]# cd /mnt
    #查看磁盘分区的挂载情况:
    [root@node1mnt]# df -h

umount

  • 卸载掉挂载的分区/mnt
    1
    [root@node1mnt]# umount /mnt

    注意卸载/mnt时,当前目录不能在/mnt下面,否则报出如下图所示提示:

    1
    2
    3
    4
    5
    6
    #再次查看磁盘分区的挂载情况:
    [root@node1 ~]# df -h
    #重新挂载
    [root@node1 ~]# mount /dev/cdrom /mnt
    #再次查看
    [root@node1 ~]# df -h

系统操作命令

du

du可以为目录递归地汇总每个FILE的磁盘使用情况。

  • du:文件系统的磁盘使用量或是目录使用量
  • a :列出所有的文件与目录容量
  • h :以人们较易读的容量格式(G/M)显示重要
  • s :列出总量而已,而不列出每个各别的目录占用容量
  • k :以KBytes列出容量显示
  • m :以MBytes列出容量显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@node1~]# cd /usr
[root@node1usr]# du
.......
0 ./etc
0 ./games
36 ./include/python2.7
36 ./include
24 ./libexec/getconf
16 ./libexec/awk
.......
#添加-s参数可以生成指定目录的汇总信息,也就是共占用多
大的磁盘空间
[root@node1usr]# du -s ./
1218820 ./
#添加-h参数可以显示为人类可以读懂的格式
[root@node1usr]# du -sh ./
1.2G ./
#将路径写成./*统计当前目录下每项内容占用的磁盘空间信息
[root@node1usr]# du -sh ./*
61M ./bin
0 ./etc
0 ./games

查看/etc目录下共占用多大磁盘空间

1
2
[root@node1usr]# du -sh /etc/
32M /etc/

stat

stat file:显示文件的元数据
change和modify的不同
modify指的是文件内容被修改的时间
change表示文件元数据被修改的时间

history

查看历史命令

1
2
3
4
5
6
7
8
9
[root@node1 ~]# history
1 clear
2 pwd
3 hostname
4 vi /etc/hostname
5 vi /etc/hosts
6 ping node0
7 ping node1
......

date

基本语法
date [options]...[+format]
选项说明

选项 功能
-d<时间字符串> 显示指定的“时间字符串”表示的时间,而非当前时间
s<日期时间> 设置系统日期时间

参数说明

选项 功能
<+日期时间格式> 指定显示时使用的日期时间格式

获取当前时间

基本语法

命令 功能描述
date 显示当前时间
date +%Y 显示当前的年份
date +%m 显示当前月份
date +%d 显示当前是哪一天
date “+%Y-%m-%d %H:%M:%S” 显示年月日时分秒

获取非当前时间

1
2
3
4
5
6
#显示昨天的时间
[root@node1 ~]# date -d '1daysago'
2021年 08月 17日 星期二 09:28:02 CST
#显示明天的时间
[root@node1 ~]# date -d '-1daysago'
2021年 08月 19日 星期四 09:28:06 CST

3.4.3设置系统时间

基本语法
date -s字符串时间

1
[root@node1 ~]# date -s "2021-08-18 09:36:43"

扩展了解:cal显示日历

进程相关命令

ps

可以通过命令查看系统内进程信息
ps -ef
进程查看命令
ps(process status) :将某个时间点的程序运作情况截取下来
选项和参数

  • a :和输入终端(terminal)关联的所有process,通常与x一起使用,列出完整信息。
  • x :后台进程,通常与a这个参数一起使用,可列出较完整信息
  • u :有效使用者(effective user)相关的process
    常用组合
    ps aux观察系统所有的程序数据(常用)
    1
    2
    [root@node1 ~]# ps aux
    [root@node1 ~]# ps au
    以下为各选项的含义
  • USER:该process属于那个使用者
  • PID:该process的程序标识符。
  • %CPU:该process使用掉的CPU资源百分比;
  • %MEM:该process所占用的物理内存百分比;
  • VSZ :该process使用掉的虚拟内存量(Kbytes)
  • RSS :该process占用的物理的内存量(Kbytes)
  • TTY :该process是在那个终端机上面运作,若与终端机无关则显示?,另外, tty1-tty6是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。
  • STAT:该进程目前的状态,状态显示与ps -l的S旗标相同(R/S/D/T/Z)
  • START:该process被触发启动的时间;
  • TIME :该process实际使用CPU运作的时间。
  • COMMAND:该程序的实际命令为何?

kill

基本语法

kill [选项]进程号:通过进程号杀死进程(只会杀死进程号对应的一个进程)
killall进程名称:通过进程名称杀死进程,也支持通配符(杀死对应的一个或多个进程)

选项说明

语法 效果
-15 表示让进程处理完善后的事情后关闭
-9 表示强迫进程立即停止
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@node1 ~]# kill -9 1267
[root@node1 ~]# ps aux | grep tail
root 1272 0.0 0.0 112824 972 pts/0
S+ 09:39 0:00 grep --color=auto tail
[1]+ 已杀死 tail -f
/etc/profile

#killall演示
[root@node1 ~]# ps aux | grep tail
root 1274 0.0 0.0 108092 616 pts/0
S 09:39 0:00 tail -f /etc/profile
root 1277 0.0 0.0 108092 616 pts/0
S 09:39 0:00 tail -f /etc/profile
root 1278 0.0 0.0 108092 616 pts/0
S 09:39 0:00 tail -f /etc/profile
[root@node1 ~]# kill all tail
-bash: killall: 未找到命令

centos7精简安装后,使用中发现没有killall命令,于是我们想到需要安装killall:

1
2
3
4
5
[root@node1 ~]# yum install killall -y
已加载插件:fastestmirror
......
没有可用软件包 killall。
错误:无须任何处理

这是因为对应的yum源上并没有一个名字为killall的安装包,而是给我们提供了一个psmisc安装包,安装它之后killall便可以使用了,另外pstree也是这样。

1
2
3
4
5
6
7
8
9
10
11
[root@node1 ~]# yum install psmisc -y

[root@node1 ~]# killall tail
[1] 已终止 tail-f
/etc/profile
[2] 已终止 tail-f
/etc/profile
[root@node1 ~]# ps aux | grep tail
root 1299 0.0 0.0 112824972 pts /0
S+ 09:47 0:00 grep --color=auto tail
[4]+ 已终止 tail -f /etc/group