苹果x手机清屏如何清屏

x86架构操作系统内核的实现 / hurlex
字符模式下的显卡驱动
字符模式下的显卡驱动
posted in []
本章将开始描述内核对屏幕输出的控制。
1MB以下的地址空间分布
在第二章我们简单的谈过地址空间的概念,并提到4G的地址空间并非全部指向主存储器,而是有部分的地址分给了其他外设。特别地,在地址空间的最低1MB处,有很多地址是属于外部设备的,下图描绘了该处地址映射的分布情况:
在PC上要显示文字,通常需要显示器和显卡这两个硬件设备。一般来说显卡负责提供显示内容,并控制具体的显示模块和状态。显示器的职责是负责将显卡呈递的内容可视化的显示出来。既然显卡需要控制显示的数据,自然就需要存储这些待显示的内容,所以显卡就有自己的存储区域。这个存储区域叫做显示存储器(Video
RAM,VRAM),简称显存。当然,访问显存就需要地址。CGA/EGA+ Chroma text video buffer 这个区域映射的就是工作在文本模式的显存。同时显卡还有另外一个工作模式叫做图形模式,这个模式是目前最最常用的模式。
显卡在文本模式下的显示规则
我们知道,对于一个字符的编码通常有输入码、内码和字模码三种。其中字模码定义了一个字符在屏幕上显示的点阵坐标。通常显卡内置一套关于基本英文字符的显示是很容易做到的,而内置汉字的显示就较为麻烦。在这篇文档中我们只使用显卡的文本模式,不会涉及到图形模式的内容。因为一旦使用了图形模式的内容,我们就需要自行定义字符的字模码了,这很繁琐而且对我们理解操作系统原理的意义不是很大。所以我们只使用显卡的文本模式进行屏幕显示控制。所有在PC上工作的显卡,在加电初始化之后都会自动初始化到80*25的文本模式。在这个模式下,屏幕被划分为25行,每行可以显示80个字符,所以一屏可以显示2000个字符。上图中的0xB8000~0xBFFFF这个地址段便是映射到文本模式的显存的。当访问这些地址的时候,实际上读写的是显存区域,而显卡会周期性的读取这里的数据,并且把它们按顺序显示在屏幕上。
那么,按照什么规则显示呢?这就要谈到内码了。内码定义了字符在内存中存储的形式,而英文编码就是大家所熟知的ASCII(American
Standard Code for Information
Interchange,美国信息交换标准代码)码了。对应的关系很简单,从0xB8000这个地址开始,每2个字节表示屏幕上显示的一个字符。从屏幕的第一行开始对应,一行接着一行的对应下去。而这两个字节的前一个是显示字符的ASCII码,后一个是控制这个字符颜色和属性的控制信息,这个字节的8个bit位表示不同的含义。每一位的含义如图所示:
这些位的组合效果如下图所示:
这两张图可以帮助我们在显卡的字符模式显示彩色的文本了,懂得这些原理对于探索性质的显示也就足够了。
理解了显卡文本模式的原理之后接下来就是对屏幕显示控制编码了。不过显卡除了显示内容的存储单元之外,还有部分的显示控制单元需要了解。这些显示控制单元被编制在了独立的I/O空间里,需要用特殊的in/out指令去读写。这里相关的控制寄存器多达300多个,显然无法一一映射到I/O端口的地址空间。对此工程师们解决方案是,将一个端口作为内部寄存器的索引:0x3D4,再通过0x3D5端口来设置相应寄存器的值。
端口读写函数的实现
在具体的设置之前,我们首先需要几个端口读写函数的实现。因为C语言并没有直接操作端口的方法,而且频繁的内联汇编麻烦又容易出错。所以好的做法就是定义几个端口读写函数。代码如下:
#include "common.h"
// 端口写一个字节
inline void outb(uint16_t port, uint8_t value)
asm volatile ("outb %1, %0" : : "dN" (port), "a" (value));
// 端口读一个字节
inline uint8_t inb(uint16_t port)
asm volatile("inb %1, %0" : "=a" (ret) : "dN" (port));
// 端口读一个字
inline uint16_t inw(uint16_t port)
asm volatile ("inw %1, %0" : "=a" (ret) : "dN" (port));
对应的头文件如下:
#ifndef INCLUDE_COMMON_H_
#define INCLUDE_COMMON_H_
#include "types.h"
// 端口写一个字节
void outb(uint16_t port, uint8_t value);
// 端口读一个字节
uint8_t inb(uint16_t port);
// 端口读一个字
uint16_t inw(uint16_t port);
#endif // INCLUDE_COMMON_H_
细心的读者想必已经发现了函数定义之前的inline关键字了吧?这是GNU对ANSI
C的扩展,它和C++语言里的inline的作用是一样的。函数前面加上inline之后,编译器会尝试在该函数的调用点进行直接进行代码展开,而不是传统的函数调用。这么做的既有传统函数的好处,即避免了重复性的编码,减少了出错的几率。又减少了函数的调用,提高了代码的执行效率。另外,你可能见过宏函数这种用法,但是宏函数是没有参数类型的检查的,相比inline还是逊了一筹。
颜色的枚举定义和屏幕操作函数的实现
接下来是颜色定义的枚举和一些屏幕控制函数的声明。代码如下:
#ifndef INCLUDE_CONSOLE_H_
#define INCLUDE_CONSOLE_H_
#include "types.h"
enum real_color {
rc_black = 0,
rc_blue = 1,
rc_green = 2,
rc_cyan = 3,
rc_red = 4,
rc_magenta = 5,
rc_brown = 6,
rc_light_grey = 7,
rc_dark_grey = 8,
rc_light_blue = 9,
rc_light_green = 10,
rc_light_cyan = 11,
rc_light_red = 12,
rc_light_magenta = 13,
rc_light_brown
rc_white = 15
} real_color_t;
// 清屏操作
void console_clear();
// 屏幕输出一个字符
void console_putc_color(char c, real_color_t back, real_color_t fore);
// 屏幕打印一个以 \0 结尾的字符串
默认黑底白字
void console_write(char *cstr);
// 屏幕打印一个以 \0 结尾的字符串
void console_write_color(char *cstr, real_color_t back, real_color_t fore);
// 屏幕输出一个十六进制的整型数
void console_write_hex(uint32_t n, real_color_t back, real_color_t fore);
// 屏幕输出一个十进制的整型数
void console_write_dec(uint32_t n, real_color_t back, real_color_t fore);
// INCLUDE_CONSOLE_H_
参照着前面的表格,理解颜色的枚举类型并不困难。接下来是显存起始位置和当前输出的屏幕位置的变量定义。同时,我们将屏幕抽象为一个80*25的二维数组,每个数组成员都是2个字节,表示屏幕上显示的一个字符。
// VGA 的显示缓冲的起点是 0xB8000
static uint16_t *video_memory = (uint16_t *)0xB8000;
// 屏幕"光标"的坐标
static uint8_t cursor_x = 0;
static uint8_t cursor_y = 0;
请大家留意这里变量定义时候的 static
限定符,当一个全局变量或者函数只在本模块文件内被使用时,最好限定其作用域。每个模块应当尽可能的向外部暴露较少的接口。
屏幕输入光标的移动
在本模块内,cursor_x 和 cursor_y
这两个变量指明了逻辑上的当前输出位置,但是并没有实际上移动硬件的显示“光标”,下面的函数实现了根据这两个变量的值移动光标的功能。
static void move_cursor()
// 屏幕是 80 字节宽
uint16_t cursorLocation = cursor_y * 80 + cursor_x;
// 在这里用到的两个内部寄存器的编号为14与15,分别表示光标位置
// 的高8位与低8位。
outb(0x3D4, 14);
// 告诉 VGA 我们要设置光标的高字节
outb(0x3D5, cursorLocation && 8);
// 发送高 8 位
outb(0x3D4, 15);
// 告诉 VGA 我们要设置光标的低字节
outb(0x3D5, cursorLocation);
// 发送低 8 位
这里的端口和设置值都是固定的,也没有什么道理可讲。虽然显卡的各项技术发展的很快,但是这个原始的VGA标准被所有显卡完整的保存了下来。
然后是清屏操作,其实这里的“清屏”很简单,其实就是用白底黑字的“空格符”覆盖整个屏幕的显示区域罢了。这么做自然就实现了我们想要的“清屏”操作了。代码很简单:
void console_clear()
uint8_t attribute_byte = (0 && 4) | (15 & 0x0F);
uint16_t blank = 0x20 | (attribute_byte && 8);
for (i = 0; i & 80 * 25; i++) {
video_memory[i] =
cursor_x = 0;
cursor_y = 0;
move_cursor();
屏幕滚动显示
那么屏幕滚动呢?用C语言来描述实际上就是将后24行的数据全部向上挪动一行,最后一行清空罢了,就是这么简单。
static void scroll()
// attribute_byte 被构造出一个黑底白字的描述格式
uint8_t attribute_byte = (0 && 4) | (15 & 0x0F);
uint16_t blank = 0x20 | (attribute_byte && 8);
// space 是 0x20
// cursor_y 到 25 的时候,就该换行了
if (cursor_y &= 25) {
// 将所有行的显示数据复制到上一行,第一行永远消失了...
for (i = 0 * 80; i & 24 * 80; i++) {
video_memory[i] = video_memory[i+80];
// 最后的一行数据现在填充空格,不显示任何字符
for (i = 24 * 80; i & 25 * 80; i++) {
video_memory[i] =
// 向上移动了一行,所以 cursor_y 现在是 24
cursor_y = 24;
显示字符串
那么屏幕显示字符串呢?我们可以先实现屏幕显示一个字符的函数,那么屏幕显示一个字符串不就可以了么。这几个函数的实现如下:
void console_putc_color(char c, real_color_t back, real_color_t fore)
uint8_t back_color = (uint8_t)
uint8_t fore_color = (uint8_t)
uint8_t attribute_byte = (back_color && 4) | (fore_color & 0x0F);
uint16_t attribute = attribute_byte && 8;
// 0x08 是退格键的 ASCII 码
// 0x09 是tab 键的 ASCII 码
if (c == 0x08 && cursor_x) {
cursor_x--;
} else if (c == 0x09) {
cursor_x = (cursor_x+8) & ~(8-1);
} else if (c == '\r') {
cursor_x = 0;
} else if (c == '\n') {
cursor_x = 0;
cursor_y++;
} else if (c &= ' ') {
video_memory[cursor_y*80 + cursor_x] = c |
cursor_x++;
// 每 80 个字符一行,满80就必须换行了
if (cursor_x &= 80) {
cursor_x = 0;
cursor_y ++;
// 如果需要的话滚动屏幕显示
// 移动硬件的输入光标
move_cursor();
void console_write(char *cstr)
while (*cstr) {
console_putc_color(*cstr++, rc_black, rc_white);
void console_write_color(char *cstr, real_color_t back, real_color_t fore)
while (*cstr) {
console_putc_color(*cstr++, back, fore);
代码里唯一需要注意的便是输出后要检查当前的位置和判断一些特殊的符号表示的操作,例如换行之类的实现。同时一定要注意修改存储当前位置的两个变量和移动屏幕上的光标,而且屏幕输出满了以后要上滚。我们暂时不考虑诸如屏幕翻页之类的功能。至于屏幕输出十六进制数字和十进制数字的函数请大家自己实现,相信这并不困难。
测试屏幕操作函数
屏幕的操作到这里就告一段落了,我们修改下初始化函数,感受一下今天的成果吧。
#include "console.h"
int kern_entry(multiboot_t *mboot_ptr)
console_clear();
console_write_color("Hello, OS kernel!\n", rc_black, rc_green);
编译运行,干净的屏幕上出现了我们绿色的文字,还有下一行闪烁着的输入光标。
本章的内容到这里就结束了,下一章我们缓缓脚步,来完成一些更重要的模块。
& Since 2012
醉且听风吟 诗酒趁年华
Powered by[转]xshell的快捷键(非常实用)_Linux - Vckai的个人技术博客. - Vckai.com
& & [转]xshell的快捷键(非常实用)
[转]xshell的快捷键(非常实用)
ctrl + d& && &删除光标所在位置上的字符相当于VIM里x或者dl
ctrl + h& && &删除光标所在位置前的字符相当于VIM里hx或者dh
ctrl + k& && &删除光标后面所有字符相当于VIM里d shift+$
ctrl + u& && &删除光标前面所有字符相当于VIM里d shift+^
ctrl + w& && &删除光标前一个单词相当于VIM里db
ctrl + y& && &恢复ctrl+u上次执行时删除的字符
ctrl + ?& && &撤消前一次输入
alt&&+ r& && &撤消前一次动作
alt&&+ d& &&&删除光标所在位置的后单词
ctrl + a& && &将光标移动到命令行开头相当于VIM里shift+^
ctrl + e& && &将光标移动到命令行结尾处相当于VIM里shift+$
ctrl + f& && &光标向后移动一个字符相当于VIM里l
ctrl + b& && &光标向前移动一个字符相当于VIM里h
ctrl + 方向键左键& & 光标移动到前一个单词开头
ctrl + 方向键右键& & 光标移动到后一个单词结尾
ctrl + x& && & 在上次光标所在字符和当前光标所在字符之间跳转
alt&&+ f& && &跳到光标所在位置单词尾部
ctrl + t& && & 将光标当前字符与前面一个字符替换
alt&&+ t& &&&交换两个光标当前所处位置单词和光标前一个单词
alt&&+ u& &&&把光标当前位置单词变为大写
alt&&+ l& && &把光标当前位置单词变为小写
alt&&+ c& && &把光标当前位置单词头一个字母变为大写
^oldstr^newstr& & 替换前一次命令中字符串& &
历史命令编辑
ctrl + p& &返回上一次输入命令字符
ctrl + r& && & 输入单词搜索历史命令
alt&&+ p& &&&输入字符查找与字符相接近的历史命令
alt&&+ && &&&返回上一次执行命令
ctrl + s& && &锁住终端
ctrl + q& && &解锁终端
ctrl + l& && &&&清屏相当于命令clear
ctrl + c& && & 另起一行
ctrl + i& && & 类似TAB健补全功能
ctrl + o& && &重复执行命令
alt&&+ 数字键&&操作的次数
#c+l&&清屏先
minuit@suse:~&str1 str2 str3&&#输入三个单词发现第一单词需要大写好按c+a跳到开头按a+c
minuit@suse:~& Str1 str2 str3&&#好现在单词就变成了现在这个样子,又发现第二个单词要全大写(这样的命令真是玩死人:( )好吧如果你当前光标在第二个单词,那直接a+u把这个单词改变,如果不在的话那按住c+a接着c+f跳到第二个单词那再a+u就OK了结果像下面所示。
minuit@suse:~& Str1 STR2 str3& &#我想换过来怎么办我的位置已经在最后一个单词这个好办按住a+2+b哈哈跳到了第二个单词再来一下a+l这下第二个单词全小写了
minuit@suse:~& welcome to chinaunix!& &#不就是变个大小写吗? 按住c+a接着a+3+c看看效果
minuit@suse:~& Welcome To Chinaunix!&&#GOOD很简单
我们再来试试替换
minuit@suse:~& Welcome To Chinaunix!&&#还是这三单词c+a跳到开头再接着跳到第二个单词那(因为a+t只能跟前一个单词做替换所以不能在第一个单词按a+t)按住a+t
minuit@suse:~& To Welcome Chinaunix!&&#现在成这样子的了如果我用再按a+2+t那又变了一个样
minuit@suse:~& Chinaunix!&&Welcome To& &#好了来一点比较常用的
minuit@suse:~&ls /tmp/& && && && && &#看看下面有些什么
file1 file2 file3 ..... ..&
minuit@suse:~&^ls^cd& && && &#现在再又想进入目录很简单的健入替换命令就行了在命令很长时用这个替换可以省掉很多按a+b或a+f的时间
minuit@suse:/tmp&& &#进入了tmp目录了
跳转的命令就不试了大家自己体会试也看不见^_^&&&
------------------------------------------------------------------------------
Ctrl + a 可以快速切换到命令行开始处
Ctrl + e 切换到命令行末尾
Ctrl + r 在历史命令中查找
Ctrl + u 删除光标所在位置之前的所有字符
Ctrl + k 删除光标所在位置之后的所有字符
ctrl + w 删除光标之前的一个单词
Ctrl + d 结束当前输入、退出shell
ctrl + s 可用来停留在当前屏 ctrl + q 恢复刷屏
ctrl + l 清屏
CTRL 键相关的快捷键:
Ctrl + a - Jump to the start of the line
Ctrl + b - Move back a char
Ctrl + c - Terminate the command& //用的最多了吧?
Ctrl + d - Delete from under the cursor
Ctrl + e - Jump to the end of the line
Ctrl + f - Move forward a char
Ctrl + k - Delete to EOL
Ctrl + l - Clear the screen& //清屏,类似 clear 命令
Ctrl + r - Search the history backwards& //查找历史命令
Ctrl + R - Search the history backwards with multi occurrence
Ctrl + u - Delete backward from cursor // 密码输入错误的时候比较有用
Ctrl + xx - Move between EOL and current cursor position
Ctrl + x @ - Show possible hostname completions&
Ctrl + z - Suspend/ Stop the command
Ctrl + h - 删除当前字符
Ctrl + w - 删除最后输入的单词&
ALT 键相关的快捷键:
平时很少用。有些和远程登陆工具冲突。
Alt + & - Move to the first line in the history
Alt + & - Move to the last line in the history
Alt + ? - Show current completion list
Alt + * - Insert all possible completions
Alt + / - Attempt to complete filename
Alt + . - Yank last argument to previous command
Alt + b - Move backward
Alt + c - Capitalize the word
Alt + d - Delete word
Alt + f - Move forward
Alt + l - Make word lowercase
Alt + n - Search the history forwards non-incremental
Alt + p - Search the history backwards non-incremental
Alt + r - Recall command
Alt + t - Move words around
Alt + u - Make word uppercase
Alt + back-space - Delete backward from cursor&
// SecureCRT 如果没有配置好,这个就很管用了。
其他特定的键绑定:
输入 bind -P 可以查看所有的键盘绑定。这一系列我觉得更为实用。
Here &2T& means Press TAB twice
$ 2T - All available commands(common) //命令行补全,我认为是 Bash 最好用的一点&
$ (string)2T - All available commands starting with (string)
$ /2T - Entire directory structure including Hidden one
$ ./2T - Only Sub Dirs inside including Hidden one
$ *2T - Only Sub Dirs inside without Hidden one
$ ~2T - All Present Users on system from &/etc/passwd& //第一次见到,很好用
$ $2T - All Sys variables //写Shell脚本的时候很实用
$ @2T - Entries from &/etc/hosts&& //第一次见到
$ =2T - Output like ls or dir //好像还不如 ls 快捷
Esc + T - 交换光标前面的两个单词
表2-1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 浏览命令行的击键
向前移动一个字符
向后移动一个字符
向前移动一个单词
向后移动一个单词
到当前行的开始
到行的末尾
清除屏幕,并在屏幕顶端留下一行
表2-2中的击键可以用来编辑命令行。
表2-2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 编辑命令行的击键
删除当前内容
删除当前字符
Backspace或Rubout
删除以前内容
删除前一个字符
交换当前字符和前一个字符的位置
交换当前单词和前一个单词的位置
将当前单词变为大写
将当前单词变为小写
首字母大写
将当前单词的首字母变为大写
插入特殊字符
添加特殊字符。例如,按Ctrl+V+Tab可添加一个Tab字符
使用表2-3中的击键可在命令行上剪切和粘贴文本。
表2-3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 在命令行上剪切和粘贴文本的击键
剪切文本到该行末尾
剪切文到该行开头
剪切前个单词
剪切光标前的一个单词
剪切下个单词
剪切光标后的一个单词
粘贴最近的文本
粘贴最近剪切的文本
粘贴早期的文本
轮回到先前剪切的文本并粘贴它
删除一整行
表2-4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 用于文本补全的组合键
用用户名补全文本
用变量补全文本
用主机名补全文本
用命令名(以别名、保留字、shell函数、shell内置命令和文件名的顺序依次检查)补全文本。换句话说,用以前运行过的命令补全这个按键序列
列出可能的补全用户名文本
列出可能的补全环境变量
列出可能的补全主机名
列出可能的补全命令名
表2-5&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 使用命令历史的击键
功 &能& 名
按上和下箭头可步进浏览历史列表中的每个命令行,直到所需的位置(Ctrl+P和Ctrl+N分别有同样的功能)
反向渐进搜索
按下这些键后,输入一个搜索字符串进行反向搜索。输入此字符串后,匹配的命令行即会出现,可以运行或编辑它
前向渐进搜索
与前一个功能相似,只不过是前向搜索
按下这些键后,输入一个字符串进行反向搜索。输入一个字符串并且按Enter键可看到包含该字符串的最近已用命令
与前一个功能类似,只不过是前向搜索
历史列表的开头
到历史列表的第一项
历史列表的末尾
到历史列表的最后一项
Please enable JavaScript to view themac 终端 常用命令
基本命令1、列出文件ls 参数 目录名&&&&&&&&例:&看看驱动目录下有什么:ls /System/Library/Extensions参数 -w 显示中文,-l 详细信息, -a 包括隐藏文件2、转换目录&&&&&
cd&&&&例:想到驱动目录下溜达一圈&&&cd /System/Library/Extensions
3、建立新目录mkdir 目录名&&&&&例:在驱动目录下建一个备份目录 backup&&&&&mkdir /System/Library/Extensions/backup在桌面上建一个备份目录 backup&&&&mkdir /User/用户名/Desktop/backup
4、拷贝文件cp 参数 源文件 目标文件&&&&例:想把桌面的Natit.kext 拷贝到驱动目录中&&cp -R /User/用户名/Desktop/Natit.kext /System/Library/Extensions参数R表示对目录进行递归操作,kext在图形界面下看起来是个文件,实际上是个文件夹。把驱动目录下的所有文件备份到桌面backupcp -R /System/Library/Extensions/* /User/用户名/Desktop/backup
5、删除文件rm 参数 文件&&&例:想删除驱动的缓存&&rm -rf /System/Library/Extensions.kextcache&&&&&rm -rf /System/Library/Extensions.mkext参数-rf 表示递归和强制,千万要小心使用,如果执行了 rm -rf / 你的系统就全没了
6、移动文件mv 文件&&&例:想把AppleHDA.Kext 移到桌面&&&&mv /System/Library/Extensions/AppleHDA.kext /User/用户名/Desktop想把AppleHDA.Kext 移到备份目录中&&&mv /System/Library/Extensions/AppleHDA.kext /System/Library/Extensions/backup
7、文本编辑nano 文件名&&&例:编辑natit Info.plist&&&&&nano /System/Library/Extensions/Natit.kext/Info.plist
命令名&&&&&&&&&&&&&&&&&&&&&& 功能描述&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 使用举例
mkdir&&&&&&&&&&&&&&&&&&&&&&& 创建一个目录&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mkdir dirname
rmdir&&&&&&&&&&&&&&&&&&&&&& &&删除一个目录&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&rmdir dirname
mvdir&&&&&&&&&&&&&&&&&&&&&&&&移动或重命名一个目录&&&&&&&&&&&&&&&&&&&&&&&&&mvdir dir1 dir2
cd&&&&&&&&&&&&&&&&&&&&&&&&&&& &改变当前目录&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cd dirname
pwd&&&&&&&&&&&&&&&&&&&&&&&&&&显示当前目录的路径名&&&&&&&&&&&&&&&&&&&&&&&&&&pwd
ls&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示当前目录的内容&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ls -la
命令名&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&功能描述&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&使用举例
cat&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示或连接文件&&&&&&&&&&&&&&&&&&&&&&&cat filename
od&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示非文本文件的内容&&&&&&&&&&&&od -c filename
cp&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&复制文件或目录&&&&&&&&&&&&&&&&&&&&&&&&cp file1 file2
rm&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&删除文件或目录&&&&&&&&&&&&&&&&&&&&&&&&&rm filename
mv&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&改变文件名或所在目录&&&&&&&&&&&&&&&mv file1 file2
find&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&使用匹配表达式查找文件&&&&&&&&&&&&&find . -name "*.c" -print
file&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示文件类型&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&file filename
命令名&&&&&&&&&&&&&&&&&&&&&&&&&&&&&功能描述&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&使用举例
head&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示文件的最初几行&&&&&&&&&&&&&&&&&&&&&&&head -20 filename
tail&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示文件的最后几行&&&&&&&&&&&&&&&&&&&&&&&tail -15 filename
cut&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示文件每行中的某些域&&&&&&&&&&&&&&&&&cut -f1,7 -d: /etc/passwd
colrm&&&&&&&&&&&&&&&&&&&&&&&&&&&&从标准输入中删除若干列&&&&&&&&&&&&&&&&&&colrm 8 20 file2
diff&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&比较并显示两个文件的差异&&&&&&&&&&&&&&&&diff file1 file2
sort&&&&&&&&&&&&&&&&&&&&&&&&&&&&&排序或归并文件&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&sort -d -f -u file1
uniq&&&&&&&&&&&&&&&&&&&&&&&&&&&去掉文件中的重复行&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&uniq file1 file2
comm&&&&&&&&&&&&&&&&&&&&&&&&显示两有序文件的公共和非公共行&&&&&&&&&&&&&&comm file1 file2
wc&&&&&&&&&&&&&&&&&&&&&&&&&& &统计文件的字符数、词数和行数&&&&&&&&&&&&&&&&&&&&wc filename
nl&&&&&&&&&&&&&&&&&&&&&&&&&&&&&给文件加上行号&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&nl file1 &file2
命令名&&&&&&&&&&&&&&&&&&&&&功能描述&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&使用举例
ps&&&&&&&&&&&&&&&&&&&&&&&&&&&显示进程当前状态&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ps u
kill&&&&&&&&&&&&&&&&&&&&&&&&&终止进程&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&kill -9 30142
命令名&&&&&&&&&&&&&&&&&&&&&&&&&&&功能描述&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&使用举例
date&&&&&&&&&&&&&&&&&&&&显示系统的当前日期和时间&&&&&&&&&&&&&&&&&&&&&&&&&&&date
cal&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示日历&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cal 8 1996
time&&&&&&&&&&&&&&&&&&&&&&&&&统计程序的执行时间&&&&&&&&&&&&&&&&&&&&&&&&&&&&time a.out
网络与通信操作
命令名&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&功能描述&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&使用举例
telnet&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&远程登录&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&telnet hpc.sp.net.edu.cn
rlogin&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&远程登录&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&rlogin hostname -l username
rsh&&&&&&&&&&&&&&&&&&&&&&&在远程主机执行指定命令&&&&&&&&&&&&&&&&&&&&&&&&&&&&&rsh f01n03 date
ftp&&&&&&&&&&&&&&&&&&&在本地主机与远程主机之间传输文件&&&&&&&&&&&&&&&&ftp
rcp&&&&&&&&&&&&&&&&&在本地主机与远程主机 之间复制文件&&&&&&&&&&&&&&&rcp file1 host1:file2
ping&&&&&&&&&&&&&&&&&&&给一个网络主机发送 回应请求&&&&&&&&&&&&&&&&&&&ping hpc.sp.net.edu.cn
mail&&&&&&&&&&&&&&&&&&&&&&&&&&阅读和发送电子邮件&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mail
write&&&&&&&&&&&&&&&&&&&&&&给另一用户发送报文&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&write username pts/1
mesg&&&&&&&&&&&&&&&&&&&&允许或拒绝接收报文&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mesg n
Korn Shell 命令&&&&&&&&&&&&&&
&命令名&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&功能描述&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&使用举例
history&&&&&&&&&&&&&&&列出最近执行过的 几条命令及编号&&&&&&&&&&&&&&&&&&&&&&&history
r&&&&&&&&&&&&&&&&&&&&&&&&&重复执行最近执行过的 某条命令&&&&&&&&&&&&&&&&&&&&&&&&&&&&r -2
alias&&&&&&&&&&&&&&&&&&&&&&&&&&&&给某个命令定义别名&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&alias del=rm -i
unalias&&&&&&&&&&&&&&&&&&&&&取消对某个别名的定义&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&unalias del
命令名&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&功能描述&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&使用举例
uname&&&&&&&&&&&&&&&&&&&&&显示操作系统的有关信息&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&uname -a
clear&&&&&&&&&&&&&&&&&&&&&&&清除屏幕或窗口内容&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&clear
env&&&&&&&&&&&&&&&&&&&&&&&&显示当前所有设置过的环境变量&&&&&&&&&&&&&&&&&&&&&&&&&env
who&&&&&&&&&&&&&&&&&&&&&&&列出当前登录的所有用户&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&who
whoami&&&&&&&&&&&&&&&&&&显示当前正进行操作的用户名&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&whoami
tty&&&&&&&&&&&&&&&&&&&&&&&&&显示终端或伪终端的名称&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&tty
stty&&&&&&&&&&&&&&&&&&&&&&&&&显示或重置控制键定义&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&stty -a
du&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&查询磁盘使用情况&&&&&&&&&&&&&&&&&&&&&&&&&du -k subdirdf /tmp&&&&&&&&&&&&&&&&&&&&&&&&& 显示文件系统的总空间和可用空间
w&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&显示当前系统活动的总信息
Mac OS X 终端命令开启功能
1.Lion下显示资源库 方法一: 显示 在&终端&中输入下面的命令: chflags nohidden ~/Library/
隐藏 在&终端&中输入下面的命令: chflags hidden ~/Library/
方法二: 打开Finder,菜单中选择前往按住option键就会显示资源库项(每次打开都需要重复操作一次)。
2.Finder显示隐藏文件 显示隐藏文件 在&终端&中输入下面的命令: defaults write com.apple.finder AppleShowAllFiles -bool true killall Finder
恢复隐藏文件 在&终端&中输入下面的命令: defaults write com.apple.finder AppleShowAllFiles -bool false killall Finder
3.Xcode卸载 在&终端&中输入下面的命令: sudo /Library/uninstall-devtools &mode=all
为实际安装的目录,默认情况下Xcode安装在/Developer目录下,即可执行 sudo /Developer/Library/uninstall-devtools &mode=all
4.在Finder标题栏显示完整路径 在&终端&中输入下面的命令: defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES killall Finder
5.去掉窗口截屏的阴影 对窗口进行截屏的时候(Command-Shift-4, 空格),得到的图片周围会自动被加上一圈阴影。 如果你不喜欢这个阴影的效果,可以把它关掉。 在&终端&中输入下面的命令: defaults write com.apple.screencapture disable-shadow -bool true killall SystemUIServer
6.强制Safari在新标签中打开网页 Safari是默认支持标签浏览的。但是,我们在页面上点击链接或者在其他应用程序中点击链接的时候, Safari往往是打开了一个新的窗口,导致页面上的Safari窗口过多,不好管理。通过下面这个小窍门, 我们可以让Safari默认是在一个新标签中打开网页。 在&终端&中输入下面的命令: defaults write com.apple.Safari TargetedClicksCreateTabs -bool true
7.改变截屏图片的保存位置 Mac OS提供了非常方便的截屏快捷键,可以让我们非常快速的对整个屏幕、部分屏幕或者应用程序窗口进行截屏。不过,这个截屏功能有一个不足之处,就是只能将截 屏图片保存到桌面。如果我们截取的图片特别多,就会让桌面显得特别凌乱。那有没有办法来修改截屏图片的默认保存位置呢?有。方法非常简单,只要在&终端& 中输入下面的命令就可以了。 defaults write com.apple.screencapture location 存放位置 killall SystemUIServer
在输入命令的时候,将&存放位置&替换成真正的文件夹就可以了。例如,你希望存放到自己用户目录的Screenshots文件夹下,就输入 defaults write com.apple.screencapture location ~/Screenshots
Mac锁屏设置快捷键
如果用户要离开电脑一段时间,可以选择直接把笔记本直接合上。但是这样原先在跑 的进程就会挂起或者结束,如果正在下载,那么下载就被暂停(有时还不能恢复),如果正在提供网络服务,那么因为网络断了,别人也连不上你的笔记本。锁屏可 以解决这个问题,在Windows下用Win+L快捷键就锁屏了,但Mac OS X下一直没有默认的快捷键。
对于像我一样的新手,不要说设置锁屏快捷键,即便要使用其他锁屏的方法我也要到网上才能找到。其中一种方法是,首先在Finder找到&钥匙串访 问&这个实用工具(具体位置是/Applications/Utilities/Keychain Access.app),然后在&偏好设置&里选择&在菜单栏中显示钥匙串状态&。这时我们发现系统菜单多了一个像锁一样的小图标,只要点击它,就能找到 锁屏。
上述的方法实现了锁屏,但还没能达到快捷键控制锁屏的目标。虽然如此,但它的效果给我们一个锁屏思路。首先,我们要求屏幕保护程序在恢复时必须输入密码,然后锁屏问题就变成启动屏幕保护程序的问题了。这篇文章叙述了具体的实施方法。
第一步,找到&系统偏好设置&下的&安全性与隐私&,在&通用&页里勾上&进入睡眠或开始屏幕保护程序后立即要求输入密码&。
第二步,要用快捷键启动屏幕保护程序,相对复杂一点。在&应用程序&里找到&Automator&。新建一个服务,在&操作&下的&实用工具&里找 到&启动屏幕保护程序&,并把此操作拖动到右边,并且选择&没有输入&和位于&任何应用程序&,如下图所示。然后把服务保存为自己定义的名字。
最后,在&系统偏好设置&里找到&键盘&,然后为刚才定义的服务配置快捷键,我设成了Command+Control+L。
阅读(...) 评论()}

我要回帖

更多关于 手机qq如何清屏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信