1、命令格式: 主命令 选项 参数(操作对象)
命令分为两类:
内置命令(builtin):由shell程序自带的命令
外部命令:有独立的可执行程序文件,文件名即命令名
按【Ctrl+C】键可中断正在执行的命令
2、 查看命令帮助
(1)查看bash内部命令帮助
(2)命令 --help
[root@node13 ~]# cat ——help
示例如下:cat [OPTION]... [FILE]... 表明cat后面可以加上多个可选的选项以及多个可选的文件参数
下面是对于命令的语法的一些符号的说明:
[] :表示的是可选
...: 表示的可以存在多个参数
|表示是可选的
<>:必填
{}:表示作为一个整体存在的
3、man用来提供在线帮助,使用权限是所有用户。使用man命令可以调阅其中的帮助信息,非常方便实用。
man command
选项:-C config_file:指定配置文件man.conf,缺省值是/etc/man.conf
[root@node13 ~]# man ls
3 、date命令
date命令用于显示或设置系统的时间与日期,语法格式为: date [OPTION]... [+FORMAT] ,用户只需在强大的date命令后输入以 + 号开头的参数,即可按照指定格式来输出系统的时间或日期,这 样在日常工作时便可以把备份数据的命令与指定格式输出的时间结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。
按照默认格式查看当前系统时间的date命令如下所示:
[root@kongd ~]# date
Sat Sep 5 09:13:45 CST 2020
date命令中的参数%j可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:
[root@kongd ~]# date "+%j"
306
按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的date命令如下所示:
[root@kongd ~]# date "+%Y-%m-%d %H:%M:%S"
2020-09-05 09:14:35
将系统的当前时间设置为2020年11月1日8点30分的date命令如下所示:
[root@kongd ~]# date -s "20201101 8:30:00" 或者[root@kongd ~]# date
110108302020
Sun Nov 1 08:30:00 CST 2020
4 、timedatectl命令
用于设置系统的时间,英文全称为:“time date control”,语法格式为: timedatectl [OPTIONS...] COMMAND ...
查看系统时间与时区:
[root@kongd ~]# timedatectl status
Local time: Sun 2020-09-06 19:51:22 CST
Universal time: Sun 2020-09-06 11:51:22 UTC
RTC time: Sun 2020-09-06 19:51:21
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:
[root@kongd ~]# timedatectl set-timezone Asia/Shanghai
如果时间还是不正确,我们可以手动的修改系统日期:
[root@kongd ~]# timedatectl set-time 2021-05-18
而如果想修改时间的话,也很简单:
[root@kongd ~]# timedatectl set-time 9:30
[root@kongd ~]# date
Tue May 18 09:30:01 CST 2021
5 、查看目录下的文件:ls(list)
6、Linux文件类型
软链接与硬链接
7、 Linux系统的目录结构
1、路径
绝对路径:是指以根目录“/”为起点来表示系统中某个文件(或目录)的位置的方式
相对路径:是以当前目录为起点,表示系统中某个文件或目录在目录结构中的位置的方式。
2、工作目录
用户当前所处的位置,使用 pwd 命令查看
更改当前的工作目录,即切换目录: cd路径
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /
[root@localhost /]# pwd
/
#回到当前用户的家(主)目录
[root@localhost /]# cd ~
[root@localhost ~]# pwd
/root
#回到当前目录的上一级目录
[root@localhost ~]# cd ..
#切换到之前的目录
[root@localhost /]# cd -
/root
#回到当前目录
[root@localhost ~]# cd .
8、从命令行管理文件
文件命名规则:
(1)不能使用/来当文件名,/是用来做根的,也是用来做路径分隔符的
(2)文件名不能超过255个字符
(3)区分大小写file File FILE fIle
(4)目录也是文件,在同一路径下,两个不同类型文件不能同名
查看根下面的内容(小写L):[root@yangy ~]# ll /
创建目录:mkdir
[root@yangy ~]# mkdir /test
[root@yangy ~]# cd /
[root@yangy /]# ls
bin dev home lib64 mnt proc run srv test usr
boot etc lib media opt root sbin sys tmp var
创建一个普通文件夹:touch
[root@yangy /]# cd test
[root@yangy test]# ll
total 0 #目录下没有东西
[root@yangy test]# touch a #touch创建一个文件a
[root@yangy test]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 16 21:45 a
如果文件已存在,更新文件的三个时间, stat 可以查看文件的详细信息
[root@localhost ~]# ln -s /etc/hostname /root/hostname
[root@localhost ~]# ll -i /etc/hostname /root/hostname
8608116 -rw-r--r--. 1 root root 22 Apr 16 14:46 /etc/hostname
17538579 lrwxrwxrwx. 1 root root 13 Jun 9 15:41 /root/hostname -> /etc/hostname
[root@localhost ~]# ln /etc/motd /root/motd
[root@localhost ~]# ll -i /etc/motd /root/motd
8608102 -rw-r--r--. 2 root root 0 Sep 10 2018 /etc/motd
8608102 -rw-r--r--. 2 root root 0 Sep 10 2018 /root/motd[root@localhost ~]# stat /etc/hostname
File: /etc/hostname
Size: 22 Blocks: 8 IO Block: 4096 regular file
Device: 10302h/66306d Inode: 8608116 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2022-06-09 11:19:35.484027446 +0800
Modify: 2022-04-16 14:46:36.153011877 +0800
Change: 2022-04-16 14:46:36.153011877 +0800
Birth: -
atime,即access time,查看了一下文件内容(cat),文件的atime时间会更新
mtime,即modify time,文件内容被改变了,ctime会更新
ctime,即change time,元数据【文件的属性,例如大小、文件名等等】被改变,mtime会更新
#创建一个硬链接a.hard 创建硬链接文件: ln 原文件 目标文件
[root@yangy test]# ln a a.hard
[root@yangy test]# ll
total 0
-rw-r--r--. 2 root root 0 Aug 16 21:45 a
-rw-r--r--. 2 root root 0 Aug 16 21:45 a.hard
[root@yangy test]# ll -i -i:inode节点号
total 0
35362365 -rw-r--r--. 2 root root 0 Aug 16 21:45 a 2:表示拥有一样节点号的有两个
35362365 -rw-r--r--. 2 root root 0 Aug 16 21:45 a.hard
#创建一个软链接a.soft 创建软链接文件: ln -s 原文件 目标文件
[root@yangy test]# ln -s a a.soft
[root@yangy test]# ll
total 0
-rw-r--r--. 2 root root 0 Aug 16 21:45 a
-rw-r--r--. 2 root root 0 Aug 16 21:45 a.hard
lrwxrwxrwx. 1 root root 1 Aug 16 21:57 a.soft -> a
[root@yangy test]# ll -i
total 0
35362365 -rw-r--r--. 2 root root 0 Aug 16 21:45 a
35362365 -rw-r--r--. 2 root root 0 Aug 16 21:45 a.hard
34618115 lrwxrwxrwx. 1 root root 1 Aug 16 21:57 a.soft -> a 1:表示拥有一样节点号的就他一个
在test下创建test2,在test2下创建test1,连续创建
需要加上-p,否则创建失败
[root@yangy /]# mkdir test/test2/test1
mkdir: cannot create directory ‘test/test2/test1’: No such file or directory
[root@yangy /]# mkdir -p test/test2/test1
树形结构
创建同一层级多个文件
写绝对路径,用{}括起来,中间用“,”逗号隔开
写相对路径,中间用空格隔开
一次创建多个文件
[root@yangy test2]# touch a{1..10}
删除文件 rm
[root@yangy test2]# rm 1
rm: remove regular empty file '1'? y
[root@yangy test2]# rm -f 2 -f不再询问,强制删除
首先返回上级目录
test2删除完毕 -r递归删除
rm -rf +文件名,rf可连用
a节点号不同,同名不同人
软链接可以继续工作,新创建的a相当于替代品,但是内容还是随之改变
[root@yangy test]# cat a #a文件中没有内容
[root@yangy test]# cat a.soft #a.soft也没有内容
[root@yangy test]# echo 123 >a #向a中输入内容,a.soft也随之改变
[root@yangy test]# cat a
123
[root@yangy test]# cat a.soft
123
如果文件已存在,更新文件的三个时间, stat 可以查看文件的详细信息
[root@localhost ~]# ln -s /etc/hostname /root/hostname
[root@localhost ~]# ll -i /etc/hostname /root/hostname
8608116 -rw-r--r--. 1 root root 22 Apr 16 14:46 /etc/hostname
17538579 lrwxrwxrwx. 1 root root 13 Jun 9 15:41 /root/hostname -> /etc/hostname
[root@localhost ~]# ln /etc/motd /root/motd
[root@localhost ~]# ll -i /etc/motd /root/motd
8608102 -rw-r--r--. 2 root root 0 Sep 10 2018 /etc/motd
8608102 -rw-r--r--. 2 root root 0 Sep 10 2018 /root/motd[root@localhost ~]# stat /etc/hostname
File: /etc/hostname
Size: 22 Blocks: 8 IO Block: 4096 regular file
Device: 10302h/66306d Inode: 8608116 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2022-06-09 11:19:35.484027446 +0800
Modify: 2022-04-16 14:46:36.153011877 +0800
Change: 2022-04-16 14:46:36.153011877 +0800
Birth: -
atime,即access time,查看了一下文件内容(cat),文件的atime时间会更新
mtime,即modify time,文件内容被改变了,ctime会更新
ctime,即change time,元数据【文件的属性,例如大小、文件名等等】被改变,mtime会更新
[root@yangy test]# touch {1,2}{3,4} #创建的文件互相组合
[root@yangy test]# ll
9、数据流和重定向
1、数据流
标准输入(standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入
标准输出(standard output,简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上
标准错误输出(standard error output,简称stderr):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所用的特殊字符如下:
标准输入(stdin):代码为0
标准输出(stdout):代码为1
标准错误输出(stderr):代码为2
2、重定向操作符
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
输出重定向操作符: >(覆盖) 、 >> (追加)
[root@yangy test]# echo 123 > a
[root@yangy test]# cat a
123
[root@yangy test]# date >> a
[root@yangy test]# cat a
123
Wed Aug 17 01:12:27 CST 2022
3、输入重定向操作符: < 、 <<
案例3:错误输出重定向
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt
ls: 无法访问/aaaaaaaaa: 没有那个文件或目录
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>error.txt #重定向到不同的位置
案例4: 正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /aaaaaaaaa &>list.txt #混合输出
案例5: 正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>&1 #重定向到相同的位置
案例6:重定向到空设备/dev/null
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>/dev/null #空设备,即将产生的输出丢掉
[root@localhost ~]# ls /home/ /aaaaaaaaa &>/dev/null #空设备,即将产生的输出丢掉
4、输入重定向案例
标准输入重定向: < 或 0< 、 0<< 或 <<
案例1:从文件读取数据作为cat命令的输入
[root@master ~]# echo test > file
[root@master ~]# cat < file
test
案例2:标准输入重定向 << 并不表示追加,而是表示输入结束的意思,即作为一个结束符。[root@localhost ~]# cat > file3 << end
\> hello
\> end
# 利用<<右侧的控制字符,我们可以终止输入,不必输入ctrl+d来结束。
[root@localhost ~]# cat file3
hello
拓展:使用文件描述符重定向的复杂用法
使用文件描述符的重定向都使用了&符号:
cmd >&n 把输出送到文件描述符n
cmd m>&n 把输出到文件符m的信息重定向到文件描述符ncmd >&- 关闭标准输出
cmd <&n 输入来自文件描述符n
cmd m<&n m来自文件描述符n
cmd <&- 关闭标准输入
cmd <&n- 移动输入文件描述符n而非复制它
cmd >&n- 移动输出文件描述符 n而非复制它
示例 2>&1 :将stderr重定向到标准输出
5 、将标准输出重定向到文件
(1)echo命令用于在终端设备上输出字符串或变量提取后的值,语法格式为:“echo [字符串] [$变量]”。
执行“echo 字符串”或“echo $变量”就可以,其中$符号意思是提取变量的实际值,以便后续的输出操作。
例如,把指定字符串“kongd.com”输出到终端屏幕的命令为:
[root@localhost ~]# echo kongd.com
该命令会在终端屏幕上显示如下信息:
kongd.com
下面,我们使用“$变量”的方式提取出变量SHELL的值,并将其输出到屏幕上:
[root@kongd ~]# echo $SHELL
/bin/bash
bash shell提示符
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
PS1常用的参数含义如下:
\d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :#完整的主机名称
\h :#仅取主机的第一个名字
\t :#显示时间为24小时格式,如:HH:MM:SS
\T :#显示时间为12小时格式
\A :#显示时间为24小时格式:HH:MM
\u :#当前用户的账号名称
\v :#BASH的版本信息
\w :#完整的工作目录名称
\W :#利用basename取得工作目录名称,所以只会列出最后一个目录
\# :#下达的第几个命令
\$ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$
(2)将标准输出重定向到文件
[root@master test]# echo test > /root/test/file
[root@master test]# echo test2 >> /root/test/file
6、 tee命令读取数据输出到文件
(1)管道符|:用于两个命令或者多个命令相连接,将管道符左边命令的输出作为管道符右边命令的输入。
(2) tee 文件 :读取标准输入的数据,并将其内容输出到文件的同时输出到屏幕(即想把输出保存到文件中,又想在屏幕上看到内容)
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时输出到文件。
语法:tee [-ai][--help][--version][文件...]
不仅存在在文件中,也会显示在屏幕上
如果写入不存在的文件,则会自动创建文件
创建e文件并写入内容a
[root@yangy ~]# touch e < a
[root@yangy ~]# ll
e文件已创建,但是没有内容
-rw-r--r--. 1 root root 0 Aug 17 13:28 e
[root@yangy ~]# cat e
[root@yangy ~]#
10、 vi编辑器
(1)所有的Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在;
(2)很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
(3)vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
(4)程序简单,编辑速度相当快速。
在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数。Vim之所以能得到广大厂商与用户的认可,原因在于Vim编辑器中设置了三种模式:命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率。
vim+文件名 进入vim编辑模式
vim三种模式的切换
#在每次运行Vim编辑器时,默认进入命令模式
[root@master ~]# vim /etc/passwd
行数序号:末行模式下:set nu
命令模式下的常用按键
光标跳转按键
复制、粘贴、删除
编辑模式
可通过如下任意一种功能键从命令模式切换到编辑模式。按esc键可从编辑模式切换到命令模式。
末行模式
按 : 或者 / 可从命令模式切换到末行模式。按esc键可从末行模式切换到命令模式。
(1)查找关键字并替换
(2)保存退出
(3)其他操作
(1)修改主机名
[root@localhost ~]# vim /etc/hostname
(2)设置登录欢迎语
[root@localhost ~]# vi /etc/motd
hello
(3)修改中断当前进程的快捷键
[root@localhost ~]# vi ~/.bashrc
stty intr "^b"
#中断当前进程的快捷键就会变成ctrl+b