命令

bash(Bourne-Again Shell)中,命令扮演着至关重要的角色,它们允许用户与操作系统进行交互,执行各种任务和管理系统资源。以下是bash中命令的主要作用以及为什么需要它们:

  1. 运行程序:bash命令可以通过给定程序的路径来运行可执行文件,如编译后的C程序或脚本。这使得用户能够执行各种应用程序,无论是系统自带的还是用户自己编写的。
  2. 文件与目录管理:bash提供了丰富的命令来创建、复制、删除、查看、编辑、移动、重命名和搜索文件或目录。这些命令使用户能够轻松地管理他们的文件系统,无论是简单的文件操作还是复杂的目录结构管理。
  3. 进程管理:bash命令可以启动、停止和管理正在运行的进程。用户可以使用这些命令来查看进程列表、启动后台进程、终止不需要的进程等。这对于系统管理员和高级用户来说尤其重要,因为他们需要监控和控制系统的运行情况。
  4. 系统管理与配置:bash命令还可以用于系统管理和配置任务,如设置系统变量、修改系统配置文件、安装软件包、配置网络等。这些命令使得用户能够根据自己的需求来定制和优化他们的系统。
  5. 用户与权限管理:bash命令还可以用于设置文件和目录的权限,以及管理用户账户和组。这有助于保护系统的安全性,确保只有授权的用户才能访问和修改系统资源。

为什么需要bash命令呢?主要有以下几个原因:

  1. 交互性:bash命令提供了一种用户友好的方式来与操作系统进行交互。用户可以通过输入命令来执行各种任务,而无需深入了解操作系统的底层机制。
  2. 自动化:bash支持编写脚本,这使得用户可以自动化执行一系列命令和操作。这对于需要重复执行的任务或复杂的批处理操作来说非常有用。
  3. 灵活性:bash命令语法非常灵活,用户可以根据需要组合不同的命令和选项来实现各种复杂的功能。此外,bash还支持使用管道(|)将一个命令的输出作为另一个命令的输入,从而进一步增加了其灵活性。
  4. 可移植性:bash是一种跨平台的shell,可以在多种操作系统上运行。这使得用户可以在不同的系统上使用相同的命令和脚本,从而提高了工作效率和可移植性。

总之,bash命令在Linux和其他类Unix操作系统中扮演着至关重要的角色,它们为用户提供了与操作系统进行交互、执行各种任务和管理系统资源的强大工具。

内建命令***外部命令管道重定向条件语句循环语句函数变量环境变量文件操作目录操作进程管理系统管理用户管理权限管理网络操作文本处理

  1. 内建命令:内建命令是bash内建的命令,它们是直接内嵌在bash中,不需要外部程序来执行。内建命令包括cdpwdlsechocatheadtailgrepsortuniqwc等。这些命令通常用于执行简单的任务,如改变目录、查看当前目录、列出目录内容、打印文本、合并文本文件、查看文件开头、查看文件结尾、查找文本、排序文本、删除重复行、统计文本行数等。
  2. 外部命令:外部命令是使用外部程序来执行的命令。这些命令通常用于执行复杂的任务,如编译C程序、运行Python脚本、执行SQL查询、执行网络请求等。

输入与输出I/O(内建)

echo

printf

read

文件系统命令(内建)

cd

pwd

pushd, popd, dirs

变量命令(内建)

let

eval

set

unset

export

export [-fn] [-p] [name[=value]]

Mark each name to be passed to child processes in the environment. If the -f option is supplied, the names refer to shell functions; otherwise the names refer to shell variables. The -n option means to no longer mark each name for export. If no names are supplied, or if the -p option is given, a list of names of all exported variables is displayed. The -p option displays output in a form that may be reused as input. If a variable name is followed by =value, the value of the variable is set to value.

The return status is zero unless an invalid option is supplied, one of the names is not a valid shell variable name, or -f is supplied with a name that is not a shell function.

readonly

getopts

脚本行为控制命令(内建)

source, .

在 Bash中,source 命令用于在当前 shell 会话中读取并执行指定文件中的命令。当使用 source 命令时,脚本中定义的任何变量或函数都会在执行该脚本的当前Shell会话中保持有效。

source 命令的常用别名是 .(点)。因此,以下两个命令在功能上是相同的:

source script.sh
. script.sh

这两个命令都会在当前 shell 会话中执行 script.sh 文件中的命令。

示例

假设有一个名为 set_variables.sh 的脚本,内容如下:

#!/bin/bash
MY_VARIABLE="Hello, World!"
echo "Variable set inside script: $MY_VARIABLE"

如果您直接运行此脚本(例如,通过 bash set_variables.sh),您会看到输出,但之后尝试在 shell 中访问 $MY_VARIABLE 将不会成功,因为它是在子 shell 中定义的。

但是,如果您使用 source 命令(或 .)来运行此脚本,则 $MY_VARIABLE 将在当前 shell 会话中定义,并可以在之后访问:

source set_variables.sh
echo "Variable accessed outside script: $MY_VARIABLE"

这将输出:

Variable set inside script: Hello, World!
Variable accessed outside script: Hello, World!

exit

exec

shopt

caller

其他命令(内建)

true

false

type [cmd]

hash [cmds]

bind

help

注记

基础命令

ls

cat,tac

rev

cp

mv

rm

rmdir

mkdir

chmod

chattr

ln

man,info

注意

  1. 选项 -v 还可以根据文件名的大小写前缀来排序。
  2. 点文件是以 . 打头的文件,如 ~/.Xdefaults。这样的文件名不显示在默认的 ls 结果中(可以使用 ls -a 使其显示),也不会被 rm -rf * 所删除。点文件通常作为初始化或配置文件出现在用户家目录中。
  3. 这个特性可能尚未被你用的 ext2/ext3 文件系统版本所实现。请检查你所用的 Linux 发行版的文档。

复杂命令

find

xargs

xargs 是一个在 Unix 和 Linux 系统中非常有用的命令,它用于从标准输入(stdin)读取参数,并将它们作为参数传递给另一个命令。这对于处理从其他命令(如 findgrep -l 等)生成的输出列表特别有用。以下是 xargs 命令的详细用法和示例。

基本语法

xargs [options] [command [initial-arguments]]

常用选项(options)

  • -a file:从文件中读取参数,而不是从标准输入。
  • -d delim:指定输入项之间的分隔符(默认为换行符)。
  • -I replace-str:在每个参数前加上指定的替换字符串,并在传递给命令之前用参数替换它。
  • -L number:从标准输入读取指定数量的行作为参数。
  • -n number:指定每个命令行上应该使用多少个参数(默认为尽可能多)。
  • -P number:并行运行指定的命令次数。
  • -s number:指定命令行的最大长度(以字节为单位)。
  • --max-procs=number:与 -P 相同,但使用长格式选项名。
  • --max-args=number:与 -n 相同,但使用长格式选项名。
  • --max-chars=number:与 -s 相同,但使用长格式选项名。
  • --verbose:显示传递给命令的参数。
  • --null:将输入项视为以 null 字符分隔,而不是换行符。这常与 find -print0 结合使用。
  • --replace={}:与 -I 相同,但使用长格式选项名和不同的占位符。

示例

  1. 使用 findxargs 删除所有 .txt 文件
find /path/to/search -type f -name "*.txt" -print0 | xargs -0 rm -f

注意这里使用了 -print0-0 选项,它们确保文件名中的空格、换行符和其他特殊字符不会导致问题。

  1. 使用 grepxargs 查找并编辑文件

假设你想查找包含某个字符串的所有文件,并使用 vim 编辑它们:

grep -rl 'pattern-to-search-for' /path/to/search | xargs vim

这里 -r 选项使 grep 递归搜索目录,-l 选项仅输出匹配的文件名。

  1. 限制每次传递给命令的参数数量

假设你有一个命令,它每次只能处理有限数量的参数,你可以使用 -n 选项来限制 xargs 传递的参数数量:

echo -e "file1\nfile2\nfile3\nfile4" | xargs -n 2 command_that_needs_two_args

在这个例子中,command_that_needs_two_args 将被调用两次,一次带有 file1file2,另一次带有 file3file4

  1. 并行运行命令

使用 -P 选项,你可以让 xargs 并行运行指定的命令:

echo -e "file1\nfile2\nfile3" | xargs -P 2 some_command

在这个例子中,some_command 将并行运行两次(或更多次,直到所有文件都被处理),但一次不会超过两个实例。

expr

注记

时间/日期和计时命令

date

zdump

time

touch

at

batch

cal

sleep

unsleep

hwclock,clock

文本处理命令

sort

tsort

uniq

expand,unexpand

cut

paste

join

tail

grep

look

sed

awk

wc

tr

fold

fmt

col

column

colrm

nl

pr

gettext

msgfmt

iconv

recode

Tex,gs

texexec

enscript

groff,tbl,eqn

lex,yacc

注记

文件与归档命令

归档命令

tar

shar

ar

rpm

cpio

rpm2cpio

pax

压缩命令

gzip

bzip2

compress,uncompress

sq

zip,unzip

unarc,unarj,unrar

lzma,unlzma,lzcat

xz,unxz,xzcat

文件信息命令

file

which

whereis

whatis

vdir

locate,slocate

getfacl,setfacl

strings

比较命令

diff,pathc

diff3,merge

sdiff

cmp

comm

实用工具

basename

dirname

split, csplit

加密与解密命令

sum, cksum, md5sum, sha1sum

uuencode

uudecode

mimencode, mmencode

crypt

openssl

shred

杂项命令

mktemp

make

install

dos2unix,unix2dos

ptx

more,less

注记

通信命令

信息和统计命令

host

ipcalc

nslookup

dig

traceroute

ping

whois

finger

chfn

vrfy

远程主机访问命令

sx, rx

sz, rz

ftp

uucp, uux, cu

telnet

wget

lynx

rlogin

rsh

rcp

rsync

ssh

scp

本地网络命令

write

netconfig

邮件命令

mail

mailto

mailstats

vacation

注记

终端控制命令

tput

infocmp

reset

clear

resize

script

数学命令

factor

bc

dc

awk

杂项命令

jot, seq

getopt

run-parts

yes

printenv

lp

tee

mkfifo

pathchk

dd

od

hexdump

objdump

mcookie

units

m4

xmessage

zenity

doexec

dialog

sox

系统管理命令

用户和用户组

users

groups

chown, chgrp

useradd, userdel

usermod

groupmod

id

lid

who

w

logname

su

sudo

passwd

ac

last

newgrp

终端命令

tty

stty

setterm

tset

setserial

getty, agetty

mesg

wall

信息和统计命令

uname

arch

lastcomm

lastlog

lsof

strace

ltrace

nc

free

procinfo

lsdev

du

df

dmesg

stat

vmstat

uptime

hostname

hostid

sar

readelf

size

系统日志命令

logger

logrotate

任务控制命令

ps

pgrep, pkill

pstree

top

nice

nohup

pidof

fuser

cron

进程控制和启动命令

init

telinit

runlevel

halt, shutdown, reboot

service

网络命令

nmap

ifconfig

netstat

iwconfig

ip

route

iptables

chkconfig

tcpdump

文件系统命令

mount

umount

gnome-mount

sync

losetup

mkswap

swapon, swapoff

mke2fs

mkdosfs

tune2fs

dumpe2fs

hdparm

fdisk

fsck, e2fsck, debugfs

badblocks

lsusb, usbmodules

lspci

mkbootdisk

mkisofs

chroot

lockfile

flock

mknod

MAKEDEV

tmpwatch

备份命令

dump, restore

fdformat

系统资源管理命令

ulimit

quota

setquota

umask

rdev

模块管理命令

lsmod

insmod

rmmod

modprobe

depmod

modinfo

杂项命令

env

ldd

watch

strip

nm

xrandr

rdist