大多数的Linux和Unix系统、及其他类Unix系统中,Shell是用户与操作系统内核交互的主要方式。作为一种强大的命令行解释器,它也支持编程功能,用户可以写脚本来处理各种任务。无论你是新手还是专业人士,掌握Shell命令都是必不可少的技能。在这篇文章中,我将逐个解读和展示Shell脚本中最常用的100个命令,并为每个命令提供实际的例子。
以下是在Linux系统中操作文件的一些常用命令:
ls /home
cd /home/user/Documents
pwd
cat /etc/passwd
more /var/log/syslog
less /var/log/syslog
touch /home/user/newfile.txt
cp /home/user/file.txt /home/user/Documents
mv /home/user/file.txt /home/user/Documents/newfile.txt
rm /home/user/unwantedfile.txt
find / -name "*.log"
grep "error" /var/log/syslog
head -n 10 /var/log/syslog
tail -n 20 /var/log/syslog
sort /etc/passwd
wc /var/log/syslog
cut -d: -f1 /etc/passwd
nano /home/user/file.txt
vi /home/user/file.txt
emacs /home/user/file.txt
paste file1.txt file2.txt
以下命令可以帮助你搜索文件或文本:
find / -name "*.log"
grep "error" /var/log/syslog
locate myFile.txt
which java
ack "your_search_term"
ag "your_search_term"
whereis ls
type pwd
apropos partition
alias l='ls -al'
以下是在Linux系统中操作目录的一些常用命令:
mkdir /home/user/new_directory
rmdir /home/user/empty_directory
tree /home/user/
du -sh /home/user/Documents
df -h
在Linux系统中,文件和目录的访问可以通过权限操作命令进行控制:
chmod 755 /home/user/file.txt
表示设置文件的主用户有读,写和执行权限(rwx=7),同组的用户和其他用户有读和执行权限(rx=5)。
chown newuser:newgroup /home/user/file.txt
表示将/home/user/file.txt的所有者更改为newuser,所属的组更改为newgroup。
chgrp newgroup /home/user/file.txt
表示将/home/user/file.txt的所属的组更改为newgroup。
以下是在Linux系统中与网络相关的一些常用命令:
ping www.google.com
ifconfig eth0
netstat -ntlp
ssh user@remote_host
scp /path/to/file user@remote_host:/remote/path/
curl www.google.com
telnet remote_host 23
nslookup www.google.com
ftp ftp_server
wget www.google.com -o google.html
以下是在Linux系统中管理进程和控制系统的一些常用命令:
ps aux
kill 1234
shutdown -h now
在编写或处理文本文件时,下列命令可以帮助你完成各种复杂任务:
echo "Hello, World!"
printf "Name: %s\nAge: %d\n" "Alice" 20
echo "Hello, World!" | sed 's/World/Shell/g'
echo -e "name\tage\nAlice\t20\nBob\t22" | awk '{if ($2 >=21) print $1}'
以下命令主要用于管理和操作文件压缩及解压:
tar -cvf archive.tar folder
gzip file
gunzip file.gz
zip -r archive.zip folder
unzip archive.zip
管理和查看磁盘使用情况:
df -h
du -sh folder
sudo fdisk -l
sudo hdparm -i /dev/sda
在Debian,Ubuntu及其他基于Debian的系统中,可以使用以下命令进行软件包管理:
sudo apt-get install package
sudo dpkg -i package.deb
在RedHat, CentOS及其他基于RPM的系统中,可以使用以下命令进行软件包管理:
sudo yum install package
sudo rpm -i package.rpm
查看和管理正在运行的进程:
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]
htop
pkill process_name
查看或设置环境变量:
输入:env
输出:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
PWD=/home/user
输入:set
输出:展示所环境变量以及函数
输入:
export VARName="Value"
echo $VARName
输出结果:
Value
有时,你可能想要查看有关你的系统或硬件的信息。以下命令可以帮助你做到这一点:
输入:
uname
输出:
Linux
输入:
hostname
输出:
myhostname
输入:
dmesg | less
输入: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 -h
输出:
total used free shared buff/cache available
Mem: 3.8G 487M 1.9G 122M 1.4G 3.0G
Swap: 0B 0B 0B
输入:uptime
输出: 16:14:30 up 43 min, 1 user, load average: 0.34, 0.36, 0.40
输入:last reboot
输入: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
输出: user tty1 2022-01-28 14:36
输入:id
输出:uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
在一些特殊情况下,你可能需要进行一些系统控制操作。以下命令可以帮助你做到这一点:
输入:sudo halt
输入:sudo reboot
关闭系统:sudo shutdown -h now
重启系统:sudo shutdown -r now
更改密码:passwd
Linux提供了多种命令行文本编辑器。以下这些可能是你需要知道的:
输入:whatis ls
输出: ls (1) - list directory contents
输入:whereis ls
输出: ls: /bin/ls /usr/share/man/man1/ls.1.gz
输入:which ls
输出:/bin/ls
输入:whoami
输出:user
输入:date
输出: Tue Dec 21 02:16:12 UTC 2021
输入: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
输入:watch -n 2 date
解释:watch`命令会每2秒运行一次`date`命令,并实时显示输出
大多数人学习Shell脚本的最大动力是提高效率。使用Shell脚本,你可以编写一个任务,然后让计算机去做,而你可以去忙其他的事情;你可以编写一个任务,让计算机重复执行,而不需要你每次在命令行手动输入;你可以更灵活地处理任务,比如管理用户,管理程序等。就这样,Shell脚本赋予你控制计算机的能力,在你的指尖下,一切尽在掌握。
在未来,实践未知,探索无限,最好的方式是动手试试看,愿这完整的100个命令清单能够成为你在Linux世界里的指南针!掌握Shell命令并利用它们来编写脚本能够极大地提升你的工作效率,无论是进行系统管理还是进行程序设计,这都是一种强大的工具。善用它,享受编程带给你的乐趣吧!
hell脚本是一个命令语言,面向的是操作系统执行。如果写过shell脚本的话,应该体会过编写过程的痛苦。因为shell并不是一个编程语言,并不支持常见的数组,JSON等数据结构,也不支持面向对象编程的开发方法,因此对开发人员很不友好。
目前针对这种情况,大家一般会用shell调用node执行JS脚本,真正的处理逻辑放在JS脚本中处理。现在谷歌推出了 ZX NPM包,它能够用JS编写shell脚本。
那如何使用呢?
npm install -g zx
安装完后,在终端中输入 zx 命令检查安装是否成功。
新建zx脚本文件:test.mjs
#!/usr/bin/env zx
const branch=await $`git branch --show-current`
console.log(`Current branch: ${branch}`)
第一行是指定脚本的执行器。
$ 是内置的函数,能够执行命令并配合 await 返回执行结果。其他的写法都和JS毫无差别。
zx ./test.mjs
或者:
chmod +x ./test.mjs
./test.mjs
控制台就会输出当前的分支。
上面只是小试牛刀,zx 的强大远不止如此。由于 zx 在内部实现了 Bash 的解释器,所以可以执行全部的shell命令。另外 zx 还内置很多nodejs模块,比如 fs, os,fetch等。所以可以直接在脚本中使用这些模块。
另外作为TS编写的库,全部的JS语法都能够支持。包括但不限于 数组,Promise,class等。
下面再举一个例子:
let resp=await fetch('http://wttr.in')
if (resp.ok) {
console.log(await resp.text())
}
let hosts=[...]
await Promise.all(hosts.map(host=>
$`rsync -azP ./src ${host}:/var/www`
))
try {
await $`exit 1`
} catch (p) {
console.log(`Exit code: ${p.exitCode}`)
console.log(`Error: ${p.stderr}`)
}
总结一下,zx 的最大优点是结合了Bash和JavaScript,解决了shell脚本复杂逻辑编程的问题。同时也让对shell不熟悉的开发者也能用JS完成shell脚本的开发,而且更加灵活高效。
如果你还有更多问题,可以参考NPM仓库 zx 包的介绍,或者访问其github地址。
欢迎帮忙点赞,评论,转发~
*请认真填写需求信息,我们会在24小时内与您取得联系。