【shell】常用100个shell命令使用讲解

【shell】常用100个shell命令使用讲解

【shell】常用100个shell命令使用讲解

【一】文件操作命令【二】搜索命令【三】目录操作命令【四】权限操作命令【五】网络操作命令【六】进程和系统控制命令【七】文本操作命令【八】压缩与解压命令【九】磁盘使用管理命令【十】包管理命令【十一】进程管理命令【十二】环境变量命令【十三】系统信息发布相关命令【十四】系统控制命令【十五】文件编辑器命令【十六】其他常用命令【十七】案例【1】发布时拉取压缩包的案例【2】项目运行脚本案例(1)service.sh(2)stop.sh(3)start.sh(4)restart.sh

使用Shell脚本,你可以编写一个任务,然后让计算机去做,而你可以去忙其他的事情;你可以编写一个任务,让计算机重复执行,而不需要你每次在命令行手动输入;你可以更灵活地处理任务,比如管理用户,管理程序等。就这样,Shell脚本赋予你控制计算机的能力,在你的指尖下,一切尽在掌握。

【一】文件操作命令

以下是在Linux系统中操作文件的一些常用命令:

(1)ls:列出目录的内容

ls /home

(2)cd:改变目录

cd /home/user/Documents

(3)pwd:打印当前工作目录

pwd

(4)cat:查看文件内容

cat /etc/passwd

(5)more:分页查看文件内容

more /var/log/syslog

(6)less:反向分页查看文件内容

less /var/log/syslog

(7)touch:创建一个空文件或更改文件的访问和修改时间

touch /home/user/newfile.txt

(8)cp:复制文件或目录

cp /home/user/file.txt /home/user/Documents

(9)mv:移动或重命名文件或目录

mv /home/user/file.txt /home/user/Documents/newfile.txt

(10)rm:删除文件或目录

rm /home/user/unwantedfile.txt

(11)find:在文件系统中搜索文件或目录

find / -name "*.log"

(12)grep:在文件中搜索具有特定模式的行

grep "error" /var/log/syslog

(13)head:输出文件的开始部分

head -n 10 /var/log/syslog

(14)tail:输出文件的尾部

tail -n 20 /var/log/syslog

(15)sort:对文本文件的行进行排序

sort /etc/passwd

(16)wc:计算字数、行数和字节数

wc /var/log/syslog

(17)cut:从文件的每一行中剪切字节、字符和字段

cut -d: -f1 /etc/passwd

(18)nano,vi,emacs:常用的文本编辑器

nano /home/user/file.txt

vi /home/user/file.txt

emacs /home/user/file.txt

(19)paste:合并文件的行

paste file1.txt file2.txt

【二】搜索命令

以下命令可以帮助你搜索文件或文本:

(1)find:在文件系统中搜索文件或目录

find / -name "*.log"

(2)grep: 在文本文件中搜索决定的文本模式

grep "error" /var/log/syslog

(3)locate: 基于文件名在数据库中快速找到文件

locate myFile.txt

(4)which: 返回可执行文件的路径

which java

(5)ack:特别为程序员设计的一款文件搜索工具。默认会忽略多数版本控制文件夹(如.git, .svn等)的内容

ack "your_search_term"

(6)ag(The Silver Searcher):比ack更快的代码搜索工具,同样默认忽略 .git 等版本控制文件夹中的内容

ag "your_search_term"

(7)whereis:此命令可用于查找二进制程序、源文件、手册页以及其他文件的位置

whereis ls

(8)type:此命令用于确定某个命令是内部 shell 命令、可执行文件还是别名

type pwd

(9)apropos:如果你只记得关于某个命令的部分信息,你可以使用 apropos 命令来搜索帮助手册中的命令描述

apropos partition

(10)alias:如果你经常使用某些 Linux 命令,你可以使用 alias 命令为这些常用命令创建一个短名,以提升你的工作效率

alias l='ls -al'

【三】目录操作命令

以下是在Linux系统中操作目录的一些常用命令

(1)mkdir:创建一个新的目录

mkdir /home/user/new_directory

(2)rmdir:删除一个空目录

rmdir /home/user/empty_directory

(3)tree:以树形结构列出目录的内容

tree /home/user/

(4)du:估计文件和目录的磁盘使用空间

du -sh /home/user/Documents

(5)df:显示磁盘使用空间

df -h

【四】权限操作命令

在Linux系统中,文件和目录的访问可以通过权限操作命令进行控制 (1)chmod:更改文件或目录的权限

chmod 755 /home/user/file.txt

表示设置文件的主用户有读,写和执行权限(rwx = 7),同组的用户和其他用户有读和执行权限(rx = 5)。

(2)chown:更改文件或目录的所有者和所属的组

chown newuser:newgroup /home/user/file.txt

表示将/home/user/file.txt的所有者更改为newuser,所属的组更改为newgroup。

(3)chgrp:更改文件或目录的所属组

chgrp newgroup /home/user/file.txt

表示将/home/user/file.txt的所属的组更改为newgroup。

【五】网络操作命令

以下是在Linux系统中与网络相关的一些常用命令

(1)ping:发送网络请求以测试网络连接

ping www.google.com

(2)ifconfig:显示或配置网络接口

ifconfig eth0

(3)netstat:显示网络连接、路由表等网络状态信息

netstat -ntlp

``

(4)ssh:远程登录或执行远程命令

```powershell

ssh user@remote_host

(5)scp:在本地和远程系统之间安全地复制文件

scp /path/to/file user@remote_host:/remote/path/

(6)curl:获取网络资源

curl www.google.com

(7)telnet:远程登录工具

telnet remote_host 23

(8)nslookup:查询 DNS 名称服务器的记录

nslookup www.google.com

(9)ftp:在本地主机和FTP服务器之间建立FTP连接

ftp ftp_server

(10)wget:获取网络资源

wget www.google.com -o google.html

【六】进程和系统控制命令

以下是在Linux系统中管理进程和控制系统的一些常用命令

(1)ps:显示当前进程的状态

ps aux

(2)top:动态显示运行中的进程 (3)kill:发送信号以终止进程

kill 1234

(4)shutdown:关闭机器

shutdown -h now

(5)reboot:重启机器 (6)logout:退出登录会话

【七】文本操作命令

在编写或处理文本文件时,下列命令可以帮助你完成各种复杂任务:

(1)echo:打印信息到终端。

echo "Hello, World!"

(2)printf:格式化并打印信息。

printf "Name: %s\nAge: %d\n" "Alice" 20

(3)sed:流编辑器,用于对文本文件进行特定的行处理和替换。

echo "Hello, World!" | sed 's/World/Shell/g'

(4)awk:在文本文件中进行模式扫描和处理语言。

echo -e "name\tage\nAlice\t20\nBob\t22" | awk '{if ($2 >= 21) print $1}'

【八】压缩与解压命令

以下命令主要用于管理和操作文件压缩及解压

(1)tar:创建、展开及管理tar包

tar -cvf archive.tar folder

(2)gzip:用于文件压缩或解压

gzip file

(3)gunzip:用于解压gzip压缩的文件

gunzip file.gz

(4)zip/unzip:创建和解压zip格式的压缩包

zip -r archive.zip folder

unzip archive.zip

【九】磁盘使用管理命令

管理和查看磁盘使用情况

(1)df:报告文件系统磁盘空间使用情况

df -h

(2)du:估计并报告文件及文件夹的磁盘使用情况

du -sh folder

(3)fdisk:对磁盘进行分区管理

sudo fdisk -l

(4)hdparm:查看或修改SATA/ATA磁盘参数

sudo hdparm -i /dev/sda

【十】包管理命令

(1)apt-get:APT包处理工具,用于处理包

sudo apt-get install package

(2)dpkg:Debian包管理器

sudo dpkg -i package.deb

(3)yum:高级软件包管理器,用于处理rpm包

sudo yum install package

(4)rpm:RPM包管理器

sudo rpm -i package.rpm

【十一】进程管理命令

查看和管理正在运行的进程

(1)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]

(2)top:动态显示当前耗费系统资源最多的进程 (3)htop:比top更友好的动态进程查看工具

htop

(4)kill: 终止或者发送一个信号到指定进程 (5)pkill:条件地终止或者发送一个信号到指定进程

pkill process_name

【十二】环境变量命令

查看或设置环境变量

(1)env:显示当前所有的环境变量

输入:env

输出:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

SHELL=/bin/bash

PWD=/home/user

(2)set:显示当前shell所有的环境变量及函数

输入:set

输出:展示所环境变量以及函数

(3)export:设置或显示环境变量

输入:

export VARName="Value"

echo $VARName

输出结果:

Value

【十三】系统信息发布相关命令

有时,你可能想要查看有关你的系统或硬件的信息。以下命令可以帮助你做到这一点

(1)uname:会打印操作系统的名称

输入:

uname

输出:

Linux

(2)hostname:打印系统的主机名

输入:

hostname

输出:

myhostname

(3)dmesg:打印或控制内核环形缓冲区

输入:

dmesg | less

(4)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% /

(5)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

(6)uptime:展示系统已经运行了多久,有多少用户正在登录,以及系统负载

输入:uptime

输出: 16:14:30 up 43 min, 1 user, load average: 0.34, 0.36, 0.40

(7)last:查看系统的重启和关机记录

输入:last reboot

(8)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

(9)who:展示哪些用户正在登录,和w命令相似但信息更少

输入:who

输出: user tty1 2022-01-28 14:36

(10)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)

【十四】系统控制命令

在一些特殊情况下,你可能需要进行一些系统控制操作。以下命令可以帮助你做到这一点

(1)halt:关机

输入:sudo halt

(2)reboot:重启系统

输入:sudo reboot

(3)shutdown:关机或者重启,和上述两个命令一样,但是提供更多的选项

关闭系统:sudo shutdown -h now

重启系统:sudo shutdown -r now

(4)passwd:更改用户密码

更改密码:passwd

【十五】文件编辑器命令

Linux提供了多种命令行文本编辑器。以下这些可能是你需要知道的:

(1)vi/vim:vi是一个文本编辑器,而vim是vi的改进版,提供了更多的功能。 (2)nano:一个简单易用的命令行文本编辑器。 (3)emac:一个强大的文本编辑器,也是一个定制化的计算环境。

【十六】其他常用命令

(1)man:查看命令的帮助文档 (2)whatis:显示一个命令的简单描述

输入:whatis ls

输出: ls (1) - list directory contents

(3)whereis:查找命令的二进制文件、源文件及帮助文档位置

输入:whereis ls

输出: ls: /bin/ls /usr/share/man/man1/ls.1.gz

(4)which:查找并显示给定命令的完整路径

输入:which ls

输出:/bin/ls

(5)whoami:打印当前有效的用户名

输入:whoami

输出:user

(6)date:显示或设置系统日期和时间

输入:date

输出: Tue Dec 21 02:16:12 UTC 2021

(7)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

(8)alias:创建命令别名 (9)unalias:删除别名 (10)history:显示命令历史 (11)clear:清除屏幕或窗口内容 (12)watch:用于实时查看当前命令打印信息

输入:watch -n 2 date

解释:watch`命令会每2秒运行一次`date`命令,并实时显示输出

【十七】案例

【1】发布时拉取压缩包的案例

#!/bin/bash

# 设置根目录

BASE_DIR="/home/damp/server/services"

# 获取当前时间,格式为 YYYYMMDD_HHMM(年、月、日、时、分)

CURRENT_TIME=$(date +"%Y%m%d_%H%M")

# 以当前时间为父目录

TARGET_DIR="$BASE_DIR/bushu_$CURRENT_TIME"

TARGET_IND_DIR="$TARGET_DIR/server-ind"

TARGET_WEB_DIR="$TARGET_DIR/sub-ind"

# 创建目标目录

mkdir -p "$TARGET_IND_DIR"

mkdir -p "$TARGET_WEB_DIR"

echo "已创建目录: $TARGET_DIR"

# 进入目标目录

cd "$TARGET_IND_DIR" || exit

echo "进入目录: $TARGET_IND_DIR"

# 设置源目录

SOURCE_DIR="/home/damp/server/services/damp-xingye-ind/lib"

SOURCE_WEB_DIR="/home/damp/web/pages/subapp/sub-ind"

# 复制以damp开头且包含ind的jar文件到当前目录

cp "$SOURCE_DIR"/damp*ind*.jar "$TARGET_IND_DIR"

echo "后端包复制成功"

# 复制前端包

cp -rf "$SOURCE_WEB_DIR"/* "$TARGET_WEB_DIR"

echo "前端包复制成功"

# 返回到根目录,以便打包

cd "$BASE_DIR" || exit

# 打包当前创建的目录为 .tar.gz 文件

TAR_FILE="bushu_${CURRENT_TIME}.tar.gz"

tar -czvf "$TAR_FILE" "bushu_$CURRENT_TIME"

# 获取当前路径并输出完整的打包文件路径

FULL_PATH="$(pwd)/$TAR_FILE"

echo "已将目录 $CURRENT_TIME 打包为文件: $FULL_PATH"

# 打包完成后返回到根目录

echo "打包文件父目录: $BASE_DIR"

【2】项目运行脚本案例

(1)service.sh

#!/usr/bin/env bash

source /etc/profile

source ~/.bash_profile

projectName=$2

skywalking_service_ip=$3

current=`date "+%Y%m%d%H%M%S"`

skywalking_agent_dir="./skywalking/agent-msp/agent8.4"

# 脚本运行目录的父目录

serviceDir=$(cd $(dirname $0)/..; pwd)

logs="$serviceDir/logs"

# 进入脚本目录

cd $(dirname $0)

port=`cat ../conf/bootstrap.yml | grep "port" | cut -c 9-`

if [[ ${#port[@]} == 0 ]]; then

echo "未找到端口"

exit 1

elif [[ ${#port[@]} > 1 ]]; then

echo "找到多个端口 $port"

exit 1

fi

health_url="http://127.0.0.1:$port/actuator/health"

up_url="http://127.0.0.1:$port/actuator/serviceregistry?status=UP"

down_url="http://127.0.0.1:$port/actuator/serviceregistry?status=DOWN"

# 生成启动文件

if [ -n "$skywalking_service_ip" ]; then

echo "sh ./service.sh start $projectName $skywalking_service_ip" > start.sh

echo "sh ./service.sh stop $projectName $skywalking_service_ip" > stop.sh

echo "sh ./service.sh restart $projectName $skywalking_service_ip" > restart.sh

else

echo "sh ./service.sh start $projectName" > start.sh

echo "sh ./service.sh stop $projectName" > stop.sh

echo "sh ./service.sh restart $projectName" > restart.sh

fi

chmod +x start.sh

chmod +x stop.sh

chmod +x restart.sh

#if [ -n "$skywalking_service_ip" ]; then

# if [[ $target =~ "dev" ]]; then

# skywalking_service_ip="10.99.137.136:11800"

# else

# skywalking_service_ip="12.99.76.69:11800"

# fi

#fi

start() {

pid=`ps -ef | grep 'java' | grep $projectName | grep $port | awk '{print $2}'`

if [ -n "$pid" ]; then

echo "服务已存在,请停止后再启动"

exit 1

fi

portLock=`netstat -untlp | awk '{print $4}' | grep ":$port$"`

if [ -n "$portLock" ]; then

echo "端口$port被占用,请停止占用端口的进程或者更换端口"

exit 1

fi

mkdir -p "$logs/gc"

JAVA_PATH="../../../jdk/jre/bin/java"

if [ -f javaPath.txt ]; then

JAVA_PATH=`cat javaPath.txt`

fi

JAVA_OPTS=""

if [ -f jvmOpts.txt ]; then

jvmOpts=`cat jvmOpts.txt`

JAVA_OPTS="$JAVA_OPTS $jvmOpts"

else

JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:SurvivorRatio=8"

fi

javaVersion=`echo $( $JAVA_PATH -version 2>&1 |awk 'NR==1{gsub(/"/,"");print $3}')`

if [[ $javaVersion == 11* ]]; then

JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:file=$logs/gc/gc-$current.log:time,uptime,level,tags"

else

JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$logs/gc/gc-$current.log"

fi

JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump"

# JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=$target -Dserver.port=$port"

JAVA_OPTS="$JAVA_OPTS -Dserver.port=$port"

JAVA_AGENT_OPTS=""

# -javaagent:/home/cloud/iast_agent.jar

# 如果为sit环境且存在iast的jar包,则在启动参数中加入调用iast_agent.jar的命令

# case $target in

# sit* | uat*)

# if [ -x "/home/cloud/iast_agent.jar" ]; then

# JAVA_AGENT_OPTS="$JAVA_AGENT_OPTS -javaagent:/home/cloud/iast_agent.jar"

# fi

# ;;

# *)

# ;;

# esac

if [ -n "$skywalking_service_ip" ]; then

JAVA_AGENT_OPTS="$JAVA_AGENT_OPTS -javaagent:$skywalking_agent_dir/skywalking-agent.jar"

JAVA_OPTS="$JAVA_OPTS -Dskywalking.agent.service_name=$projectName -Dskywalking.collector.backend_service=$skywalking_service_ip"

fi

nohup $JAVA_PATH $JAVA_AGENT_OPTS $JAVA_OPTS -cp ../conf/:../../../driver/*:../../../ext/*:../lib/* com.hzyatop.xingye.Application --spring.config.additional-location=../../../conf/bootstrap.yml > /dev/null 2>&1 &

sleep 5

for ((i=0;i<90;i++))

do

curl -s -X GET ${health_url} > health

health=`cat health | grep status | grep UP`

if [ ${#health} -gt 10 ]; then

break

else

pidNew=`ps -ef | grep 'java' | grep $projectName | grep $port | awk '{print $2}'`

if [ -n "$pidNew" ]; then

echo "Waiting for start ..."

sleep 3

else

echo "Deploy Fail,项目启动失败,请到项目日志目录查看启动日志,默认日志目录为$serviceDir/logs"

exit 1

fi

fi

done

sleep 5

curl -s -X POST -H "Content-Type:application/vnd.spring-boot.actuator.v2+json;charset=UTF-8" $up_url

sleep 5

if [ ${#health} -gt 10 ]; then

echo "Deploy Success"

exit 0

else

echo "Deploy Fail"

exit 1

fi

}

stop() {

pid=`ps -ef | grep 'java' | grep $projectName | grep $port | awk '{print $2}'`

if [ -n "$pid" ]; then

echo "正在下线服务..."

else

echo "服务已下线"

return 0

fi

# curl -s -X POST -H "Content-Type:application/vnd.spring-boot.actuator.v2+json;charset=UTF-8" $down_url

# if [ -n "$skywalking_service_ip" ]; then

# sleep 60

# else

# sleep 30

# fi

echo "尝试 kill -15 $pid 旧服务"

kill -15 $pid

sleep 5

for ((i=0;i<20;i++))

do

pid=`ps -ef | grep 'java' | grep $projectName | grep $port | awk '{print $2}'`

if [ -n "$pid" ];

then sleep 1

else

echo "服务下线成功"

return 0

fi

done

pid=`ps -ef | grep 'java' | grep $projectName | grep $port | awk '{print $2}'`

if [ -n "$pid" ]; then

echo "尝试 kill -9 $pid 旧服务"

kill -9 $pid

sleep 5

fi

pidA=`ps -ef | grep 'java' | grep $projectName | grep $port | awk '{print $2}'`

if [ -n "$pidA" ]; then

echo "停止旧服务失败,请手工停止"

exit 1

fi

}

help(){

echo "---------------sh service.sh [options] [project] [env] [port] [skywalking_service_ip]----------------"

echo "---------------options: start | stop | restart ------------------------------------------------------"

echo "---------------project: 工程名称,jar包前缀 ---------------------------------------------------------"

echo "---------------env:环境 dev | sit | uat | prod-----------------------------------------------------"

echo "---------------skywalking_service_ip:IP地址 --------------------------------------------------------"

}

# 操作命令

case "$1" in

"start")

start

;;

"stop")

stop

;;

"restart")

stop

start

;;

*)

help

;;

esac

(2)stop.sh

sh ./service.sh stop damp-xingye-ind

(3)start.sh

sh ./service.sh start damp-xingye-ind

(4)restart.sh

sh ./service.sh restart damp-xingye-ind

相关创意

Q开胯对生孩子有好处吗?
beat365手机中文官方网站

Q开胯对生孩子有好处吗?

📅 08-21 👁️ 2710
张杰飙高音是什么歌?张杰是否是国内男声最高音
365bet平台总代

张杰飙高音是什么歌?张杰是否是国内男声最高音

📅 10-09 👁️ 3138
备案账号密码的实际作用是什么?
beat365投注网站

备案账号密码的实际作用是什么?

📅 08-21 👁️ 6887
2024巫师3年度版在steam平台上是多少钱?
beat365手机中文官方网站

2024巫师3年度版在steam平台上是多少钱?

📅 08-04 👁️ 2529
逆水寒截图快捷键在哪(逆水寒遇见戒指属性加的是什么)
beat365手机中文官方网站

逆水寒截图快捷键在哪(逆水寒遇见戒指属性加的是什么)

📅 08-18 👁️ 1683
MTK Audio Dump抓取方法
365bet平台总代

MTK Audio Dump抓取方法

📅 09-30 👁️ 523
猫科动物战斗力那么强,为什么没有将犬科动物淘汰出局?
竹笛为什么要贴笛膜 最后设计者是怎样想的 (竹笛为什么要缠线)
beat365手机中文官方网站

竹笛为什么要贴笛膜 最后设计者是怎样想的 (竹笛为什么要缠线)

📅 10-28 👁️ 1488