- 浏览: 820726 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yuhanwm910731:
我现在需要实现复选(非级联选择)的树形下拉菜单,麻烦发给我一份 ...
extjs3.X支持树型的下拉控件 -
shine1200:
“所以咱们现在设置的虚拟路径“/message/upload/ ...
weblogic虚拟路径的配置和使用(2) -
icefireforest:
Fangrn 写道jx_dream 写道楼主,我最近在做树形下 ...
extjs3.X支持树型的下拉控件 -
cloudfile:
谢谢分享!
c++库c#调用开发时需要注意的一点 -
xuweilinbegin:
我也要一份哦:xuweilin15353@163.com,谢谢 ...
extjs3.X支持树型的下拉控件
十二、输入输出重定向及管道
1 什么是过滤器 必须有一个输入和输出
2 什么是标准输入输出
3 怎样改变标准输出
4 输出的种类
5 改变输入
6 管道
linux过滤器:
linux工具/命令分为三种:
过滤器
编辑器
交互式工具
标准输入输出与重定向:
输入 过滤器数据来源 标准输入stdin(0):默认是键盘
输出 过滤器数据去向 标准输出stdout(1):默认是终端屏幕
错误输出 报错讯息与标准输出走不同的I/O通道 标准错误输出stderr(2):默认是终端屏幕
重定向 标准输入输出与错误输出,都可以用特定符号改变数据来源和去向
输入重定向: 使用“<”来重定向输入
很多工具都设置其后接文件名为输入源
也有一些过滤需要添加“<”以明确输入源
追加: 使用“<<”让系统将一次键盘的全部输入,先送入虚拟的当前文档,再一次性输入追加到文档尾部
需要一对字母、符号或字符串作为起始终结标识符
选择任意符号作为起始终结标识符
<<EEE 表示直到发现输入EEE时,才退出输入,或按ctrl+d退出 并显示输出
输出重定向: 使用“>”改变数据输出目标
ls -l /etc > listfile
将文件以长模式显示,后写入listfile文件
文件已有内容会被替代
覆盖与追加: 使用“>”进行输出重定向,文件的原内容会被覆盖
ls -l aa.txt > vi.txt
使用“>> ”,可以将输出追加入文件
ls -l aa.txt >> vi.txt
> 标准正确输出重定向、清空文件、创建文件(输出前先清空以前存在的数据)
2> 标准的错误输出重定向 (输出前先清空以前存在的数据)
&>或2>&1 不管正确或错误的输出都全部重定向
>> 追加重定向,不清空之前的数据
错误输出重定向:系统错误与标准输出使用的I/O管道不同
默认情况系统报错显示到终端屏幕上
使用“2>”将报错信息重定向入一个文件
find / -type s 2> /dev/null
使用“2>>”将报错信息追加入一个文件
find / -name passwd 2>> results
管道:
| 将前一个过滤器的输出直接输入到后一个过滤器
ls -l | grep hosts.conf
允许多重管道
管道前过滤器的输出与管道后过滤器的输入数据类型匹配
例子:
ls /dev |wc -l 统计/dev下有多少文件
du -a | sort -n -r 显示所有文件大小,并按从大到小排序
ls -l /etc |grep '^d' 显示/etc文件夹下所有文件夹
dmesg |more 分屏显示内核信息
使用tr加密: tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"'
tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"' < /etc/passwd > abc.txt
tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"' < /etc/passwd | mail -s "for you"
dlp8410@126.com
十三、 linux系统状态检测及进程控制
1 查询当前系统的信息
2 查询当前系统的状态
3 /proc文件系统 查看内核
4 进程的显示
5 控制进程
6 控制台的前台和后台
系统信息的收集:
hostname 显示或设置主机名
uname 显示系统信息
last 显示最近的用户登录
lastlog 显示每个用户的登录情况
系统状态:
/proc文件系统
free 查看内存的使用情况
df 查看硬盘使用情况
du 查看文件大小
系统日志 tail - f /var/log/messages
常用系统日志:
/var/log/dmesg 核心启动日志
/var/log/messages 系统报错日志
/var/log/maillog 邮件系统日志
/var/log/boot.log 系统引导过程日志
/var/log/cron 记录守护进程派生子进程
/var/log/syslog 记录警告信息
/var/log/wtmp 永久记录用户登录事件
/var/log/xferlog 记录FTP会话
/var/log/secure 安全信息
常见查看日志的方法 tail /var/log/....
了解进程:
系统通过进程来完成工作
每一个进程都有一个独立的进程号,系统通过调用进程号来调度操控进程
系统和原始进程是init init的PID总是1
一个进程可以产生另一个进程,除了init以外,所有的进程都有父进程
linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性
交互进程 由一个shell启动的进程,交互进程可以在前台运行,也可以在后台运行
批处理进程 这种进程和终端没有联系,是一个进程序列
监控进程 也称守护进程,linux系统启动时启动的进程,并在后台运行。
一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令
作业控制指的是控制正在运行的进程的行为
查看进程状态:
ps [option] 常用参数
-a 显示所有进程,但不包括不隶属于任何一个终端的进程
-u 显示不属于任何一个终端的进程,诸如各类系统网络服务的后台程序
-l 以长模式显示进程信息
-u 显示进程的拥有者信息
在ps的参数中,是否加 - 号,表示不同的参数
ps显示中的stat,
R 正在运行
S 进程睡眠中,通常可以因事件发生而被唤醒
T 进程已停止
D 进程睡眠中,除非发生指定事件,否则不会被唤醒
Z 僵尸进程,例如未能被父进程回收的子进程。通常是一个系统BUG或非法操作
< 高优先级进程
N 低优先级进程
ps选项
-e 显示所有进程
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
a 显示终端上的所有进程,包括其他用户的进程
r 只显示正运行的进程
x 显示没有控制终端的进程
--help 显示帮助信息
--version 显示命令的版本信息
pstree 以树状方式表现进程的父子关系
top 系统监控工具
按 M 以内存排序
k 杀掉某个进程
? 帮助
>< 翻页
r 设置优先级
q 退出TOP命令
控制进程:
kill [-signal] PID 向进程传送一个特定的讯号 默认为15(终结)
kill -l 列出所有可以由kill传递的讯号
killall
skill
pkill
进程优先级:
进程俦级 用nice值来表示
nice以一个不同的nice值来运行指令 nice -n -num command
renice改变运行进程的nice值 renice -n PID
renice -n -10 1 调整优先级
控制台的前台和后台:
命令默认在前台运行
但控制台可以都允许多个后台进程,如 find / -name aaa & 直接运行在后台
进程放入后台运行:
command & 将进程直接丢入后台运行
ctrl+z 将正在运行的前台进程暂停,并丢入后台
nohup command & 在shell退出后进程仍执行,作为系统进程
控制台的任务:
jobs 显示系统当前后台任务列表
kill %n 控制第1个任务
fg 将后台进程放入前台,并运行
bg 激活后台暂停的进程
十四、 BASH使用详解
1 shell概念
2 linux下的shell种类与用户shell的控制
3 bash的使用
4 bash的常见技巧与快捷键
5 bash的变量使用
6 常见的bash变量使用
7 bash运算符
8 使用启动脚本定制bash
shell简单介绍:
shell环境
shell产生与发展
shell的显著特点: 命令行解释
使用保留字
使用shell元字符(通配符)
可处理程序命令
使用输入输出重定向和管道
维护一些变量
运行环境变量
支持shell编程
bash介绍:
系统中的shell
改变用户使用的shell
bash命令概要: 如下是几个最常用的bash内部命令
alias 设置bash别名
bg 使一个被挂起的进程在后台继续执行
cd 改变当前工作目录
exit 终止shell
export 使变量的值对当前shell的所有子进程都可见
fc 用来编辑历史命令列表里的命令
fg 使用一个被挂起的进程在前台继续执行
kill 终止某个进程
help 显示bash内部命令的帮助信息
pwd 显示当前工作目录
unalias 删除已定义的别名
bash还有许多命令,但这些是最常用的,想了解更详细的情况,可以man bash
bash变量: 这里有几个最有用的bash变量
包括变量名和简单描述
HISTFILE 用于贮存历史命令的文件
HISTSIZE 历史命令列表的大小
HOME 当前用户的用户目录
OLOPWD 前一个工作目录
PATH 寻找可执行文件的搜索路径 ~/.bash_profile
PS1 命令行的一级提示符
PS2 命令行的二级提示符
PWD 当前工作目录
SECONDS 当前shell开始后所流逝的秒数
bash的特性:
1 命令补齐——TAB键
2 有很多快捷键
3 通配符
4 命令历史记录 history
5 别名 命令别名通常是其它命令的缩写,用来减少键盘输入
6 输入重定向 <
7 输出重定向 >
8 管道 |
9 提示符
10 作业控制(JOB CONTROL)
11 用户化配置bash
bash变量快捷键:
1 TAB: 自动补完命令行与文件名
2 TAB键双击: 可以列出所有匹配的选择
3 Ctrl+c: 结束当前的任务
4 Ctrl+z: 当前任务暂停,并放在后台
5 Ctrl+s: 停止屏幕输出
6 Ctrl+q: 恢复屏幕输出
7 Ctrl+l: 清屏
8 Ctrl+d: 标准输入结束
9 Ctrl+r: 追踪命令
bash在控制台下的其他快捷键:
ctrl+u 删除光标以前的所有字符
ctrl+d 一个字符
ctrl+k 删除光标以后的所有字符
ctrl+h 一个字符
ctrl+t 调换光标前两个字符的次序
ctrl+a 移动光标到最前面
ctrl+e 最后面
ctrl+p 上一个命令
ctrl+n 下一个命令
ctrl+f 移动光标到后一个字符
ctrl+b 移动光标到前一个字符
ctrl+x 标记一个位置
ctrl+c 清除当前的输入 (常用)
使用BASH命令历史: history命令可查询历史操作命令
命令历史中的命令可以被调用
.bash_history中的命令数目由HISTFILESIZE这个变量来决定
history表存储在内存内。用户logout时会记录到用户主目录中.bash_history文件
# history
# set |grep HIS
# history -c 清除命令历史
使用历史命令: 使用!来调用历史指令
ctrl+r在history中查询指令
!$ 获得前面命令行中的最后一项内容
!! 重复执行上一条命令
!a 重复执行上一条以a为首的命令
!100 重复执行第100号命令
bash的变量类型:分环境变量和普通变量
环境变量:可以被子shell引用的变量
普通变量:只在当前shell中有效
set 显示环境变量和普通变量
env 只显示环境变量
export 把普通变量变成环境变量
unset 可以删掉一个变量
alias别名: 为命令定义简单的别名
unalias取消别名记录
alias记录在shell中总是先执行
bash中的运算符:已经接触过的通配符* ? [abc] {a,b,c}等
一些运算符,
如echo $PATH中的$
!10 中的!
另外我们还要学习以下运算符
! !20 !! !$ $AAA * ? [abc] [^abc] {a,b,c} & ~ # %1 ^ "" '' `` \ ; = < > $$
[ ] 加空格有来表示判断 ,判断条件: -f 文件
-l 链接
-d 目录
-c 字符型文件
-b 块设备文件
-x 执行文件
-r 只读文件
-w 可写文件
man bash可查
&& 当前一条指令执行成功时再执行后一条指令
|| 失败时再执行
$$ 显示pid
定制你的bash:
在bash中定制的:命令历史、变量、umask、选项 set -o、alais等
只在当前shell有效,再次打开将恢复成原来shell启动脚本中定义的样子
bash的启动脚本:
全局设置文件: /etc/profile
/etc/bashrc
用户设置文件: ~/.bash_profile
~/.bashrc
bash的其它配置脚本:
~/.bash_logout
~/.bash_history logout时将内存history记录写入
/etc/profile.d/*.sh
十五、 shell脚本编程详解
1 什么是shell脚本编程 其它脚本php,jsp,asp,
系统是由shell脚本搭建的,如/etc/rc.d/rc.sysinit或services命令
shell脚本一般是ASCII码的文本,可以直接编写
脚本中的#表示注释,但是第一行中的#有特殊意义:
如果第一行中:
第一个字符非#:表示这是一个BASH脚本
第一个字符是#,但第二个字符不是!:表示这是一个csh脚本
第一个字符是#,且第二个字符是!:表示调用其后指定的某个程序来执行以下的这个脚本。如#!/usr/bin/python2.2
2 脚本的执行方式
3 脚本的常见流程控制
4 脚本的编写
5 sed及awk的使用
shell脚本: shell script
unix系统的原则有一条:UNIX系统和程序都比较短小,避免交互
所以在完成复杂任务时需要把短小命令组合起来使用,怎样组合呢?就是用shell脚本
shell script通常为text文本文件,shell的脚本最善长用来完成系统管理工作;
shell 有很多种,不同的shell语法是不相同的,如csh的脚本bash不一定可以用
shell脚本可以进行多种形式的交互
整个系统都是由shell脚本来串连的
甚至很多命令就是shell脚本 service 命令、startx命令等等
shell中正则表达式:
正则表达式简介
grep和正则表达式
vi和正则表达式
与shell脚本进行交互:
可以使用参数来传递内容 $1 $2 $3
可以使用命令来进行交互 read 读入数据给变量
echo 输出数据
printf 输出数据
echo "this if input & output!"
read -p "this is read,please input:"readmem
echo "this is echo:$readmem"
printf "this is printf %s" $readmem
shell脚本执行:
输入脚本的绝对路径或相对路径
/root/backup
./backup
bash脚本或tcsh脚本
表示以bash或tcsh来执行脚本 bash /root/backup
再脚本的路径前加 . . ./backup
. /root/backup
bash脚本中的流程控制:
条件判断控制
[] && ||
if
case
循环控制
while
utile
for
break
continue
[ ]
echo $?
vi /etc/rc.d/rc.sysinit
vi /etc/rc.d/init.d/httpd
bash -vx ./b 编译
[]在bash 可以判断真假,
[ $USER = "ding" ] && echo hello ding
[ -f /bin/ls ] && /bin/ls
[ $USER = "ding" ] || echo hello root
-e file已经存在
-f file普通文件
-s file大小不为零
-d file是一个目录
-r file对当前用户可以读取
-w file可写
-x file可执行
-g file的GID标志被设置
-u file的UID标志被设置
-O file是属于当前用户的
-G file的组ID和当前用户相同
file1 -nt file2 文件file1比file2更new
file1 -ot file2 文件file1比file2更old
数值比较时的运算符:
-eq =
-ne !=
-gt >
-lt <
-ge >=
-le <=
-z 为空
-n 不为空
条件判断控制语句if:
if 条件
then 动作
elif 条件
then 动作
else
动作
fi
例子:
if[ $1 = "hello" ]
then
echo "hello!hahah"
fi
if [ $1 = 1 ]; then
if [ $2 = 2 ]; then
echo ok
fi
fi
条件判断控制语句CASE:
case 表达式 in
匹配值1)
动作;;
匹配值2)
动作;;
*)
动作;;
esac
例子:
case $1 in
root)
echo "hello root"
;;
ding)
echo "dear i miss you"
;;
*)
echo "where are you"
;;
esac
循环控制语句for:
for 变量 in 数组
do
动作
done
for,变量自动去数组中取值,每取一次值执行一次循环,
例子:
for i in 1 2 3 4 /etc/*rc
do
echo $!
done
循环控制语句while:
while 条件
do
动作
done
while,当条件为真时,执行do和done间的循环
例子: aaa=0
while [ $1 = "ok" ] && [ $aaa -lt 10 ]
do
aaa=$[$aaa+1] 执行运算
echo "$aaa "
done
循环控制语句until:
until 条件
do
动作
done
例子:
aaa=0
until [ $aaa -gt 9 ]
do
aaa=$[$aaa+1]
echo "$aaa "
done
与while循环只是条件相反
函数的使用:
bash 中的函数定义非常简单
使用:
myfunction()
{
}
取消函数或变量时使用: unset myfunction
例子:计算整数平方的例子
square(){
aaa="$1*$1"
return $aaa
}
square $1
result=$?
echo $result
exit 0
sed: 流编辑器 stream editor
sed编辑器是linux 系统管理员的工具包中最有用的资产之一
sed非常适合脚本中使用,因为不需要进行交互
流编辑器非常适合执行重复的编辑,比如替换文件中的词语等。
使用sed进行替换: sed 's/{old value}/{new value}/'
多次替换: sed -e 's/mike/todd/' -e 's/good/better/'
sed 's/tiger/wolf/; s/after/before/'
了解sed脚本: 编辑内容可以写成脚本
脚本是包含sed命令的文本文件
执行命令列上的编辑指令
sed编辑指令
执行档案内的编辑指令
执行多个档案的编辑
执行sed输出控制
info sed
man sed
awk的使用: awk是一种用于处理文本的编程语言工具
unix/linux功能最强大的数据处理引擎
可以在匹配的行上执行特殊的操作
shell中最常用于截取文本中某一段数据
awk程序: 规则通常由新行来分离
规则包含一个模式和在{}内包含的操作
pattern {action}
运行awk程序: 简单的程序可以在命令行下直接输入:$awk 'program' input file
更长的程序保存在文件中 $awk -f program_file input_file
awk实例: 用awk搜索文件/etc/passwd中包含"bash"字符串的行
$awk '/bash/ { print }' /etc/passwd
更加复杂的awk实例: 统计/project目录下所有属于用户joshua的文件的总大小
#ls -l /project |awk '$3=="joshua" {\sum+=$5 } END {print sum }'
何时使用awk: 从大量的原始数据中产生报告
从其它程序的输出中总结信息
当你需要一个又小又快的文本处理程序的时候
发表评论
-
提供IT系统运维支持、系统优化方案
2012-10-26 14:46 6提供IT系统运维支持、系统优化方案,有多个运维实施经验。 ... -
搭建mpi并行运算中遇到的问题与解决方案
2010-11-28 18:21 4876搭建mpi并行运算中遇到的问题与解决方案 1,[roo ... -
linux bash(1)
2010-11-10 22:22 1496一、LINUX操作系统的基本结构 1 kernel、 ... -
LINUX系统高级应用
2010-11-10 16:18 1319【过滤大log文件】 #!/bin/bash ... -
【转载】ossec主机入侵检查系统架设
2010-09-30 09:51 1326一.OSSEC简要介绍: OSSEC 是一款开源的入 ... -
Linux多路径的使用及介绍
2010-09-25 08:37 1687多路径(multi-path)软件的介绍 普通的电脑主机都是 ... -
服务器出现broken pipe ,connection reset解决方法
2010-08-24 17:34 2930linux下webloigc经常出现broken pipe ... -
ELF文件病毒的分析和编写(转)
2010-08-11 09:46 3127这个文章是从网上搜来的,转来转去也不知道睡是原版的了,所以很抱 ... -
linux下容量不同硬盘的复制
2010-07-28 19:44 2413可以用parted magic光盘来实现 1.用part ... -
Linux 如何加快 dd 命令备份的速度呢
2010-07-28 19:36 2257增加块大小 dd if=.. of=.. bs=128k -
Linux中重定向及管道
2010-07-28 08:44 12501重定向 1.1 重定向符号 > ... -
提供j2ee中间件优化方案和实施
2010-05-11 09:04 384提供j2ee中间件安装优化方案和实施,提供oracle等数据库 ... -
从bind安装到配置全过程.所有linux平台都支持,带注释
2010-04-26 22:11 2548从安装到配置.不会架设DNS的人来.不是RPM安装的. ... -
apache前台代理分发 weblogic集群报错:错误模块 libhttpd.dll,错误地址 0x0001c0a2 解析以及解决方案
2010-04-14 22:28 35082003的报错:错误应用 程序 Apache.exe,版本 ... -
apache 启动httpd.exe 报错 Could not reliably determine the server's fully qualified
2010-04-14 20:35 2382前言:apache虽然能运行,但是看见error.log中 ... -
AIX下比较两个目录文件并同步数据,供参考
2010-03-25 13:06 1788#!/usr/bin/ksh # Compare the t ... -
check 系统账号密码是否过期shell脚本
2010-03-25 12:37 1427自己写的check aix系统用户密码是否过期的shell 脚 ... -
apache日志自动切割
2010-03-24 09:36 2212前几天给国家地震台 ... -
Remounting filesystem read-only硬盘只读,悲剧
2010-03-02 16:36 11598Dec 6 00:06:36 backup kernel: ... -
解决挂载盘柜出现“EXT3-fs error filesystem read-only”
2010-03-02 16:35 4809昨天发现盘柜上的逻辑卷只能读,不能写!,查看盘柜管理页面,无错 ...
相关推荐
### Linux BASH中文手册知识点概览 #### 一、引言 **Bash**(Bourne Again SHell)作为一款强大的Unix/Linux环境下的命令解释器,被广泛应用于各种操作系统中,尤其是Linux发行版的核心组成部分之一。对于初学者而...
【Linux bash补丁(2)】是一个针对Linux操作系统中bash shell漏洞的修复合集,它包含了一系列不同架构和版本的bash软件包以及一个名为“bash补丁命令.txt”的文本文件,用于指导用户如何应用这些补丁。bash是Linux...
Bash是Linux操作系统中最常用的命令行解释器,或者称为shell,它允许用户通过文本界面与系统交互,执行各种任务。Bash是Bourne-Again SHell的缩写,是原始Bourne shell的增强版,由GNU项目开发并作为GNU/Linux系统的...
linux bash shell 实现源码
在Linux系统中,Bash(Bourne-Again SHell)是默认的命令行解释器,它是用户与操作系统交互的主要工具。Bash shell配置文件对于提高工作效率和个性化工作环境至关重要。本文将详细介绍如何理解和利用Bash配置文件...
### Linux Bash脚本编程大全知识点概述 #### 一、引言 《Linux Bash脚本编程大全》是一本全面介绍Bash脚本编程的书籍,它不仅涵盖了Bash的基础知识,还包括了许多高级技巧以及Linux/UNIX操作系统相关的知识。本书...
和之前C++执行Linux Bash命令的方法 一样,Python依然支持system调用和popen()函数来执行linux bash命令。 方法一:system调用 #仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 import os os....
资源名称:Linux Bash编程与脚本应用实战资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
linux基本bash命令_linux
2. **更新Bash版本**: - 对于CentOS和Red Hat用户,可以通过运行以下命令来更新Bash: ```bash yum update bash ``` - 对于Ubuntu用户,则可以使用以下命令安装最新的Bash版本: ```bash apt-get update apt-...
Linux Shell脚本是Linux操作系统中的一种重要编程工具,它基于Bourne Again SHell (Bash),是Linux环境中最常用的命令解释器。Bash不仅支持基本的命令行操作,还提供了许多高级特性,如变量、流程控制、函数、输入/...
在IT行业中,Linux和Bash是极为重要的工具,特别是在服务器管理和自动化任务执行方面。Bash是Linux操作系统默认的Shell,它提供了命令行交互环境以及强大的脚本编写能力。本资源"linux_bash"包含了几个适合初学者的...
Linux Bash脚本编程是Linux系统管理与自动化任务执行的核心技能之一。Bash,全称Bourne-Again SHell,是Unix及Linux操作系统中最常用的命令行解释器,它提供了丰富的命令行工具和强大的脚本编写能力。这本书《Linux ...
Linux Bash Shell 中文手册是为Linux用户和系统管理员提供的一份详细指南,涵盖了Bash Shell的基本用法和高级特性。Bash(Bourne-Again SHell)是GNU项目下的Unix/Linux操作系统默认的命令行解释器,它继承并扩展了...
Linux Bash Shell快速入门是针对初学者的指导性文章,它从编写简单的“Hello World”程序开始,逐步介绍Bash Shell的基础知识和语法。本文重点讨论了以下几个方面:Bash Shell的基本语法,变量的使用和与C语言的异同...
在IT行业中,Linux Bash脚本编程是系统管理员、开发者以及自动化任务执行者不可或缺的技能之一。Bash(Bourne-Again SHell)是Linux和Unix操作系统中最常用的命令行解释器,也是编写shell脚本的主要工具。《Linux ...
### Linux Bash脚本大全知识点概览 #### 一、引言 - **Shell的重要性:** Shell作为用户与操作系统之间的交互接口,在Linux/UNIX系统中扮演着极其重要的角色。特别是Bash(Bourne-Again Shell),它几乎是所有现代...