常用的基本命令

切换到管理员用户

sudo -i

su

date

date "+%F %T"

等价操作

date "%Y-%m-%d %H:%M:%S"

取之前或之后的某个时间

date -d "-1 day" "+%F %T"
date -d "+1 month" "+%F %T"
date -d "-1 year" "+%F %T"

date-help

| 管道符

辅助作用,配合其他命令使用

过滤案例

以管道作为分界线,前面的命令有个输出,后面需要先输入,然后再过滤,最后再输出,通俗的讲就是管道前面的输出就是后面指令的输入

root@VM-16-13-debian:~# ls /
bin   data  etc   initrd.img  lib32  libx32      media  opt    proc  run   srv  tmp  var  www    boot  dev   homelib  lib64  lost+found  mnt    patch  root  sbin  sys  usr  vmlinuz

root@VM-16-13-debian:~# ls / | grep y
sys

grep指令

主要用于过滤

扩展用法

ls / | wc -l 统计文件个数

目录管理

列出目录 — ls

在 Linux 系统当中, ls 命令可能是最常被运行的。

语法
ls [-] 目录名称

参数

  • -a:全部的文件,连同隐藏文件(开头为 . 的文件) 一起列出来(常用)。
  • -l:长数据串列出,包含文件的 属性与权限 等数据(常用)。
  • -i:显示文件的 inode 节点信息。

注:所有参数可组合使用。


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

切换目录 — cd

Change Directory 的缩写,这是用来变换工作目录的命令。

语法
cd [相对路径或绝对路径]
绝对路径、相对路径
绝对路径都是以 / 开头的
./当前目录下 ../上一级目录,可叠加


  • 切换到用户目录下

    cd /home


  • 切换到 root 目录

    cd /root


  • 回到上一级

    cd ..


  • 回到根目录

    cd /

显示当前的目录 — pwd

Print Working Directory 的缩写,也就是显示目前所在目录的命令。

语法
pwd [-]

参数

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


  • 单纯显示出目前的工作目录

    [root@userName ~]# pwd
    /root


  • 如果是链接,要显示真实地址,可以使用 -P 参数

    [root@userName ~]# cd /bin
    [root@userName bin]# pwd
    /bin
    [root@userName bin]# pwd -P
    /usr/bin

创建目录 — mkdir

Make Directory的缩写,创建新目录。

语法
mkdir [-] 目录名称

参数

  • -m :配置文件的权限。直接配置,不需要考虑默认权限(umask)。
  • -p :帮助你直接将所需要的目录(包含上一级目录)递归 创建起来。


  • 创建目录

    [root@userName www]# mkdir test
    [root@userName www]# ls
    test wwwroot


  • 创建多级目录

    [root@userName www]# mkdir test1/test2/test3/test4
    mkdir: cannot create directory ‘test1/test2/test3/test4’: No such file or directory

可以看出,是不能直接创建多级目录的。
如果需要创建多级目录,需要加上 -p 参数。

[root@userName www]# mkdir -p test1/test2/test3/test4

[root@userName www]# ls
test test1 wwwroot


  • 创建权限为 rwx—x—x 的目录

    [root@userName www]# mkdir -m 711 test2
    [root@userName www]# ls -l
    total 16
    drwxr-xr-x 2 root root 4096 Jun 10 19:38 test
    drwxr-xr-x 3 root root 4096 Jun 10 19:39 test1
    drwx--x--x 2 root root 4096 Jun 10 19:43 test2
    drwxr-xr-x 2 root root 4096 Jun 10 19:36 wwwroot
  • "d" —— 目录文件(directory)
  • "l" —— 链接文档(link file)
  • "-" —— 文件
  • "b" —— 装置文件里面的可供储存的接口设备(可随机存取装置)
  • "c" —— 装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)

img

rwx

r(Read, 读取): 可读——浏览目录的权限
w(Write, 写入): 可写——新建,删除,修改,移动目录内文件的权限
x(eXecute, 执行): 可执行——进入目录的权限

1、目录的只读访问不允许使用 cd 进入目录,必须要有执行的权限才能进入。
2、只有执行权限的情况下,只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
3、一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
4、目录的 w 位不设置,即使你拥有目录中某文件的 w 权限也不能写该文件

删除目录 — rmdir

删除空的目录

语法
rmdir [-] 目录名称

参数

  • -p: 连同下一级(空的)目录也一起删除


  • 删除空目录

    [root@userName www]# rmdir test2
    [root@userName www]# ls
    test test1 wwwroot


  • 删除非空目录
[root@userName www]# rmdir test1
rmdir: failed to remove 'test1': Directory not empty

因为目录不是空的,无法删除。
加上参数 -p

可以将 test1/test2/test3/test4 依次删除。

[root@userName www]#rmdir -p test1/test2/test3/test4
[root@userName www]# ls
admin
rmdir仅能删除空的目录,可以使用 rm 命令来删除非空目录。

文件管理

复制文件 — cp

复制文件或目录

语法
cp [-] 来源(source) 目标(destination)

参数

  • -a:相当于 -pdr 命令(常用)。
  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)。
  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身。
  • -r:递归持续复制,用於目录的复制行为(常用)。
  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次。
  • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)。
  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身。
  • -s:复制成为符号连结档(symbolic link),亦即捷径文件。
  • -u:若 destination 比 source 旧才升级 destination。


找一个有文件的目录,我这里找到 root 目录。
[root@userName www]# cd /root
[root@userName ~]# ls
install.sh
[root@userName ~]# cd /home
复制 /root目录下的 install.sh/home 目录下
[root@userName home]# cp /root/install.sh /home
[root@userName home]# lsinstall.sh
再次复制,加上 -i参数,增加覆盖询问(n 不覆盖,y 为覆盖)。
[root@userName home]# cp -i /root/install.sh /home
cp: overwrite ‘/home/install.sh’?

删除文件 — rm

删除文件或目录

语法
rm [-] 文件或目录

参数

  • -f :force 的缩写,忽略不存在的文件,不会出现警告信息。
  • -i :互动模式,在删除前会询问使用者是否动作。
  • -r :递归删除。常用于目录的删除(影响很大,需要谨慎操作)。


  • 删除 /home install.sh

    [root@userName home]# rm -i install.sh
    rm: remove regular file ‘install.sh’? y


  • 删除所有文件

    rm -rf /

    🔺这是非常危险的命令,除非真的有此需要,否则千万不要使用。
    此命令会强制递归删除 / 下的所有文件。
    由于 / 是根目录,所以会删除所有文件。
    由于 Linux 一切皆文件,删除所有文件后系统将无法使用。

移动文件 — mv

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

语法
mv [-] source destination

参数

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


复制一个文件到当前目录
[root@userName home]# cp /root/install.sh /home
创建一个文件夹 test
[root@userName home]# mkdir test
将复制过来的文件移动到我们创建的目录,并查看
[root@userName home]# mv install.sh test
[root@userName home]# ls
test
[root@userName home]# cd test
[root@userName test]# ls
install.sh
将文件夹重命名 ,然后再次查看


文件夹重命名语法
mv [oldName] [newName]
[root@userName test]# cd ..
[root@userName home]# mv test mvtest
[root@userName home]# ls
mvtest

创建文件 — touch

在当前目录创建一个文件。

语法
touch 文件名
[root@userName home]# touch f1
[root@userName home]# ls
f1

编辑文本 — echo

输入内容给指定文件。

语法
echo "内容" >>文件名
[root@userName home]# echo "I am a file" >> f1
[root@userName home]# cat f1
I am a file
这种方式很不方便,一般推荐使用 vim

vim 编辑器

简介

vim 是从 vi 发展出来的一个文本编辑器。

具有丰富的功能,如:代码补全、编译及错误跳转等。

语法
vim 文件名

使用模式

基本上 vi / vim 共分为三种模式,分别是:

  • 命令模式(Command mode)
  • 输入模式(Insert mode)
  • 底线命令模式(Last line mode)

命令模式

用户刚刚启动 vi/ vim,便进入了命令模式。

此状态下敲击键盘动作会被 vim 识别为命令,而非输入字符。

比如我们此时按下 i ,并不会输入一个字符,i 被当作了一个命令。

以下是常用的几个命令:

  • i:切换到输入模式,以输入字符。
  • x:删除当前光标所在处的字符。
  • ::切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动 vim,进入了命令模式,按下 i ,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式

在命令模式下按下 i 就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合:输入字符。
  • ENTER:回车键,换行。
  • BACK SPACE:退格键,删除光标前一个字符。
  • DEL:删除键,删除光标后一个字符。
  • 方向键:在文本中移动光标。
  • HOME / END:移动光标到行首 / 行尾。
  • Page Up / Page Down:上 / 下翻页。
  • Insert:切换光标为输入 / 替换模式,光标将变成竖线 / 下划线。
  • ESC:退出输入模式,切换到命令模式。

底线命令模式

在命令模式下按下 : 就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • w:保存文件。
  • q:退出程序。

ESC 键可随时退出底线命令模式。

vim使用文档

使用vim 编辑一个文件

vim test.txt

输入i 进入输入模式

I am a testFile

按下ESC ,输入:wq 保存退出

相当于整合了touchecho

内容查看

显示文件内容 — cat

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

语法
cat [-] 文件名

参数

  • -A:相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已。
  • -b:列出行号,仅针对非空白行做行号显示,空白行不标行号。
  • -E:将结尾的断行字节 $ 显示出来。
  • -n:列印出行号,连同空白行也会有行号,与 -b 的选项不同。
  • -T:将 [tab] 按键以 ^I 显示出来。
  • -v:列出一些看不出来的特殊字符。
[root@userName home]# cat /test.txt
first line

second line

a
b
c

反显文件内容 — tac

taccat 命令的反写,意思也很明显:由最后一行开始显示文件内容。

[root@userName home]# tac /text.txt
c
b
a

second line

first line

查看文件并显示行号 — nl

语法
nl [-] 文件

参数

  • -b :指定行号指定的方式,主要有两种:

    • -b a:不论是否为空行,也同样列出行号(类似 cat -n)。
    • -b t:如果有空行,空的那一行不要列出行号(默认值)。
  • -n :列出行号表示的方法,主要有三种:

    • -n ln:行号在荧幕的最左方显示。
    • -n rn:行号在自己栏位的最右方显示,且不加 0。
    • -n rz:行号在自己栏位的最右方显示,且加 0。
  • -w:行号栏位的占用的位数。
[root@userName home]# nl /test.txt
     1  first line
     
     2  second line
     
     3  a
     4  b
     5  c

查看文件前面几行 — head

语法
head [-n] 文件

参数

  • -n:n表示数字,代表显示几行的意思。默认显示前面 10 行。
[root@userName home]# head -4 /text.txt
first line

second line

查看文件后面几行 — tail

语法
tail [-n] 文件

参数

  • -n:n表示数字,代表显示几行的意思。默认显示最后 10 行。

查看文件并翻页

more

一页一页翻动(只能向下翻动)

按键

在 more 这个程序的运行过程中,你有几个按键可以按的:

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

less

一页一页翻动(可以上下翻页)

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

链接

Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接或者符号链接(Symbolic Link)。

硬链接 — ln

一般情况下,ln 命令产生硬链接。

语法
ln 文件

硬链接通过索引节点来进行链接。

在 Linux 中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。

在 Linux 中,多个文件名指向同一索引节点是存在的。比如:

AB 的硬链接(AB 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同。

一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件。

A 和 B 对文件系统来说是完全平等的,删除其中任何一个都不会影响另外一个的访问。

硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止误删的功能。

其原因如上所述,因为对应该目录的索引节点有一个以上的连接,只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。

文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软链接 — ln -s

语法
ln -s 被链接的文件 链接文件

另外一种连接称之为 软链接 (Symbolic Link),也叫 符号链接

==软链接类似于 Windows 的 快捷方式 。==它实际上是一个特殊的文件。

在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的 位置信息 。比如:

AB 的软链接(AB 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,AB 指向的是两个不同的 inode,继而指向两块不同的数据块。

A 的数据块中存放的只是 B路径名 (可以根据这个找到 B 的目录项)。

AB 之间是 主从关系 ,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

创建一个测试文件 f1
[root@userName home]# touch f1
[root@userName home]# ls
f1
创建 f1 的一个硬链接文件 f2
[root@userName home]# ln f1 f2
创建 f1 的一个软链接文件 f3
[root@userName home]# ln -s f1 f3
显示文件的 inode 节点信息
[root@userName home]# ls -li
total 20
536345 -rw-r--r-- 2 root       root         13 Jun 10 22:17 f1
536345 -rw-r--r-- 2 root       root         13 Jun 10 22:17 f2
536346 lrwxrwxrwx 1 root       root          2 Jun 10 22:17 f3 -> f1
655361 drwxr-xr-x 3 lighthouse lighthouse 4096 Apr 10 21:03 lighthouse
536342 -rw-r--r-- 1 root       root         33 Jun 10 20:53 test.txt
655371 drwxr-xr-x 2 root       root       4096 Apr 10 21:29 www

可以看出,硬链接文件 f2 与原文件 f1 的 inode 节点相同,均为 536345 ,然而软链接文件的 inode 节点不同。

输入字符到 f1
[root@sail home]# echo "I am f1 file" >> f1
查看文件
[root@userName home]# cat f1
I am f1 file
[root@userName home]# cat f2
I am f1 file
[root@userName home]# cat f3
I am f1 file
[root@userName home]# rm -f f1
[root@userName home]# cat f2
I am f1 file
[root@userName home]# cat f3
cat: f3: No such file or directory

可以看出,当删除原始文件 f1 后,硬链接 f2 不受影响,但是软链接 f3 无效。

由此可以得到如下结论:

  • 删除符号连接 f3,对 f1f2 无影响。
  • 删除硬连接 f2,对 f1f3 也无影响。
  • 删除原文件 f1,对硬链接 f2 没有影响,导致软链接 f3 失效。
  • 同时删除原文件 f1、硬连接 f2,整个文件会真正的被删除。

查找文件

whereis 文件名/文件夹名
[root@userName home]# whereis install.sh

install: /usr/bin/install /usr/share/man/man1/install.1.gz

关机

shutdown

Linux 大多用在服务器上,服务器上跑的服务是需要持续稳定的,除非特殊情况下,不得已才会关机。

立刻关机
shutdown –h now


10分钟后关机
shutdown –h 10


今天20:25关机
shutdown –h 20:25

halt

等同于 shutdown –h now

poweroff

等同于 shutdown –h now

重启

reboot

立刻重启
 reboot


10分钟后重启
shutdown –r +10


立刻重启,等同于 reboot
shutdown –r now

同步数据

sync

将数据由内存同步到硬盘中。
sync
不管关机还是重启,首先要运行 sync 命令,把内存中的数据写到磁盘中。

退出当前终端

exit

最后修改:2024 年 02 月 29 日
如果觉得我的文章对你有用,请随意赞赏