本文目录导读:

我可以为您提供几种模拟系统命令的方法,包括Python和Shell脚本实现:
Python 模拟系统命令
基础命令模拟器
import os
import subprocess
import shlex
import sys
class CommandSimulator:
def __init__(self):
self.current_dir = os.getcwd()
self.commands = {
'ls': self.list_files,
'cd': self.change_directory,
'pwd': self.print_working_directory,
'cat': self.cat_file,
'echo': self.echo_text,
'mkdir': self.make_directory,
'rm': self.remove_file,
'cp': self.copy_file,
'mv': self.move_file,
'touch': self.touch_file,
'help': self.show_help,
'exit': self.exit_shell
}
def list_files(self, args):
"""模拟ls命令"""
path = args[0] if args else self.current_dir
try:
files = os.listdir(path)
for f in files:
if os.path.isdir(os.path.join(path, f)):
print(f"{f}/")
else:
print(f)
except Exception as e:
print(f"ls: {e}")
def change_directory(self, args):
"""模拟cd命令"""
if not args:
path = os.path.expanduser("~")
else:
path = args[0]
try:
os.chdir(path)
self.current_dir = os.getcwd()
except Exception as e:
print(f"cd: {e}")
def print_working_directory(self, args):
"""模拟pwd命令"""
print(self.current_dir)
def cat_file(self, args):
"""模拟cat命令"""
if not args:
print("cat: no file specified")
return
for filename in args:
try:
with open(filename, 'r') as f:
print(f.read())
except Exception as e:
print(f"cat: {e}")
def echo_text(self, args):
"""模拟echo命令"""
text = ' '.join(args)
print(text)
def make_directory(self, args):
"""模拟mkdir命令"""
if not args:
print("mkdir: missing operand")
return
for dirname in args:
try:
os.mkdir(dirname)
print(f"Created directory: {dirname}")
except Exception as e:
print(f"mkdir: {e}")
def remove_file(self, args):
"""模拟rm命令"""
if not args:
print("rm: missing operand")
return
for filename in args:
try:
os.remove(filename)
print(f"Removed file: {filename}")
except Exception as e:
print(f"rm: {e}")
def copy_file(self, args):
"""模拟cp命令"""
if len(args) < 2:
print("cp: missing file operand")
return
import shutil
src, dst = args[0], args[1]
try:
shutil.copy2(src, dst)
print(f"Copied {src} to {dst}")
except Exception as e:
print(f"cp: {e}")
def move_file(self, args):
"""模拟mv命令"""
if len(args) < 2:
print("mv: missing file operand")
return
import shutil
src, dst = args[0], args[1]
try:
shutil.move(src, dst)
print(f"Moved {src} to {dst}")
except Exception as e:
print(f"mv: {e}")
def touch_file(self, args):
"""模拟touch命令"""
if not args:
print("touch: missing file operand")
return
for filename in args:
try:
with open(filename, 'a'):
os.utime(filename, None)
print(f"Touched file: {filename}")
except Exception as e:
print(f"touch: {e}")
def show_help(self, args):
"""显示帮助信息"""
print("可用命令:")
for cmd in self.commands:
print(f" {cmd}")
def exit_shell(self, args):
"""退出模拟器"""
print("Goodbye!")
sys.exit(0)
def run(self):
"""主循环"""
print("欢迎使用命令模拟器 (输入 'help' 查看命令)")
while True:
prompt = f"simulator:{self.current_dir}> "
user_input = input(prompt)
if not user_input.strip():
continue
# 解析命令
parts = shlex.split(user_input)
cmd = parts[0]
args = parts[1:] if len(parts) > 1 else []
# 执行命令
if cmd in self.commands:
self.commands[cmd](args)
else:
print(f"未知命令: {cmd} (输入 'help' 查看可用命令)")
# 使用示例
if __name__ == "__main__":
simulator = CommandSimulator()
simulator.run()
高级命令模拟器(带管道和重定向)
import os
import sys
import shlex
import subprocess
from typing import List, Dict, Callable
class AdvancedCommandSimulator:
"""高级命令模拟器,支持管道和重定向"""
def __init__(self):
self.environment = {}
self.current_dir = os.getcwd()
self.commands = {
'ls': self.cmd_ls,
'cd': self.cmd_cd,
'pwd': self.cmd_pwd,
'cat': self.cmd_cat,
'echo': self.cmd_echo,
'mkdir': self.cmd_mkdir,
'rm': self.cmd_rm,
'cp': self.cmd_cp,
'mv': self.cmd_mv,
'grep': self.cmd_grep,
'sort': self.cmd_sort,
'wc': self.cmd_wc,
'head': self.cmd_head,
'tail': self.cmd_tail,
'help': self.cmd_help,
'exit': self.cmd_exit,
}
def parse_command(self, cmd_str):
"""解析命令,支持管道和重定向"""
# 处理管道
if '|' in cmd_str:
return self.execute_pipeline(cmd_str)
# 处理重定向
if '>' in cmd_str or '<' in cmd_str:
return self.execute_redirect(cmd_str)
# 普通命令
parts = shlex.split(cmd_str)
if not parts:
return None
cmd = parts[0]
args = parts[1:]
if cmd in self.commands:
return self.commands[cmd](args)
else:
print(f"未找到命令: {cmd}")
return None
def execute_pipeline(self, cmd_str):
"""执行管道命令"""
commands = cmd_str.split('|')
processes = []
for i, cmd_part in enumerate(commands):
cmd_list = shlex.split(cmd_part.strip())
if not cmd_list:
continue
cmd = cmd_list[0]
args = cmd_list[1:]
if i == 0:
p1 = subprocess.Popen(cmd_list, stdout=subprocess.PIPE)
processes.append(p1)
elif i == len(commands) - 1:
p2 = subprocess.Popen(cmd_list, stdin=processes[-1].stdout)
processes.append(p2)
else:
p2 = subprocess.Popen(cmd_list, stdin=processes[-1].stdout, stdout=subprocess.PIPE)
processes.append(p2)
if i > 0:
processes[-2].stdout.close()
# 等待所有进程完成
for p in processes:
p.wait()
def execute_redirect(self, cmd_str):
"""执行重定向命令"""
# 简单重定向处理
parts = shlex.split(cmd_str)
if '>' in parts:
idx = parts.index('>')
cmd_parts = parts[:idx]
output_file = parts[idx+1:]
cmd = cmd_parts[0]
args = cmd_parts[1:]
# 保存stdout
orig_stdout = sys.stdout
with open(' '.join(output_file), 'w') as f:
sys.stdout = f
if cmd in self.commands:
self.commands[cmd](args)
sys.stdout = orig_stdout
else:
# 普通执行
parts = shlex.split(cmd_str)
cmd = parts[0]
args = parts[1:]
if cmd in self.commands:
self.commands[cmd](args)
def cmd_ls(self, args):
"""模拟ls命令"""
path = args[0] if args else self.current_dir
files = os.listdir(path)
for f in sorted(files):
print(f)
def cmd_cd(self, args):
"""模拟cd命令"""
try:
os.chdir(' '.join(args))
self.current_dir = os.getcwd()
except Exception as e:
print(f"cd: {e}")
def cmd_pwd(self, args):
"""模拟pwd命令"""
print(self.current_dir)
def cmd_cat(self, args):
"""模拟cat命令"""
for file in args:
try:
with open(file, 'r') as f:
print(f.read())
except Exception as e:
print(f"cat: {e}")
def cmd_echo(self, args):
"""模拟echo命令"""
print(' '.join(args))
def cmd_mkdir(self, args):
"""模拟mkdir命令"""
for dirname in args:
try:
os.mkdir(dirname)
except Exception as e:
print(f"mkdir: {e}")
def cmd_rm(self, args):
"""模拟rm命令"""
for file in args:
try:
os.remove(file)
except Exception as e:
print(f"rm: {e}")
def cmd_cp(self, args):
"""模拟cp命令"""
import shutil
if len(args) == 2:
try:
shutil.copy2(args[0], args[1])
except Exception as e:
print(f"cp: {e}")
def cmd_mv(self, args):
"""模拟mv命令"""
import shutil
if len(args) == 2:
try:
shutil.move(args[0], args[1])
except Exception as e:
print(f"mv: {e}")
def cmd_grep(self, args):
"""模拟grep命令"""
pattern = args[0] if args else ""
files = args[1:] if len(args) > 1 else []
if not files:
# 从stdin读取
for line in sys.stdin:
if pattern in line:
print(line, end='')
else:
for file in files:
try:
with open(file, 'r') as f:
for line_num, line in enumerate(f, 1):
if pattern in line:
print(f"{file}:{line_num}:{line}", end='')
except Exception as e:
print(f"grep: {e}")
def cmd_sort(self, args):
"""模拟sort命令"""
lines = []
if args:
for file in args:
try:
with open(file, 'r') as f:
lines.extend(f.readlines())
except:
pass
else:
for line in sys.stdin:
lines.append(line)
for line in sorted(lines):
print(line, end='')
def cmd_wc(self, args):
"""模拟wc命令"""
if args:
total_lines = 0
total_words = 0
total_chars = 0
for file in args:
try:
with open(file, 'r') as f:
content = f.read()
lines = content.count('\n')
words = len(content.split())
chars = len(content)
print(f"{lines:8d} {words:8d} {chars:8d} {file}")
total_lines += lines
total_words += words
total_chars += chars
except:
pass
if len(args) > 1:
print(f"{total_lines:8d} {total_words:8d} {total_chars:8d} total")
else:
content = sys.stdin.read()
print(f"{content.count(chr(10)):8d} {len(content.split()):8d} {len(content):8d}")
def cmd_head(self, args):
"""模拟head命令"""
lines_num = 10
files = []
for arg in args:
if arg.isdigit():
lines_num = int(arg)
else:
files.append(arg)
for file in files:
try:
with open(file, 'r') as f:
for _ in range(lines_num):
line = f.readline()
if not line:
break
print(line, end='')
except Exception as e:
print(f"head: {e}")
def cmd_tail(self, args):
"""模拟tail命令"""
lines_num = 10
files = []
for arg in args:
if arg.isdigit():
lines_num = int(arg)
else:
files.append(arg)
for file in files:
try:
with open(file, 'r') as f:
lines = f.readlines()
for line in lines[-lines_num:]:
print(line, end='')
except Exception as e:
print(f"tail: {e}")
def cmd_help(self, args):
"""帮助命令"""
print("可用命令:")
for cmd in sorted(self.commands.keys()):
print(f" {cmd}")
def cmd_exit(self, args):
"""退出命令"""
sys.exit(0)
def run(self):
"""运行模拟器"""
print("高级命令模拟器 (输入 'help' 查看命令)")
while True:
try:
prompt = f"simulator:{self.current_dir}> "
user_input = input(prompt)
if not user_input.strip():
continue
self.parse_command(user_input)
except KeyboardInterrupt:
print("\n使用 'exit' 退出")
except Exception as e:
print(f"错误: {e}")
# 使用示例
if __name__ == "__main__":
simulator = AdvancedCommandSimulator()
simulator.run()
Shell脚本模拟(Bash)
#!/bin/bash
# 简单的Linux命令模拟器
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 显示帮助
show_help() {
echo -e "${BLUE}可用命令:${NC}"
echo " ls, cd, pwd, cat, echo, mkdir, rm"
echo " cp, mv, grep, sort, head, tail"
echo " help, exit"
}
# 模拟ls命令
sim_ls() {
local path="${1:-.}"
echo -e "${GREEN}目录 $path 的内容:${NC}"
ls -la "$path" 2>/dev/null || echo -e "${RED}无法访问: $path${NC}"
}
# 模拟cd命令
sim_cd() {
local path="$1"
if [ -d "$path" ]; then
cd "$path"
echo -e "${GREEN}当前目录: $(pwd)${NC}"
else
echo -e "${RED}目录不存在: $path${NC}"
fi
}
# 模拟cat命令
sim_cat() {
for file in "$@"; do
if [ -f "$file" ]; then
echo -e "${YELLOW}=== $file ===${NC}"
cat "$file"
else
echo -e "${RED}文件不存在: $file${NC}"
fi
done
}
# 模拟echo命令
sim_echo() {
echo "$*"
}
# 模拟mkdir命令
sim_mkdir() {
for dir in "$@"; do
mkdir -p "$dir" && echo -e "${GREEN}创建目录: $dir${NC}" || echo -e "${RED}创建失败: $dir${NC}"
done
}
# 主循环
main() {
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} Linux命令模拟器 v1.0${NC}"
echo -e "${BLUE}========================================${NC}"
echo -e "输入 'help' 查看所有可用命令"
echo ""
while true; do
echo -en "${GREEN}$(basename $(pwd)):${YELLOW}$(basename $HOME)${NC}> "
read -r input
# 解析输入
IFS=' ' read -r -a args <<< "$input"
cmd="${args[0]}"
params=("${args[@]:1}")
case "$cmd" in
"ls") sim_ls "${params[0]}" ;;
"cd") sim_cd "${params[0]}" ;;
"pwd") pwd ;;
"cat") sim_cat "${params[@]}" ;;
"echo") sim_echo "${params[@]}" ;;
"mkdir") sim_mkdir "${params[@]}" ;;
"rm") rm -r "${params[@]}" 2>/dev/null || echo -e "${RED}删除失败${NC}" ;;
"cp") cp "${params[@]}" 2>/dev/null || echo -e "${RED}复制失败${NC}" ;;
"mv") mv "${params[@]}" 2>/dev/null || echo -e "${RED}移动失败${NC}" ;;
"grep") grep "${params[@]}" ;;
"sort") sort "${params[@]}" ;;
"head") head "${params[@]}" ;;
"tail") tail "${params[@]}" ;;
"help") show_help ;;
"exit"|"quit") echo -e "${BLUE}再见!${NC}"; exit 0 ;;
"") continue ;;
*) echo -e "${RED}未知命令: $cmd ${NC}" ;;
esac
done
}
# 运行主函数
main
使用方法
运行Python模拟器:
python3 command_simulator.py
运行Shell模拟器:
chmod +x command_simulator.sh ./command_simulator.sh
这些脚本模拟了基本的Linux命令功能,可以根据需要进行扩展和修改,它们适合学习、测试或在一个安全环境中模拟系统命令。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播