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
posted @   Archer-x  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示