Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
linux命令大全详解_linux基础知识点,希望能够帮助你!!!。
大家好,我是小雨。今天给大家分享一篇硬核的Linux基础知识总结。
Linux系统的基本操作对于大多数计算机类相关学生或者相关从业人员都很重要,本文以树莓派上的Linux系统为实例,从基础出发,详细介绍Linux系统中最需要掌握的知识点,介绍常见的命令参数与用法。
这里就不搬概念了,Linux本质上和Window一样都是运行在计算机上的操作系统,但是有一个核心区别就是Linux是开源的。
运行在桌面端的Linux像Windows一样有图形化界面,我们可以用鼠标操作,但是大多数Linux系统运行在服务器上没有图形化界面,那我们怎么执行呢?使用Shell工具,它就像一个外部用户与Linux内核沟通的桥梁,例如复制粘贴重命名文件,这些都是通过Linux命令来执行的,我们所要学习的就是要理解这些命令并使用这些命令。
知道了Linux基本概念后,我们该如何使用Shell工具来登录远程Linux系统呢?
如果你的电脑上的操作系统是Windows,可以使用putty工具或者Xshell(具体按照方法可自行搜索)登录Linux系统,在指定界面按照提示输入Linux系统的IP地址、用户名、登录密码即可登录;
如果你的电脑上的系统是macOS或者Linux类系统(Ubuntu、CentOS、Kylin、Raspberry Pi OS)那么直接打开终端工具输入命令:
ssh 用户名@IP地址
再按提示输入登录密码就可以登录了。
如果是单纯的学习Linux基础知识也可以直接打开终端就可以了!
这里以Windows上的终端工具Xshell登录树莓派的Linux系统为例,登录成功后,系统会显示上一次登录的时间。
使用Xshell连接树莓派
在学习Linux命令之前,有一些快捷键是必须要掌握的,它能大大提高你的Linux命令使用效率。
Linux不像Windows分了C盘和D盘,它只有一个根目录,根目录有若干文件夹,每一个文件夹都有它特定的用途:
└── / // 根目录 ├── bin // binary的缩写,存放系统命令,bin目录里面包含了会被所有用户使用的可执行程序 ├── boot // 系统启动目录,保存与系统启动相关的文件,包含内核文件、启动引导程序 ├── dev // device的缩写,设备文件保存位置 ├── etc // 系统配置文件保存位置,系统中采用默认安装方式的服务配置文件都会保存在这 ├── home // 用户的家目录,Linux中每一个用户在home目录下都有一个自己用户名的家目录 ├── lib // 系统调用的函数库保存位置 ├── media // 媒体,挂载目录,建议挂载一些媒体设备 ├── mnt // mount表示挂载目录,一般表示临时挂载一些装置(U盘、SD卡、移动硬盘) ├── opt // 第三方安装软件保存的位置,手工安装源码可以安装在这里,/usr/local/也可以作为安装目录 ├── proc // 虚拟文件系统,该目录保存在内存中,保存系统的内核、进程、外部设备的网络状态等 ├── root // 超级用户root的家目录 ├── sbin // system binary表示系统二进制文件,系统环境设置相关的目录,包含系统级重要的可执行程序 ├── srv // service 表示服务,包含一些网络启动后所需要取用的数据 ├── sys // 虚拟文件系统,该目录的数据都保存在内存中,保存与内核相关的信息 ├── tmp // 临时目录,系统存放临时文件的目录 ├── usr // Unix Software resource 表示Unix系统软件资源,系统默认软件都安装在这 ├── var // variable表示动态的,包含程序的数据比如log文件 └── lost+found // 当系统以外崩溃或者关机时,产生的文件碎片就存在这里,是根分区的备份恢复目录
Windows有图形界面,浏览和切换目录可以直接在我的电脑里点击鼠标,而Linux如何在命令行交互界面中浏览文件目录呢?
列出文件和目录(Linux中最常用的命令之一)。
【常用参数】
表示切换目录
【常用写法】
显示当前目录的路径(显示从根目录开始到当前目录的绝对路径)
查看Linux中某个可执行程序的位置
pi@raspberrypi4b:/home $ which python3 /usr/bin/python3
列举出当前目录的文件大小信息
一次性查看文件的所有内容并将其输出到终端中来,适合查看内容不多的文本文件
pi@raspberrypi4b:~/swift $ cat hello.txt hello raspiberry 4b !
分页显示文本内容,适合查看内容较多的文本文件
【快捷指令】
显示文件的开头或者末尾几行 默认显示10行,可以添加参数n指定显示n行文本内容,tail还有一个重要的用处就是查看log日志文件,可以实时查看日志文件结尾的更新情况。使用参数-f可以每隔一秒查看文件是否有更新,也可以使用参数-s指定间隔时间查看文本内容是否更新
tail -f -s 3 access.log
创建一个文件
touch hello.txt
如果指定的文件在当前文件夹中不存在,则直接创建一个空白的新文件; 如果想要一次性创建多个文件,可以使用命令:
touch file1.txt file2.txt file3.txt
创建一个目录,类似于Windows中新建一个指定名称的文件夹;
【常用参数】
mkdir -p one/two/three
在Linux系统的命令行中如果需要对文本进行编辑,主要有两个应用nano和vim,其中vim是vi的增强版本。这里主要介绍一下vim的基本使用。
【常用写法】
vim hello.txt # 当前目录下有hello.txt就直接编辑,若没有则新建一个该名称的空白文件
vim打开文本时,默认启动正常模式(只能跳转光标,不可编辑文本),需要输入键盘i键才会启动编辑模式。编辑好文件后,如果想保存输入:进入命令模式,此时输入的命令显示在控制台最后一行。wq表示保存退出,按回车执行操作。如果不想保存文本,q!表示不保存退出。
【注意事项】
vim文本编辑器对于新手来说,使用不太习惯,但是如果熟练使用vim编辑器后,该工具能非常有效的提高工作效率。
在Linux系统中,将多个文件压缩成一个压缩包的过程,主要分成两部分: 第一步:将多个文件打包成一个tar包 第二步:将tar包压缩成压缩文件。
tar的主要用途是将文件夹或者多个文件创建成一个tar包(归档)
【常用写法】
tar -czvf xiaoyu.tar.gz xiaoyu/ # 将xiaoyu文件夹归档并压缩 tar -xzvf xiaoyu.tar.gz # 将压缩包xiaoyu.tar.gz解压
【参数解读】
如果需要在Linux中处理zip压缩包,可以使用unzip解压,zip进行压缩。
【常用写法】
unzip xiaoyu.zip # 解压zip压缩包 unzip -l xiaoyu.zip # 只查看内容,不解压 zip xiaoyu.zip xiaoyu/ # 将xiaoyu文件夹压缩为xiaoyu.zip
拷贝文件和目录
【常用写法】
删除文件或目录
【常用参数】
【常用写法】
sort可以快速对文本文件的行进行排序
【常用写法】
【案例讲解】
我们创建一个文本文件city.txt,写入以下内容:
Guangzhou Shengzhen Anhui Wuhu Beijing Zhengzhou Xiamenn
执行sort city.txt命令后系统会输出:
【常用参数】
uniq命令用于删除文本文件中的重复内容
【常用写法】
【常用参数】
【注意事项】
uniq只能去除文本文件中连续重复的行数
scp是secure copy的缩写,可以通过网络安全地把文件从一台电脑拷贝到另一台电脑。
【基本用法】
scp 源文件 目标文件 其中原文件和目标文件的格式为user@ip:file_name
scp ./hello.txt root@192.168.123.160:~/ # 将本系统目录下的hello.txt文件拷贝到服务器的家目录下 scp root@106.55.62.52:~/hello.txt ./hello.txt # 将服务器家目录下的hello.txt文件拷贝到本系统当前目录下
ln是Link的缩写表示创建链接,在Linux系统中文件名与文件内容是分开存储的,每一个文件名通过inode标识绑定到对应的文件内容。为了保护某些重要文件的安全已经方便系统操作,Linux系统设计了两种链接:硬链接和软链接。
(1)硬链接
如果我们使用命令ln file1 file2让file2与file1进行硬链接,此时假若删除file1,会发现file2不会受到影响,对于硬链接来说删除链接任意一方的文件,共同指向的文件内容并不会从硬盘中删除。只有同时删除了file1与file2,它们所共同指向的文件内容才会消失。
(2)软链接
软连接类似于Windows里的快捷方式,执行创建软链接命令ln -s file1 file3后,系统会创建file3指向file1的软链接。此时file3只是file1的快捷方式,它指向file1显示file1的内容。但是file3与file1的inode并不同,我们删除file3,file1不会受到影响。但是如果删除file1的话,file3就会变成死链接。
【案例思考】
删除原文件file1后,硬链接文件file2不受影响,软连接文件file3开始无法访问
在Linux系统中允许多个用户存在,这些用户被划分到不同的组中。但是Linux系统中的root用户(超级管理员用户)最特殊,它被划分到root组中,具有系统中的最高权限。为了保护各个用户在系统中的文件安全,Linux系统定义了各种文件权限级别:可读、可写、可执行。
以root身份执行命令
sudo vim nginx.conf
假如nginx.conf这个文件对于普通用户执行vim工具只有可读权限,如果要编辑该文件则需要以root用户身份来执行。这时候只需要使用sudo命令即可。
添加新用户
【常用参数】
useradd建立账户后,使用passwd来设定账户的密码,使用userdel来删除账户。注意执行这些命令都需要root用户权限。
useradd -g root -d /home/xy xiaoyu # 新建一个用户名为xiaoyu的用户,属于root组家目录在/home/xy文件夹下 passwd xiaoyu # 修改xiaoyu用户的密码 userdel xiaoyu # 删除xiaoyu用户名,其家目录下的文件夹依然保留 userdel xiaoyu -r # 删除xiaoyu用户名的同时删除家目录下的文件夹
全称switch user表示切换用户
su xiaoyu # 切换为普通用户xiaoyu su # 切换回root用户
如果以root用户登录系统后再su切换成普通用户,可以使用exit切换回root用户身份。
Linux中每一个用户都属于一个特定的群组,如果创建用户时没有指定特定的群组,系统会为用户分配一个与用户名相同的群组,并把用户规划给该群组。
创建群组,用法和useradd相同
groupadd com # 创建com组 groupdel com # 删除com组
查看用户对应的组名称
groups xiaoyu # 查看用户xiaoyu所在的组
用户修改文件的群组
chgrp com file1.txt # 将file1.txt的文件群组修改为com
修改文件的所有者
chown xiaoyu file1.txt # 将file1.txt这个文件的所有者设置为xiaoyu chown xiaoyu:com file1.txt # 将file1.txt这个文件的所有者设置为xiaoyu,所属的群组设置为com
修改文件的访问权限
chmod 777 hello.java # 将hello.java这个文件设置为所有用户可读可写可执行
在Linux系统中,不同的用户处于不同的地位拥有不同的权限。为了保护系统的安全,Linux系统对不同的用户访问同一文件(包括目录)的权限做了不同的规定。
可以使用ll或者ls -l命令,查看当前目录下文件的属性以及文件所属的用户和组。
pi@raspberrypi4b:~/swift $ ls -l total 0 drwxr-xr-x 2 root root 4096 Apr 27 17:02 bin -rw-r--r-- 2 root root 0 Apr 27 14:43 file1 -rw-r--r-- 2 root root 0 Apr 27 14:43 file2 lrwxrwxrwx 1 root root 5 Apr 27 14:44 file3 -> file1
其中drwxr-xr-x表示文件或目录的权限,我们来解读一下这些字母分别代表什么含义:
每个文件的熟悉由10个字符来确定,第0位确定文件类型,第1-3位确定文件属主(文件的所有者)拥有该文件的权限,第4-6位确定文件的属组(所有者同组用户)拥有该文件的权限,第7-9位确定其它用户拥有该文件的权限。
【案例分析】
我们试着用上面的知识解读一下-rwxrw-r--的权限信息;
回到前面的图,我们发现有的时候可以通过数字来赋予文件权限,比如chmod 777 file.txt,这是什么意思呢?原来Linux系统中将读权限设置为数字4、写权限设置为数字2、执行权限设置为数字1,如果需要表示权限只需要做一些简单加法就行。
【案例分析】
我们试着理解chmod 540 hello.py这个语句给hello.py这个文件赋予的权限。
除了使用字符数字,Linux系统中还可以通过字母来分配权限;
【案例分析】
在Linux系统中,我们通常需要检索某一个文件,这时候就需要相关的查找工具。
搜索包含关键字的所有文件和目录,支持正则表达式。
locate file1.txt
【注意事项】
find是一款Linux内置工具,主要的功能是找文件,甚至可以在找到文件后再进行后续操作,功能非常强大。
【常用写法】
find . -name "XXXXX" # 表示在当前目录中查找名为XXXXX的文件 find . -iname "XXXXX" # 当前目录查找XXXXX文件名不区分大小写
find . -type d -name "XXXXX" # 在当前目录查找XXXXX的目录
type 的值可选为:
文件类型 |
含义 |
文件类型 |
含义 |
f |
普通文件 |
p |
管道 |
d |
目录 |
c |
字符设备 |
l |
软连接 |
b |
块设备 |
find /root -size +10G # 查找root目录下超过10M的文件 find . -size 12k # 查找当前目录下等于12k的文件 find /tmp -size -1M # 查找tmp目录下小于1M的文件
find -name "*.java" -atime +7 # 7天之前访问过的java文件 find . -mtime -1 # 近1天修改过的文件
find . -name "*.java" -printf "%p - %u" # 查找当前目录下所有的java文件并以文件名-文件所有者格式打印 find . -name "*.py" -delete # 删除当前目录下所有的py文件 find -name "*.py" -exec chmod 777 {} \; # 将当前目录下的所有py文件权限设为所有人可读可写可执行 find -name "*.py" -ok chmod 777 {} \; # 功能一样,不过执行之前有询问操作
grep主要用于查找文件里符合条件的字符串
【常用参数】
grep -nr xiaoyu *.py # 递归查找当前文件夹下所有的py文件中含有关键字xiaoyu的位置并显示行数 grep -v xiaoyu *.py # 查找当前文件夹下所有的py文件中不包含xiaoyu关键字的所有行 grep -E ^xiao /root/*.py # 查找root文件夹下所有的py文件中以xiao开头的位置
在日常使用的Linux系统中,安装软件的方式主要有两种。Red Hat家族的.rpm包,一般使用yum进行安装;另一个Debian家族的.deb包,一般使用apt进行安装。
以树莓派的Raspberry Pi OS系统为例,它属于Debian家族安装,其软件包后缀为.deb,可以使用apt-get为系统安装软件,系统大部分操作基本上和Ubuntu类似。
apt-get适用于deb包从互联网软件仓库中搜索、安装、卸载软件或者操作系统,其中apt的全称是Advanced Package Tool。
【常用操作】
apt-get install packagename #安装一个新的软件包 apt-get remove packagename #卸载一个已安装的软件包(保留配置文档) apt-get remove --purge packagename #卸载一个已安装的软件包(删除配置文档) apt-get autoremove packagename #删除包及其依赖的软件包 apt-get autoremove --purge packagname #删除包及其依赖的软件包+配置文件,比上面的要删除的彻底一点 dpkg --force-all --purge packagename #有些软件很难卸载,而且还阻止了别的软件的应用,就能够用这个(有风险)
【注意事项】
sudo apt-get update # 刷新软件源 sudo apt-get upgrade # 将系统中所有软件包一次性升级到最新版本
我们刚学会了使用apt-get安装软件,但是如果遇到apt仓库中没有的软件,我们就需要学会更高级的软件安装方法:编译源码安装;
【基本步骤】
wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
tar -xzvf httpd-2.4.53.tar.gz # 解压压缩包 cd httpd-2.4.53 # 进入解压后的文件夹
在Linux系统中一个命令的去向可以有三个方向:终端显示、文件、另外一个命令的入参。
命令一般是通过键盘输入,然后输出到终端、文件,它的标准用语分别是标准输入stdin、标准输出stdout、标准错误输出stderr
重定向是指本来要显示在终端的结果,重新输送到别的地方(文件中或者作为其它命令的输入)
echo "hello" > hello.txt
2.使用>>输出重定向,表示新内容追加到文件末尾;
echo "hello" >> hello.txt
3.使用2>输出重定向,表示标准错误输出
cat hello.txt > res.txt 2> errors.log
4.使用2>&1输出重定向,表示标准输出和错误输出都重定向到一个地方
cat hello.txt > res.txt 2>&1 # 覆盖 cat hello.txt >> res.txt 2>&1 # 追加
cat < hello.txt # 指定cat命令的输入内容为hello.txt的内容
输出结果与cat hello.txt相同,但是系统的工作流程是不同的。
2. 使用<<输入重定向
wc -m << END # 输入这个命令后,终端就进入键盘输入模式,其中END为结束命令
管道,顾名思义就是可以像管道一样把两个命令的输入输出连起来,英文是pipeline在Linux中可以用符号|表示。
例如我们对city.txt这个文本文件进行查看、排序、降重,可以写成:
cat hello.txt | sort | uniq
这样我们就能找出进过排序与降重的城市列表了。
【注意事项】
cat、sort、uniq、grep等命令均支持管道符,是因为这些命令均可以从标准输入中读取要处理的文本(即从标准输入中读取参数);而对于部分命令,例如rm、kill等命令则不支持从标准输入中读取参数,因为其只支持从命令行中读取参数。
在Windows系统中,如果某个应用卡住了,我们可以在任务管理器里找到对应进程,然后强制结束。那么在Linux系统中如何查看进程呢?
可以查看当前系统中有哪些用户处于登录状态及其他信息
pi@raspberrypi4b:~ $ w 23:44:34 up 4 min, 3 users, load average: 0.33, 0.44, 0.21 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pi tty7 :0 19:48 3:56m 0.88s 0.16s /usr/bin/lxsess pi tty1 - 19:48 3:56m 0.15s 0.12s -bash pi pts/0 192.168.123.122 23:41 2.00s 0.13s 0.03s w
【数据解读】
第一行显示的是任务队列信息 23:44:34表示当前时间,up 4 min表示系统正常运行了4分钟,3 users表示当前有三个用户在登录,load average代表负载均衡信息,三个值分别代表最近1分钟、5分钟、15分钟的平均负载。
用于显示当前系统中的进程,是当前时刻系统的进程快照,不会实时更新。
pi@raspberrypi4b:~ $ ps PID TTY TIME CMD 1580 pts/0 00:00:00 bash 1701 pts/0 00:00:00 ps
【数据解读】
【常用参数】
获取进程的动态列表
【数据解读】
第一行:同w命令第一行相同,显示的是任务队列信息;
第二行:总进程数目、处于运行态、休眠态、停止态、僵尸态的进程数目;
第三行:显示的是CPU状态信息,
第四行:内存的状态 第五行:交换分区的信息 表格抬头含义:
【常用参数】
用于结束某个进程,可通过ps 或者 top找到相关进程的pid然后使用kill结束该进程
kill 455 # 结束进程ID为455的进程 kill 537 455 # 结束进程ID为537和455的进程 kill -9 1753 # 强制结束进程
默认情况下,用户创建的进程都是前台进程,一般的前台进程从键盘读取数据,把结果输出到显示器。后台进程则不必等待程序运行结束,就可以输入其它命令。需要在执行的命令后添加&符号,表示启动一个后台进程。
启动后台进程,该后台进程与终端相关联,一旦关闭终端,进程就结束了。
sudo apt-get upgrade &
启动进程使其不受挂断操作(关闭终端操作)的影响,一般情况下nohup与&结合使用表明启动后台进程且不受挂断操作影响。
nohup ./frps -c frps.ini > /dev/null 2>&1 & # 后台读取配置信息启动frps,无论是否启动成功都将结果重定向到/dev/null
这时如果需要结束该进程需要在top中找到其PID然后使用kill结束该进程。
在Linux系统中,处于前台运行状态的进程,使用快捷键Ctrl + Z可以将进程转为后台暂停状态。同样,处于后台暂停状态的进程可以使用bg命令转为前台运行状态。
【常用写法】
bg % 1 # 不添加参数时默认作用于最近的一个后台进程,如果添加参数则会作用于指定标号的进程。
对于后台运行的进程或者后台暂停的进程,使用命令fg都可以将其转为前台运行的进程。 对于进程前后台的切换,其控制方法可以看下面的运行状态图:
一个运行起来的程序被称为进程,在Linux中有些进程不与任何进程关联,不论用户的身份如何,都在后台运行。这些进程的父进程是PID为1的进程,PID为1的进程只有在系统关闭时才会被销毁。它会在后台一直运行等待分配工作,我们将这类进程称之为守护进程。 守护进程的名字通常会在最后有一个d,表示daemon守护的意思,例如systemd、httpd
希望能通过本文的学习,能够让小伙伴对Linux系统的基本操作有一个全面的认识,希望大家一边看着文中的内容一边动手操作,这样才能真正掌握知识。
看到这了,希望大家能给小雨点个赞![比心]
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章