一、Shell 的基础认识
- 作用:
- 接受用户输入的命令,并将其传递给操作系统执行。
- 提供了一种方便的方式来管理文件、运行程序、配置系统等。
- 常见的 Shell:
- Bash(Bourne Again Shell):在大多数 Linux 发行版和 macOS 中广泛使用。
- Zsh:功能强大且可高度定制的 Shell。
- PowerShell:在 Windows 系统中使用。
- 基本概念:
- 命令:执行特定任务的指令,如
ls
(列出目录内容)、cd
(切换目录)等。 - 选项:用于修改命令的行为,通常以
-
或--
开头。例如,ls -l
以长格式列出目录内容。 - 参数:提供给命令的额外信息。例如,
cd /home/user
中的/home/user
是cd
命令的参数。
- 命令:执行特定任务的指令,如
二、常用命令
文件和目录操作
ls:列出目录内容。
选项:-l
(长格式显示)、-a
(显示隐藏文件)。
cd:切换目录。
示例:cd /home/user
切换到/home/user
目录。
pwd
:显示当前工作目录的路径。
mkdir:创建目录。
示例:mkdir mydir
创建一个名为mydir
的目录。
rm:删除文件或目录。
选项:-r
(递归删除目录)、-f
(强制删除,不提示)。
cp:复制文件或目录。
示例:cp file1 file2
将file1
复制为file2
。
mv:移动或重命名文件或目录。
示例:mv file1 dir1/
将file1
移动到dir1
目录下。
文件查看和编辑
cat:查看文件内容。
示例:cat file.txt
显示file.txt
的内容。
more
和less
:分页查看文件内容。
vi
或vim
、nano
:文本编辑器,用于编辑文件。
系统信息和管理
ps:查看进程状态。
选项:-aux
(显示所有进程的详细信息)。
top
:实时显示系统的资源使用情况和进程信息。
free
:查看系统内存使用情况。
df
:查看磁盘空间使用情况。
kill:终止进程。
示例:kill <进程 ID>
终止指定进程。
网络相关
ping:测试网络连接。
示例:ping www.example.com
测试与www.example.com
的网络连接。
curl
或wget
:用于从网络下载文件。
ifconfig
(Linux)或ipconfig
(Windows):查看网络接口配置信息。
用户和权限管理
useradd
:添加用户。
passwd
:设置用户密码。
chmod:改变文件或目录的权限。
示例:chmod 755 file.txt
设置file.txt
的权限为所有者可读、写、执行,组和其他用户可读、执行。
chown:改变文件或目录的所有者。
示例:chown user:group file.txt
将file.txt
的所有者改为user
,所属组改为group
。
文件搜索和查找
find
:在指定目录下查找文件。
示例:find /path/to/directory -name "file.txt"
在指定目录中查找名为 “file.txt” 的文件。
可以结合各种选项进行更复杂的搜索,如按文件类型、大小、修改时间等进行筛选。
grep
:在文件中搜索特定的模式。
示例:grep "pattern" file.txt
在 “file.txt” 文件中搜索包含 “pattern” 的行。
可以结合正则表达式使用,以实现更强大的搜索功能。
压缩和解压缩
tar
:打包和解包文件。
打包:tar -cvf archive.tar file1 file2 dir1
将文件 “file1”、“file2” 和目录 “dir1” 打包成 “archive.tar”。
解包:tar -xvf archive.tar
解包 “archive.tar”。
可以结合不同的选项实现压缩(如使用-z
选项结合gzip
进行压缩)。
zip
和unzip
:用于压缩和解压缩 ZIP 文件。
压缩:zip archive.zip file1 file2
将文件 “file1” 和 “file2” 压缩成 “archive.zip”。
解压缩:unzip archive.zip
解压缩 “archive.zip”。
进程管理
jobs
:查看当前终端会话中的后台作业。
fg
:将后台作业调到前台运行。
示例:fg %job_number
将指定编号的后台作业调到前台。
bg
:将暂停的作业放到后台继续运行。
环境变量和配置
echo $VAR_NAME
:显示环境变量的值。
例如,echo $PATH
显示系统路径环境变量。
export VAR_NAME=value
:设置环境变量。
. script.sh
:在当前 Shell 会话中执行一个脚本文件,并将脚本中的环境变量和函数等引入当前会话。
文件比较
diff:比较两个文件的差异。
示例:diff file1.txt file2.txt
会显示两个文件内容的不同之处。
远程登录和文件传输
ssh:用于远程登录到其他服务器。
示例:ssh user@remote_server
以用户 “user” 登录到 “remote_server”。
scp:在本地和远程服务器之间安全地复制文件。
例如,scp local_file user@remote_server:/remote/directory
将本地文件复制到远程服务器的指定目录。
磁盘管理
du
:显示文件或目录所占用的磁盘空间大小。
选项:-h
以人类可读的格式显示大小,-s
只显示总大小。
mount
和umount
:用于挂载和卸载文件系统。
系统监控
uptime
:显示系统的运行时间、登录用户数和平均负载。
vmstat
:提供虚拟内存、进程、CPU 等系统资源的统计信息。
命令别名和快捷方式
alias
:为常用命令创建别名。
例如,alias ll='ls -l'
创建一个名为 “ll” 的别名,等同于 “ls -l”。
unalias
:删除别名。
管道和重定向
|
:管道符号,将一个命令的输出作为另一个命令的输入。
例如,ls | grep "pattern"
在 “ls” 的输出结果中查找包含特定模式的内容。
>
和>>
:重定向输出。
>
将命令的输出重定向到一个文件,如果文件已存在则覆盖。
>>
将命令的输出追加到一个文件。
<
:重定向输入,将一个文件的内容作为命令的输入。
文本处理
sed
:流编辑器,可用于对文本进行各种编辑操作。
例如,sed 's/old/new/g' file.txt
可以将文件 “file.txt” 中的所有 “old” 替换为 “new”。
awk
:一种强大的文本处理工具。
可以进行数据提取、计算等操作。例如,awk '{print $1}' file.txt
可以打印文件 “file.txt” 的每一行的第一个字段。
软件包管理(特定于某些系统)
在基于 Debian 的系统(如 Ubuntu)中:
apt-get:用于安装、更新和删除软件包。
例如,apt-get install package_name
安装一个软件包。
在基于 Red Hat 的系统中:
yum:类似的软件包管理工具。
yum install package_name
安装软件包。
系统性能分析
iotop
:显示进程的 I/O 使用情况。
htop
:一个交互式的进程查看器,比传统的 “top” 命令更直观。
文件属性修改
touch
:可以创建一个新的空文件,或者更新现有文件的时间戳。
例如,touch newfile.txt
创建一个名为 “newfile.txt” 的空文件。
chattr
:改变文件的属性。
可以设置文件为不可修改、不可删除等属性。
特殊字符和转义
\
:转义字符,用于对特殊字符进行转义。
例如,在文件名中包含空格时,可以使用转义字符来处理,如ls\ file\ with\ space.txt
。
~
:代表用户的主目录。
例如,cd ~
可以切换到当前用户的主目录。
文本排序和去重
sort
:对文本文件的内容进行排序。
示例:sort file.txt
对 “file.txt” 的内容进行排序。可以使用各种选项来指定排序规则,如按数字大小排序、逆序排序等。
uniq
:去除文本文件中的重复行。
通常与sort
结合使用,先排序再去重效果更好。例如,sort file.txt | uniq
。
系统资源限制
ulimit:限制用户或进程的资源使用。
例如,可以限制进程的最大打开文件数、最大栈大小等。如ulimit -n 1024
将当前用户的最大打开文件数设置为 1024。
系统服务管理(特定于某些系统)
在 Systemd 系统(如大多数现代 Linux 发行版)中:
systemctl:用于管理系统服务。
systemctl start service_name
启动一个服务。
systemctl stop service_name
停止一个服务。
systemctl status service_name
查看一个服务的状态。
在 init.d 系统中:
/etc/init.d/service_name start/stop/restart
等命令来管理服务。
文本格式化
column:将文本以列的形式进行格式化显示。
可以将多行文本转换为整齐的列格式,方便查看。
执行定时任务
crontab:用于设置定时任务。
用户可以编辑自己的定时任务列表,指定在特定时间执行特定的命令或脚本。
例如,0 0 * * * /path/to/script.sh
表示每天零点执行 “script.sh” 脚本。
文本统计
wc(word count):统计文件中的行数、单词数和字符数。
示例:wc file.txt
会显示文件的行数、单词数和字符数。可以使用选项指定只显示其中一项,如-l
只显示行数。
字符串操作
expr
:可以进行一些简单的数学运算和字符串操作。
例如,expr 5 + 3
计算 5 加 3 的结果。也可以进行字符串长度计算等操作,如expr length "hello"
。
tr
:用于转换或删除字符。
例如,tr 'a-z' 'A-Z' < file.txt
可以将文件中的小写字母转换为大写字母。
环境切换
su(switch user):切换用户身份。
例如,su - username
切换到用户 “username”,并加载该用户的环境变量。
文件硬链接和软链接
ln:创建硬链接或软链接。
创建硬链接:ln file1 file2
创建文件 “file1” 的硬链接 “file2”,两个文件指向相同的磁盘存储位置。
创建软链接(符号链接):ln -s file1 file2
创建文件 “file1” 的软链接 “file2”,软链接类似于快捷方式。
进程优先级调整
nice 和 renice:调整进程的优先级。
nice -n priority command
以指定的优先级运行一个命令。优先级数值越低,优先级越高。
renice priority pid
调整正在运行的进程的优先级,其中 “pid” 是进程 ID。
文件校验
md5sum 和 sha1sum
等:计算文件的校验和。
例如,md5sum file.txt
会计算 “file.txt” 的 MD5 校验和并输出。可以用于验证文件的完整性。
查找特定类型文件
find命令的特定用法:
find /path -type f -name "*.txt"
:在指定路径下查找所有扩展名为 “.txt” 的文件。
-type
参数可以指定查找的文件类型,如普通文件(f)、目录(d)等。
磁盘分区和挂载信息查看
fdisk -l
:列出系统中的磁盘分区信息。
mount
命令无参数执行时,可以查看当前已挂载的文件系统信息。
环境变量设置高级用法
export -p
:以可输出的格式显示所有的环境变量。
可以在 Shell 脚本中使用export
来设置环境变量,使其在脚本执行的子进程中也可见。
批处理命令执行
xargs:将标准输入转换为命令行参数,以便对大量输入进行批处理操作。
例如,ls | xargs rm
可以删除当前目录下所有由 “ls” 列出的文件,但使用时要非常小心。
历史命令操作
history命令的高级用法:
history | grep command_pattern
:查找历史命令中包含特定模式的命令。
!n
:执行历史命令列表中的第 n 条命令。
!!
:重复执行上一条命令。
查看文件编码
file -i file.txt
:可以查看文件的编码格式以及其他信息。
监控网络连接
netstat:显示网络连接、路由表、接口状态等信息。
例如,netstat -an
可以查看所有的网络连接和监听端口。
字符串分割和提取
cut:从文本行中提取特定的字段。
例如,cut -d ':' -f 1 file.txt
可以从以 “:” 分隔的文件中提取第一列的内容。
临时文件创建
mktemp
:创建一个临时文件或目录,并确保其名称是唯一的。
文件权限递归修改
chmod -R
和chown -R
:可以递归地修改目录及其下所有文件的权限或所有者。
执行远程命令(通过 SSH)
ssh user@remote_host command
:在远程主机上执行特定命令并返回结果。
文件内容随机排序
shuf file.txt
:对文件的内容进行随机排序。
其他实用命令
hostname
:显示主机名。
date
:显示当前日期和时间。
cal
:显示日历。
history
:查看命令历史记录。
man
:查看命令的手册页,获取详细的命令使用说明。
例如,man ls
查看 “ls” 命令的手册。