Linux基础
Linux基础
Linux基本原则
- 由目的单一的小程序组成,组合小程序完成复杂任务
- 一切皆文件
- 配置文件保存为纯文本格式
基础知识
shell(外壳) :可以理解为用户的工作环境
常用的shell:
-
GUI(图形化):
- Windows
- X-Window
- Gnome
- KDE
- Xface
-
CLI(命令行终端):
- bash
- sh
- csh
- zsh
- ksh
- tcsh
Bash的特性
-
支持命令历史、命令补全、路径补全
-
支持管道、重定向
|
:管道符,将前一个命令的输出作为后一个命令的输入>
:重定向输出,将命令执行的标准输出结果重定向输出到指定文件中,如果文件中已包含数据,则会清空原数据,写入新数据。
-
支持命令别名
-
支持命令行编辑
-
支持命令行展开
-
支持文件名通配
-
支持变量
-
支持编程
示例:
[root@li ~]# echo $SHELL #将当前使用的shell路径打印至屏幕
/bin/bash
[root@li ~]# ls | grep a #ls列出当前目录文件,使用管道符进行传递,grep过滤 出文件名中含有a的文件
aaa
anaconda-ks.cfg
[root@li ~]# echo nihao > aaa #将字符‘nihao’重定向输出到文件aaa内
[root@li ~]# cat aaa #查看文件aaa内容
nihao
[root@li ~]# mkdir -p aaa/bbb/ccc #递归创建目录aaa/bbb/ccc
[root@li ~]# tree aaa #以树状图列出目录aaa内容
aaa
└── bbb
└── ccc
[root@li ~]# ls a* #列出当前目录下以a开头的文件
aaa abc anaconda-ks.cfg
[root@li ~]# a=hello #定义变量a=hello
[root@li ~]# echo $a #将变量a打印至屏幕
hello
bash支持的引号
-
反引号,键盘左上角ESC下面的键,用于命令替换
-
双引号,弱引用,可以实现变量替换
-
单引号,强应用,不完成变量替换
示例:
[root@li ~]# echo `ls` #将标准输出内容替换为命令ls的内容
aaa abc anaconda-ks.cfg py
[root@li ~]# a=123 #定义变量a的值为123
[root@li ~]# echo $a #打印变量a的内容
123
[root@li ~]# echo '$a' #强引用,不进行变量替换
$a
[root@li ~]# echo "$a" #弱引用,实现变量替换
123
bash光标跳转
- Ctrl+a 跳转到命令行首
- Ctrl+e 跳到命令行尾
- Ctrl+u 删除光标至命令行首的内容
- Ctrl+k 删除光标至命令行尾的内容
- Ctrl+l 清屏
bash命令历史
history
查看命令历史
-c:清空命令历史
-d[n]:删除第n条命令的历史
-w:保存命令历史至文件~/.bash_history中
[root@li ~]# history #查看历史命令
1 ls
2 cd aaa
3 cd
4 history
[root@li ~]# history -d2 #删除第2条命令历史
[root@li ~]# history
1 ls
2 cd
3 history
4 history -d2
5 history
[root@li ~]# history -w #将历史命令保存到文件~/.bash_history中
[root@li ~]# cat ~/.bash_history #查看家目录下.bash_history的文件内容
ls
cd
history
history -d2
history
history -w
[root@li ~]# history -c #清空命令历史
[root@li ~]# history
1 history
[root@li ~]#
!n:执行命令历史中的第n条命令
!-n:执行命令历史中的倒数第n条命令
!!:执行上一条命令
!string:执行命令历史中最近一个以指定字符串string开头的命令
!$:引用前一条命令的最后一个参数
Esc和. :按下ESC键松开后立即按 . 键,引用前一条命令的最后一个参数
[root@li ~]# history #查看历史命令
1 ls
2 cd aaa
3 cd
4 history
[root@li ~]# !2 #执行历史命令中第二条命令
cd aaa
[root@li aaa]# !-3 #执行历史命令中倒数第三条命令
cd
[root@li ~]# !! #执行上一条命令
cd
[root@li ~]# !h #执行历史命令中最近一个以h开头的命令
history
1 ls
2 cd aaa
3 cd
4 history
5 cd aaa
6 cd
7 history
[root@li ~]# !$ #引用前一条命令最后一个参数,和按ESC后按.同理
history
1 ls
2 cd aaa
3 cd
4 history
5 cd aaa
6 cd
7 history
8 history
bash命令别名
alias
#设置命令的快捷方式
在shell中定义的别名仅在当前shell生命周期中有效,别名的有效范围为当前的shell进程。
例:
[root@li ~]# alias net='cd /etc/sysconfig/network-scripts/' #将进入网卡配置文件目录命令设置为‘net’
[root@li ~]# net
[root@li network-scripts]# #成功进入网卡配置文件目录
bash命令替换
把命令中某个子命令替换为其执行结果的过程被称作命令替换。
命令替换有两种方式:
$(COMMAND)
`COMMAND`
示例:
[root@li ~]# ls
aaa abc anaconda-ks.cfg py
[root@li ~]# echo $(ls) #将ls的结果替换为该命令的结果
aaa abc anaconda-ks.cfg py
[root@li ~]# echo `(ls)` #同理
aaa abc anaconda-ks.cfg py
bash环境变量介绍
PATH:命令搜索的路径
HISTSIZE:定义命令历史最多能存多少条,默认为1000条
SHELL:当前系统使用的shell
示例:
[root@li ~]# echo $PATH #打印命令搜索的路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@li ~]# HISTSIZE=10 #修改历史命令可存储数
[root@li ~]# echo $HISTSIZE #显示历史命令可存储数
10
[root@li ~]# history #查看历史命令,此时只有十条
73 echo $(ls)
74 echo `(ls)`
75 path
76 PATH
77 echo PATH
78 echo $PATH
79 HISTSIZE
80 HISTSIZE=10
81 echo $HISTSIZE
82 history
基础命令
命令语法
<命令> [选项] [参数]
选项:(可以有0个或多个)
短选项:-
多个选项可以组合: -a -b = -ab
长选项:--
长选项通常不能组合
参数:命令的作用对象(可以有0个或多个)
命令类型
Linux命令分为两种类型:
1.内部命令:shell内置
2.外部命令:在文件系统的某个路径下有一个与命令名称相对应的可执行文件
可使用type命令来查看某条命令是何种类型
示例:
[root@li ~]# type ls #查看命令ls属于哪种类型
ls is aliased to `ls --color=auto'
[root@li ~]# type cd
cd is a shell builtin #翻译过来就是“cd是shell内置命令”
文件及目录相关命令
ls
用于列出指定目录内容,单个使用列出当前目录下内容
常用参数:
-
-l:长格式显示
-
-h:做单位转换
-
-a:显示隐藏文件
-
-d: 显示目录自身的属性
-
-t:以时间排序
-
-r:逆序显示
示例:
[root@li ~]# ls #列出当前目录下内容
aaa abc anaconda-ks.cfg py
[root@li ~]# ls -l #长格式列出当前目录下内容,可写为ll
total 4
-rw-r--r--. 1 root root 0 Jun 29 14:58 aaa
-rw-r--r--. 1 root root 0 Jun 29 14:58 abc
-rw-------. 1 root root 1092 Jun 27 14:18 anaconda-ks.cfg
drwxr-xr-x. 5 root root 74 Jun 29 10:19 py
[root@li ~]# ll -h #将目录下内容做单位转换
total 4.0K
-rw-r--r--. 1 root root 0 Jun 29 14:58 aaa
-rw-r--r--. 1 root root 0 Jun 29 14:58 abc
-rw-------. 1 root root 1.1K Jun 27 14:18 anaconda-ks.cfg
drwxr-xr-x. 5 root root 74 Jun 29 10:19 py
[root@li ~]# ls -a #列出当前目录下详细内容
. aaa anaconda-ks.cfg .bash_logout .bashrc py .tcshrc
.. abc .bash_history .bash_profile .cshrc .python_history .viminfo
[root@li ~]# ll -d py #显示目录py的属性
drwxr-xr-x. 5 root root 74 Jun 29 10:19 py
[root@li ~]# ll -t #将当前目录下文件以时间顺序进行排序
total 4
-rw-r--r--. 1 root root 0 Jun 29 14:58 aaa
-rw-r--r--. 1 root root 0 Jun 29 14:58 abc
drwxr-xr-x. 5 root root 74 Jun 29 10:19 py
-rw-------. 1 root root 1092 Jun 27 14:18 anaconda-ks.cfg
[root@li ~]# ll -r #将当前目录文件倒序显示
total 4
drwxr-xr-x. 5 root root 74 Jun 29 10:19 py
-rw-------. 1 root root 1092 Jun 27 14:18 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Jun 29 14:58 abc
-rw-r--r--. 1 root root 0 Jun 29 14:58 aaa
cd
切换目录
示例:
[root@li ~]# cd py #切换到目录‘py’下
[root@li py]#
pwd
打印当前工作目录
示例:
[root@li py]# pwd #打印当前工作目录
/root/py
mkdir
创建目录
常用参数:
- -p:创建目录时若父目录不存在则自动创建
- -v:显示创建目录的过程
示例:
[root@li ~]# mkdir -pv a/b/c #递归创建目录a/b/c,并显示创建过程
mkdir: created directory 'a'
mkdir: created directory 'a/b'
mkdir: created directory 'a/b/c'
[root@li ~]# tree a #将目录a的内容以树状图显示
a
└── b
└── c
2 directories, 0 files
touch
创建空文件或更新时间戳
示例:
[root@li ~]# touch lx #创建文件lx
[root@li ~]# ls
a aaa abc anaconda-ks.cfg lx py
stat
显示文件或文件系统的状态
示例:
[root@li ~]# stat aaa #显示文件或文件系统状态
File: aaa
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 34162054 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-06-29 14:58:51.912430299 +0800
Modify: 2022-06-29 14:58:51.912430299 +0800
Change: 2022-06-29 14:58:51.912430299 +0800
Birth: -
rm
删除文件
常用参数:
- -r:递归删除,删除目录时必须使用此选项
- -f:强制删除,不询问
示例:
[root@li ~]# ls
a aaa abc anaconda-ks.cfg lx py
[root@li ~]# rm -rf a #删除当前目录下a目录
[root@li ~]# ls
aaa abc anaconda-ks.cfg lx py
cp
复制文件,一个文件到一个文件,多个文件到一个目录
常用参数:
- -a:归档复制,常用于备份
- -r:递归拷贝,拷贝目录时必须使用此选项
- -p:拷贝时保留原权限
示例:
[root@li ~]# ls
1.txt aaa anaconda-ks.cfg lx py
[root@li ~]# cp -a 1.txt 2.txt #归档复制,将文件1.txt复制一份并改名为2.txt
[root@li ~]# ls
1.txt 2.txt aaa anaconda-ks.cfg lx py
[root@li ~]# cp -r aaa bbb #递归复制,将目录aaa复制进目录bbb内
[root@li ~]# tree bbb
bbb
└── aaa
1 directory, 0 files
[root@li ~]# ll #列出当前目录下文件详细信息
total 4
-rw-r--r--. 1 root root 0 Jun 29 16:36 1.txt
-rw-r--r--. 1 root root 0 Jun 29 16:36 2.txt
drwxr-xr-x. 2 abc abc 6 Jun 29 16:35 aaa #此时目录aaa的属主和属组都为aaa
-rw-------. 1 root root 1092 Jun 27 14:18 anaconda-ks.cfg
drwxr-xr-x. 3 root root 17 Jun 29 16:41 bbb
drwxr-xr-x. 3 root root 17 Jun 29 16:46 ccc
-rw-r--r--. 1 root root 0 Jun 29 16:22 lx
drwxr-xr-x. 5 root root 74 Jun 29 10:19 py
[root@li ~]# cp -rp aaa ccc #递归拷贝目录aaa到ccc并保留原权限
[root@li ~]# cd ccc/ #进入目录ccc
[root@li ccc]# ll
total 0
drwxr-xr-x. 2 abc abc 6 Jun 29 16:35 aaa #可以发现aaa的属主和属组仍然为abc
mv
移动文件,也可用于重命名文件
示例:
[root@li ~]# ls
aaa
[root@li ~]# mv aaa bbb #移动文件aaa并重命名为bbb
[root@li ~]# ls
bbb
du
查看文件或目录占用的磁盘空间大小
常用参数:
-
-s:显示总的占用空间大小
-
-h:单位转换,以更友好的方式显示
示例:
[root@li ~]# du -sh a.txt #以更友好的方式显示文件a.txt的占用空间大小
4.0K a.txt
常用命令
df
报告文件系统磁盘空间使用情况
常用参数:
- -h:单位转换,以更友好的方式显示大小
示例:
[root@li ~]# df -h #显示系统磁盘空间使用情况
Filesystem Size Used Avail Use% Mounted on
devtmpfs 876M 0 876M 0% /dev
tmpfs 895M 0 895M 0% /dev/shm
tmpfs 895M 8.7M 887M 1% /run
tmpfs 895M 0 895M 0% /sys/fs/cgroup
/dev/mapper/cs-root 17G 1.7G 16G 10% /
/dev/sda1 1014M 195M 820M 20% /boot
tmpfs 179M 0 179M 0% /run/user/0
hostname
查看或临时修改主机名,重开终端有效,重启失效
hostnamectl
查看或永久修改主机名,重开终端有效,重启依然有效
示例:
[root@li ~]# hostname #单个使用,查看主机名
liuxiang
[root@li ~]# hostnamectl set-hostname liu #组合使用,永久修改主机名
[root@li ~]# bash #重启终端
[root@li ~]# #主机名已经修改成功
whoami
显示当前登录用户
w
显示当前在线用户并显示其正在运行的命令
who
查看当前在线用户
which
显示指定命令的绝对路径
cal
打印日历
ldd
查看指定程序有哪些依赖库文件
示例:
[root@li ~]# whoami #显示当前登录用户
root
[root@li ~]# w #显示当前在线用户并显示其正在运行的命令
09:46:20 up 8 min, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.244.1 09:37 3.00s 0.02s 0.00s w
root pts/1 192.168.244.1 09:44 1:32 0.01s 0.01s vim a.txt
[root@li ~]# which ls #显示命令ls的绝对路径
alias ls='ls --color=auto'
/usr/bin/ls
[root@li ~]# cal #打印日历
June 2022
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
[root@li ~]# ldd /usr/bin/ls #查看指定路径下程序的依赖库文件
linux-vdso.so.1 (0x00007fff28dc9000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f3020f4e000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f3020d48000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3020986000)
libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f3020702000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f30204fe000)
/lib64/ld-linux-x86-64.so.2 (0x00007f302139b000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f30202de000)
date
显示或设置日期与时间
常用参数:
-
-s:以字符串方式设置时间
-
格式化输出时间:+
-
%Y:年
-
%m:月
-
%d:日
-
%H:时
-
%M:分
-
%S:秒
-
示例:
[root@li ~]# date #单独使用显示当前日期和时间
Thu Jun 30 10:06:11 CST 2022
[root@li ~]# date +'%Y-%m-%d %H:%M:%S' #格式化输出时间,加号后无空格
2022-06-30 10:08:23
[root@li ~]# date -s 2012-12-12 -s 11:12:10 #修改系统时间日期
Wed Dec 12 11:12:10 CST 2012
命令帮助
如何获取命令帮助
内部命令:
- help COMMAND
外部命令:
- COMMAND –help
man手册:
- man COMMAND
注:可以使用which
命令判断某一条命令是否属于内部或外部命令,显示一条路径的即为内部命令
man手册使用注意事项
[]:可选
<>:必选
…:可出现多次
|:多选一
{}:分组
NAME:命令名称及功能简要说明
SYNOPSIS:用法说明,包括可用的选项
DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS:说明每一个选项的意义
FILES:此命令相关的配置文件
BUGS:报告bug
EXAMPLES:命令示例
SEE ALSO:另外参照
翻屏:空格(向后翻一屏),b键(向前翻一屏)
查找:
-
/KEYWORD:从前往后查找KEYWORD
-
?KEYWORD:从后往前查找KEYWORD
-
n:下一个匹配的行
-
N:前一个匹配的行
-
q:退出
通配符
*:匹配任意长度的任意字符
?:匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符
[abc],[a-m],[0-9]
[[:space:]]:表示空白字符
[[:punct:]]:表示标点符号
[[:lower:]]:表示小写字母
[[:upper:]]:表示大写字母
[[:alpha:]]:表示大小写字母
[[:digit:]]:表示数字
[[:alnum:]]:表示数字和大小写字母
[^]:匹配指定范围之外的任意单个字符
示例:
[root@li ~]# ls #查看当前目录下文件目录
1 2 3 aa bb cc www xxx
[root@li ~]# ls ? #查看当前目录下单个文件名的文件和目录
1 2 3
[root@li ~]# ls a* #查看当前目录下以a开头的文件和目录
aa
[root@li ~]# ls [1-3] #查看当前目录下文件名为1至3的文件和目录
1 2 3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」