Shell脚本:常用100个shell命令使用讲解题
bigegpt 2024-10-28 12:50 9 浏览
在大多数的Linux和Unix系统、及其他类Unix系统中,Shell是用户与操作系统内核交互的主要方式。作为一种强大的命令行解释器,它也支持编程功能,用户可以写脚本来处理各种任务。无论你是新手还是专业人士,掌握Shell命令都是必不可少的技能。在这篇文章中,我将逐个解读和展示Shell脚本中最常用的100个命令,并为每个命令提供实际的例子。
目录
- 文件操作命令
- 搜索命令
- 目录操作命令
- 权限操作命令
- 网络操作命令
- 进程和系统控制命令
- 文本操作命令
- 压缩与解压命令
- 磁盘使用管理命令
- 包管理命令
- 进程管理命令
- 环境变量命令
- 系统信息发布命令
- 系统控制命令
- 文本编辑命令
- 其他有用命令
文件操作命令
以下是在Linux系统中操作文件的一些常用命令:
- ls:列出目录的内容
ls /home
- cd:改变目录
cd /home/user/Documents
- pwd:打印当前工作目录
pwd
- cat:查看文件内容
cat /etc/passwd
- more:分页查看文件内容
more /var/log/syslog
- less:反向分页查看文件内容
less /var/log/syslog
- touch:创建一个空文件或更改文件的访问和修改时间
touch /home/user/newfile.txt
- cp:复制文件或目录
cp /home/user/file.txt /home/user/Documents
- mv:移动或重命名文件或目录
mv /home/user/file.txt /home/user/Documents/newfile.txt
- rm:删除文件或目录
rm /home/user/unwantedfile.txt
- find:在文件系统中搜索文件或目录
find / -name "*.log"
- grep:在文件中搜索具有特定模式的行
grep "error" /var/log/syslog
- head:输出文件的开始部分
head -n 10 /var/log/syslog
- tail:输出文件的尾部
tail -n 20 /var/log/syslog
- sort:对文本文件的行进行排序
sort /etc/passwd
- wc:计算字数、行数和字节数
wc /var/log/syslog
- cut:从文件的每一行中剪切字节、字符和字段
cut -d: -f1 /etc/passwd
- nano,vi,emacs:常用的文本编辑器
nano /home/user/file.txt
vi /home/user/file.txt
emacs /home/user/file.txt
- paste:合并文件的行。
paste file1.txt file2.txt
搜索命令
以下命令可以帮助你搜索文件或文本:
- find:在文件系统中搜索文件或目录。
find / -name "*.log"
- grep: 在文本文件中搜索决定的文本模式。
grep "error" /var/log/syslog
- locate: 基于文件名在数据库中快速找到文件。
locate myFile.txt
- which: 返回可执行文件的路径。
which java
- ack:特别为程序员设计的一款文件搜索工具。默认会忽略多数版本控制文件夹(如.git, .svn等)的内容。
ack "your_search_term"
- ag(The Silver Searcher):比ack更快的代码搜索工具,同样默认忽略 .git 等版本控制文件夹中的内容。
ag "your_search_term"
- whereis:此命令可用于查找二进制程序、源文件、手册页以及其他文件的位置。
whereis ls
- type:此命令用于确定某个命令是内部 shell 命令、可执行文件还是别名。
type pwd
- apropos:如果你只记得关于某个命令的部分信息,你可以使用 apropos 命令来搜索帮助手册中的命令描述。
apropos partition
- alias:如果你经常使用某些 Linux 命令,你可以使用 alias 命令为这些常用命令创建一个短名,以提升你的工作效率。
alias l='ls -al'
目录操作命令
以下是在Linux系统中操作目录的一些常用命令:
- mkdir:创建一个新的目录
mkdir /home/user/new_directory
- rmdir:删除一个空目录
rmdir /home/user/empty_directory
- tree:以树形结构列出目录的内容
tree /home/user/
- du:估计文件和目录的磁盘使用空间
du -sh /home/user/Documents
- df:显示磁盘使用空间
df -h
权限操作命令
在Linux系统中,文件和目录的访问可以通过权限操作命令进行控制:
- chmod:更改文件或目录的权限
chmod 755 /home/user/file.txt
表示设置文件的主用户有读,写和执行权限(rwx = 7),同组的用户和其他用户有读和执行权限(rx = 5)。
- chown:更改文件或目录的所有者和所属的组
chown newuser:newgroup /home/user/file.txt
表示将/home/user/file.txt的所有者更改为newuser,所属的组更改为newgroup。
- chgrp:更改文件或目录的所属组
chgrp newgroup /home/user/file.txt
表示将/home/user/file.txt的所属的组更改为newgroup。
网络操作命令
以下是在Linux系统中与网络相关的一些常用命令:
- ping:发送网络请求以测试网络连接
ping www.google.com
- ifconfig:显示或配置网络接口
ifconfig eth0
- netstat:显示网络连接、路由表等网络状态信息
netstat -ntlp
- ssh:远程登录或执行远程命令
ssh user@remote_host
- scp:在本地和远程系统之间安全地复制文件
scp /path/to/file user@remote_host:/remote/path/
- curl:获取网络资源
curl www.google.com
- telnet:远程登录工具
telnet remote_host 23
- nslookup:查询 DNS 名称服务器的记录
nslookup www.google.com
- ftp:在本地主机和FTP服务器之间建立FTP连接。
ftp ftp_server
- wget:获取网络资源
wget www.google.com -o google.html
进程和系统控制命令
以下是在Linux系统中管理进程和控制系统的一些常用命令:
- ps:显示当前进程的状态
ps aux
- top:动态显示运行中的进程
- kill:发送信号以终止进程
kill 1234
- shutdown:关闭机器
shutdown -h now
- reboot:重启机器
- logout:退出登录会话
文本操作命令
在编写或处理文本文件时,下列命令可以帮助你完成各种复杂任务:
- echo:打印信息到终端。
echo "Hello, World!"
- printf:格式化并打印信息。
printf "Name: %s\nAge: %d\n" "Alice" 20
- sed:流编辑器,用于对文本文件进行特定的行处理和替换。
echo "Hello, World!" | sed 's/World/Shell/g'
- awk:在文本文件中进行模式扫描和处理语言。
echo -e "name\tage\nAlice\t20\nBob\t22" | awk '{if ($2 >= 21) print $1}'
压缩与解压命令
以下命令主要用于管理和操作文件压缩及解压:
- tar:创建、展开及管理tar包。
tar -cvf archive.tar folder
- gzip:用于文件压缩或解压。
gzip file
- gunzip:用于解压gzip压缩的文件。
gunzip file.gz
- zip/unzip:创建和解压zip格式的压缩包。
zip -r archive.zip folder
unzip archive.zip
磁盘使用管理命令
管理和查看磁盘使用情况:
- df:报告文件系统磁盘空间使用情况。
df -h
- du:估计并报告文件及文件夹的磁盘使用情况。
du -sh folder
- fdisk:对磁盘进行分区管理。
sudo fdisk -l
- hdparm:查看或修改SATA/ATA磁盘参数。
sudo hdparm -i /dev/sda
包管理命令
在Debian,Ubuntu及其他基于Debian的系统中,可以使用以下命令进行软件包管理:
- apt-get:APT包处理工具,用于处理包。
sudo apt-get install package
- dpkg:Debian包管理器。
sudo dpkg -i package.deb
在RedHat, CentOS及其他基于RPM的系统中,可以使用以下命令进行软件包管理:
- yum:高级软件包管理器,用于处理rpm包。
sudo yum install package
- rpm:RPM包管理器。
sudo rpm -i package.rpm
进程管理命令
查看和管理正在运行的进程:
- ps:报告进程当前状态。
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 225848 7836 ? Ss Nov10 4:05 /lib/systemd/systemd --system --deserialize 39
root 2 0.0 0.0 0 0 ? S Nov10 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< Nov10 0:00 [kworker/0:0H]
- top:动态显示当前耗费系统资源最多的进程。
- htop:比top更友好的动态进程查看工具。
htop
- kill: 终止或者发送一个信号到指定进程。
- pkill:条件地终止或者发送一个信号到指定进程。
pkill process_name
环境变量命令
查看或设置环境变量:
- env:显示当前所有的环境变量。
输入:env
输出:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
PWD=/home/user
- set:显示当前shell所有的环境变量及函数。
输入:set
输出:展示所环境变量以及函数
- export:设置或显示环境变量。
输入:
export VARName="Value"
echo $VARName
输出结果:
Value
系统信息发布相关命令
有时,你可能想要查看有关你的系统或硬件的信息。以下命令可以帮助你做到这一点:
- uname:会打印操作系统的名称。
输入:
uname
输出:
Linux
- hostname:打印系统的主机名。
输入:
hostname
输出:
myhostname
- dmesg:打印或控制内核环形缓冲区。
输入:
dmesg | less
- df:展示文件系统的磁盘空间使用情况。
输入:df -h
输出:
Filesystem Size Used Avail Use% Mounted on
udev 962M 0 962M 0% /dev
tmpfs 200M 4.3M 196M 3% /run
/dev/sda1 30G 4.7G 24G 17% /
- free:展示系统中未使用和已经使用的物理和swap内存。
输入:free -h
输出:
total used free shared buff/cache available
Mem: 3.8G 487M 1.9G 122M 1.4G 3.0G
Swap: 0B 0B 0B
- uptime:展示系统已经运行了多久,有多少用户正在登录,以及系统负载。
输入:uptime
输出: 16:14:30 up 43 min, 1 user, load average: 0.34, 0.36, 0.40
- last:查看系统的重启和关机记录。
输入:last reboot
- w: 展示哪些用户正在登录。
输入:w
输出: 16:17:51 up 1:42, 1 user, load average: 0.45, 0.47, 0.38
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user tty1 14:36 1:42m 1.55s 0.06s w
- who:展示哪些用户正在登录,和w命令相似但信息更少。
输入:who
输出: user tty1 2022-01-28 14:36
- id:展示当前用户的UID、GID以及所在的组。
输入:id
输出:uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
系统控制命令
在一些特殊情况下,你可能需要进行一些系统控制操作。以下命令可以帮助你做到这一点:
- halt:关机。
输入:sudo halt
- reboot:重启系统。
输入:sudo reboot
- shutdown:关机或者重启,和上述两个命令一样,但是提供更多的选项。
关闭系统:sudo shutdown -h now
重启系统:sudo shutdown -r now
- passwd:更改用户密码。
更改密码:passwd
文本编辑器命令
Linux提供了多种命令行文本编辑器。以下这些可能是你需要知道的:
- vi/vim:vi是一个文本编辑器,而vim是vi的改进版,提供了更多的功能。
- nano:一个简单易用的命令行文本编辑器。
- emac:一个强大的文本编辑器,也是一个定制化的计算环境。
其他常用命令
- man:查看命令的帮助文档。
- whatis:显示一个命令的简单描述。
输入:whatis ls
输出: ls (1) - list directory contents
- whereis:查找命令的二进制文件、源文件及帮助文档位置。
输入:whereis ls
输出: ls: /bin/ls /usr/share/man/man1/ls.1.gz
- which:查找并显示给定命令的完整路径。
输入:which ls
输出:/bin/ls
- whoami:打印当前有效的用户名。
输入:whoami
输出:user
- date:显示或设置系统日期和时间
输入:date
输出: Tue Dec 21 02:16:12 UTC 2021
- cal:显示日历
输入:cal
输出:
January 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 31
- alias:创建命令别名
- unalias:删除别名
- history:显示命令历史
- clear:清除屏幕或窗口内容
- watch:用于实时查看当前命令打印信息
输入:watch -n 2 date
解释:watch`命令会每2秒运行一次`date`命令,并实时显示输出
大多数人学习Shell脚本的最大动力是提高效率。使用Shell脚本,你可以编写一个任务,然后让计算机去做,而你可以去忙其他的事情;你可以编写一个任务,让计算机重复执行,而不需要你每次在命令行手动输入;你可以更灵活地处理任务,比如管理用户,管理程序等。就这样,Shell脚本赋予你控制计算机的能力,在你的指尖下,一切尽在掌握。
在未来,实践未知,探索无限,最好的方式是动手试试看,愿这完整的100个命令清单能够成为你在Linux世界里的指南针!掌握Shell命令并利用它们来编写脚本能够极大地提升你的工作效率,无论是进行系统管理还是进行程序设计,这都是一种强大的工具。善用它,享受编程带给你的乐趣吧!
相关推荐
- 悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)
-
新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...
- 高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源
-
凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...
- 微服务架构实战:商家管理后台与sso设计,SSO客户端设计
-
SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...
- 还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑
-
在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...
- Seata源码—6.Seata AT模式的数据源代理二
-
大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...
- 30分钟了解K8S(30分钟了解微积分)
-
微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...
- SpringBoot条件化配置(@Conditional)全面解析与实战指南
-
一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...
- 一招解决所有依赖冲突(克服依赖)
-
背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...
- 你读过Mybatis的源码?说说它用到了几种设计模式
-
学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...
- golang对接阿里云私有Bucket上传图片、授权访问图片
-
1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...
- spring中的资源的加载(spring加载原理)
-
最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...
- Android资源使用(android资源文件)
-
Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...
- 如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)
-
深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...
- @Autowired与@Resource原理知识点详解
-
springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...
- java的redis连接工具篇(java redis client)
-
在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)