(格式提示,标题2,标题3)
(颜色注记:黄色背景:存在问题,需要解决 6666CC背景:终端输出/命令输入 CC66CC背景:文件名或者目录名)
0,开始
最近可能要开始做Linux相关的东西了,于是要安装CentOS。
0.1 黑科技
我一直以为在终端打印出来的信息是无法回调的,今天才知道原来shift_PgUp/PgDn可以上/下翻页。
0.2 部分通用的英语缩写
rc :run command 运行命令
0.3 默认环境
$LANG=en_US.UTF-8
1,CentOS的安装
本身CentOS的安装没有什么复杂的,但是在虚拟机上却遇到了两个问题
1.1 安装错误
在VMWare11里安装CentOS6.4 64Bit的时候,遇到了问题,错误提示:
/etc/rc5.d/s99local : line:25 : eject : command not found
这貌似是由VMWare Tools引起的,但是为何会产生这个错误,还不得而知。至于解决的方法,那就是,在创建虚拟机的时候,不指定系统(相当于跳过了静默安装吧,按照我的理解)
1.2 无法上网
安装好之后,发现ping不通sina,应该是网络连接有问题,于是重装了一下,重装的时候,发现其实是有网络配置的选项的,如下图
把Connect Automatically 勾上就好了,当然了,VMWare设置成NAT模式。
ping通了新浪,如下图
但是,装好的机器应该如何修改来启用上网功能呢,这是个暂时没解决的问题
2015-4-17补充:
当然了如果一开始没有记得去开启这个功能,也是能够配置的,如下
安装了centos之后,ping不通主机
修改配置文件中,把ONBOOT=no改成yes,然后重启就好了(init 6 或# /etc/init.d/network restart )
1.3 man没装
装好系统之后发现,man没装啊
[timi@hibiki ~]$ rpm -q man
package man is not installed
centos默认用户都是大牛,都不用man了吗
这个问题暂时没解决
更新:装一个就好了(忘了已经联网了。。。)
# yum install man
2,Linux常用命令
2.1 账户管理相关命令
adduser 增加一个用户,举例:adduser timi
passwd 设置用户密码,举例:passwd timi
who 查看哪些账户在线
logout 退出登录,没有参数
2.2 查询man
man左上角括号里的数字的含义如下(转自鸟哥的私房菜)
代號 | 代表內容 |
1 | 使用者在shell中可以操作的指令或可执行档 |
2 | 系統核心可呼叫的函数与工具等 |
3 | 一些常用的函数(function)与函数库(library),大部分是C的函数库(libc) |
4 | 装置档案的说明,通常在/dev下的档案 |
5 | 设定档或者是某些档案的格式 |
6 | 游戏(games) |
7 | 惯例与协定等,例如Linux档案系统、网络协定、ASCII code等等的說明 |
8 | 系統管理員可用的管理指令 |
9 | 跟kernel有关的文件 |
在man中,也可以使用一些快捷键,如下
按鍵 | 进行工作 |
空白鍵 | 向下翻一頁 |
[Page Down] | 向下翻一頁 |
[Page Up] | 向上翻一頁 |
[Home] | 去到第一頁 |
[End] | 去到最後一頁 |
/string | 向『下』搜寻 string 這个字串,如果要搜寻vbird 的話,就输入 /vbird |
?string | 向『上』搜寻 string 這个字串 |
n, N | 利用 / 或 ? 來搜寻字串时,可以用 n 來继续下一個搜寻 (不论是 / 或 ?) ,可以利用 N 來进行『反向』搜寻。举例來说,我以 /vbird 搜寻 vbird 字串, 那么可以 n 继续往下查询,用 N 往上查询。若以 ?vbird 向上查询 vbird 字串, 那我可以用 n 继续『向上』查询,用 N 反向查询。 |
q | 结束这次的 man page |
2.3 系统管理相关命令
sync flush file system buffers
shutdown 常用用法: shutdown -h now 停掉系统服务后立即关机(常用)
init 0切换等级(切换到0,相当于关机)
init 6 切换等级(切换到6,相当于重启)(这样重启或关机的优缺点未知)
dmesg 显示开机信息
runlevel查看系统运行等级
date 设置时间的命令,date 显示时间,date -s 设置时间,设置时间需要root,如下
可以使用+来格式化输出,例如
2.4 文件管理相关命令
chgrp 改变一个档案的组群
chown 改变所有者,例如 chown root:root xxx.txt
chmod 用数字的方式改变档案的权限,其中r=4,w=2,x=1,那么chmod 777 xxx.txt之后,xxx.txt的权限就变成了rwxrwxrwx
chmod 用符号的方式改变档案的权限
cd 切换目录,包括
. 当前目录
.. 上级目录
- 前一个么目录
~ 用户的Home目录
pwd 打印工作目录,
Print Working Directory
-P参数:打印实际的目录名称,而不是链接。例如,在/var/mail下输入pwd,则返回/var/mail,而输入pwd -P ,则返回/var/spool/mail
ll (两个小写L):是ls -l的缩写
ls 命令,列出目录内容
-d 参数:列出目录本身的属性,而不是目录里的内容的属性
rm 删除档案或目录(注意:rm是直接删除档案,而不会询问(centos),删掉后,非常不容易恢复)
-i 参数:互动模式,在删除之前会询问
-r 参数:删掉目录
basename/dirname 分别获得后面所跟的参数的文件名和目录名,注意:他不会判断参数的有效性,例如
$ls
12012 17001
$basename 12012
12012
$dirname 17001
.
$dirname /null/unexist/arimasenn
/null/unexist
$basename xxxxx
xxxxx
$dirname xxxxx
.
cat (是Concatenat的缩写)打印文本文件内容
-n 参数:显示行号
more一屏一屏显示
less一屏一屏显示,但是相对于 more,可以上翻页和搜索
在less中,可以进行操作的按键有
空格/PageDown:向下翻
PageUp:向上翻
/字符串: 向下搜索字符串
?字符串:向上搜索字符串
q:离开
head显示一个文件的前若干行,例如head -n 3 xxx.txt,则打印出xxx.txt的前三行
file系统判断文件的格式类型
which寻找执行档的位置
ln 建立硬链接,使用-s参数建立符号链接
grep Globally search a Regular Expression and Print
2.5 打包与压缩命令
gzip压缩命令
参数:
-d 解压缩
-c 将结果输出到标准
举例:
gzip 3.txt 将3.txt压缩为3.txt.gz,压缩后,3.txt不再存在
gzip 3.txt -c >3.txt.gz ,压缩后,3.txt仍然存在
gzip -d 3.txt.gz ,解压缩,解压缩后,3.txt.gz不再存在
gzip -d -c 3.txt.gz >3.txt,解压缩,解压缩后,3.txt.gz仍然存在
tar打包(压缩)命令
参数:
-j 通过bzip2进行压缩/解压缩,此时文件名最好是.tar.bz2
-z 通过gzip的支持进行压缩/解压缩,此时文件名最好是.tar.gz
-c 打包
-x 解压缩
-v 在压缩/解压缩的过程中,显示正在处理的文件名
-f 无论是压缩还是解压缩,紧跟压缩文件名
举例:
tar -jcv -f 3.txt.tar.bz2 3.txt 将3.txt打包成3.txt.tar.bz2
tar -xv -f 3.txt.bar.bz2 解压缩(
貌似如果有重复文件,则覆盖?)
dump
对文件系统进行备份
dd dd也是个逆天的命令,之前曾经用dd命令把img镜像烧录到内存卡里,这样可以在bbxm之类的硬件设备上启动Linux了。在Linux里,dd命令也可以进行文件备份
举例:
dd if=12012 of=12012.back
2.6 数学
seq 生成序列,如下
3,系统基本概念
3.1 系统执行等级
一共有7级,分别是
level 0 halt 关机
level 1 single user mode 单用户维护模式
level 2 Multi-user,without NFS 类似level3,但是无NFS服务
level 3 Full multi-user mode 带有完整的网络功能的纯文本模式
level 4 unused
level 5 x11,加载使用x window
level 6 reboot ,重新启动
3.2 档案属性
可以用ls -al | less命令查看当前目录下的档案属性,得到的列表中条目格式如下
lrwxrwxrwx . 1 root root 3 Apr 2 23:59 fb -> fb0
crw-rw----. 1 root root 29, 0 Apr 2 23:59 fb0
第一字段一般有10个字符(CentOS最后好像还有个点)
其中,第一个字符表征了档案的类型 :具体如下
符号 | 说明 |
---|
d | 说明这是目录 |
- | 说明这是档案 |
l(L) | 这是链接 |
b | 块(block)设备,可供随机存取的接口设备,例如硬盘,软盘 |
c | 字符(character)设备,例如键盘,鼠标 |
例如上面的fb0,类型是个串口设备。
第二个字符开始的9个字符代表权限
→对于档案而言,r代表【可读 read=4】,w代表【可写 write=2】,x代表【可执行 execute=1】,-代表【无相应权限=0】
→对于目录而言,r代表【可列 read=4】,w代表【可写(包括增减移动更名) write=2】,x代表【可切换(cd)入这个目录 execute=1】,-代表【无相应权限=0】
9个字符分为3组,第一组为档案拥有者的权限,第二组为同群组的权限,第三组为其他非本群组的权限。
注:还有一种权限为s,=Set UID,表明执行者在执行的时候,具有拥有者的权限,例如/usr/bin/passwd,其ll为
[timi@hibiki bin]$ ll passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 passwd
第二字段表示到链接到这个iNode的文件名字的数量
第三字段表示拥有者账号
第四字段表示档案所属群组
第五字段表示容量大小
第六字段表示建档日期
第七字段表示名字
3.3 i-node
Linux中通过i-Node来识别不同的文件(而不是通过文件名)。硬盘中会有专门的区域存放i-Node,因此如果i-Node用光而磁盘没用光,此时也是没法再存入文件的。
(吐槽)
Linux中的iNode真是个逆天的东西
1,可以用ln来建立硬链接(实际链接)例如
$ln ./../12012
$ll
-rw-rw-r--. 2 timi timi 77 Apr 3 08:09 12012
硬链接有一些性质
1,多个文件名链接到一个iNode时,ll的第二段就显示这个数量
2,rm掉其中一个文件时,iNode不会消失,仍可以通过其他链接到这个iNode的文件名访问
3,iNode数等于1时,rm掉文件,则文件真的就消失了
4,修改任何一个都会导致实际的文件变化
5,不能跨filesystem link,不能link目录
2,可以用ln -s参数建立符号链接,等同于windows里的快捷方式。
4,系统文件
4.1 /etc
/etc/shadow 存放了系统中所有账号的数据,只有root有权限访问
4.1.1 /etc/skel
skel是skeleton,骨骼的缩写,意为当每个新用户建立后,都会从这里直接复制配置文件。默认的 这个目录下有
.bash_logout
.bash_profile
.bashrc
三个文件
4.2 /usr
注意Linux中的/usr不是user的缩写,而是Unix Software Resource的缩写
4.4 /etc/man.config
使用man命令时,去哪儿寻找数据的路径
4.5 ~/.bash_history
历史命令
4.6 ~/.bash_logout
当注销bash时,需要做什么工作
4.7 /etc/sudoers
文件,里面存放了能够执行sudo的用户
4.8 /var
var目录存放在系统运行过程中,大小会发生改变的数据。
4.8.1 /var/spool
sp spool是Simultaneous Peripheral Operations On-Line的缩写,又叫"假脱机”,放置“假脱机”程序,例如news,mail,打印队列等
5,shell/bash
5.1 bash
bash是Linux的预设shell
5.1A 如何自定义bash的颜色
在PS1中设置字符颜色的格式为:\[\e[F;Bm\],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47。颜色表如下:
F B 颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
执行下面的命令,会将当前用户的shell的PS1改成红色,而其他的地方不变
如果想让用户登录后,就自动执行这个,则修改~/.bashrc文件,如下
这样就能自动修改颜色了
5.1B 别名
可以用alias命令为命令设置一个别名,例如
alias rm='rm -i' 这样在删除文件的时候,就有交互式提示了。
alias指定的别名,在
logout之后就失效了。如果想一直可以使用这样的alias,则编辑
~/.bashrc文件,并重新登录或
source ~/.bashrc
没有带参数的
alias命令则用来查看系统中已经有的alias,例如:
可以看到,
ls='ls --color=auto',如果单独执行
/bin/ls,则不会有颜色,而执行ls,则会有颜色
5.1C 命令的历史记录
bash会把上一次logout之前使用过的命令放在文件~./.bash_history中。
通过!!命令可以执行上一次执行过的命令,相当于按上方向键+回车。
5.1D 登录提示
可以在/etc/issue文件中指定登录提示,如下图所示
5.1E bash中的快捷键
可以用
stty -a(全拼是setting tty)命令来查看当前bash中的快捷键,在这之中,常用的几个命令解释如下:
1,eof 代表end of file,结束输入
2,erase 向后删除字符(但是实际测试中貌似是相当于windows里的撤销功能)
3,intr 中断
4,kill 删除当前列的命令,默认是ctrl+U
5,quit 送出quit信号给当前程序
6,start 当屏幕输出停止时,start可以让输出继续。默认是ctrl+Q
7,stop 停止目前屏幕的输出。默认是Ctrl+S,在bash中按下Ctrl+S后,屏幕就不再输出任何东西。但是会保存起来,当执行start时,继续输出。
8,susp 暂停当前命令,默认是ctrl+Z
5.2 变量
关于变量的若干说明
1,变量内有空格时,要用单引号或者双引号引起来,但是之间有区别:单引号之内的是纯文本,双引号之内的变量会再次被解析
例如
$msg=hello world
-bash: world :command not found//必须要有引号包围
5.3 系统变量
可以用env命令来查看系统环境变量,用set查看自定义变量,区别在于能否被子程序继承(
是吗?)。
一般来说,自定义的变量是不能被子程序继承的,例如下面的程序,在黄线后,export了一下,在子程序(新的bash)中,就能获得msg的信息了。
Linux中(?)变量分为3种
1,内部变量,例如$0,$$
2,shell变量,使用set命令查看shell变量
3,环境变量,使用env命令查看环境变量
注意,可以使用export命令将shell变量变成环境变量
5.3A bash的login shell
bash的login shell情况下读取的整体配置文件只有
/etc/profile,但是
/etc/profile还会呼叫出其他的配置文件,让bash接口更加友善。在之后,就读取使用者的个人配置文件,包括
1,
~/.bash_profile
2,
~/.bash_login
3,
~/.profile
只会读取一个,例如,存在1时,就读取1,而忽略2和3
在执行过程中,可以用
. 或者
source命令读取配置文件并更新,例如下例:
在
~/.bashrc中将PS1更改后,不用
logout,就可以更新了
5.4 数组
数组的定义可以直接用xxx[1]的赋值表达式定义,但是在使用时,推荐用${xxx[1]}的完整形式以避免bug,例如下面
似乎就没有将$msg[1]解析正确。
5.5 管道命令
|
说明:
1,管道命令只处理standard output,不处理standard error output
2,管道命令必须要接受来自前一个指令的数据继续处理
5.6 grep命令和正则表达式
在~/.bashrc中设置alias:
grep --color=auto则可以一直显示颜色。
参数:
-n 显示行号
注意:
在grep的参数中,^代表行首,$代表行尾。
在正则表达式中,如果需要有 . ! { } 等符号时,应该用转义符号 \ 进行连接。
5.7 sed命令
sed是stream editor的缩写。
5.8 AWK
awk是三个人名的缩写 :Aho、(Peter)Weinberg和(Brain)Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。
吐槽不能。。。
1
参考文献:
1,鸟哥的Linux私房菜
2,http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html Linux的iNode的理解
3,http://www.cnblogs.com/menlsh/archive/2012/08/27/2659101.html 修改linux终端命令行颜色
4,http://www.it165.net/os/html/201405/8390.html Linux的环境变量以及set env export的区别
5,http://tieba.baidu.com/p/1556285735 关于后台(&)运行,ctrl+z,和fg命令
6,http://blog.csdn.net/jackalfly/article/details/7571616 #!/bin/bash
7,http://bbs.csdn.net/topics/350122470 在WINDOWS系统上自己编译LINUX内核,然后安装到另一台windows的电脑上去,太不可思议了,高难度。。。
在WINDOWS系统上自己编译LINUX内核,然后安装到另一台windows的电脑上去,太不可思议了,高难度。。。
在WINDOWS系统上自己编译LINUX内核,然后安装到另一台windows的电脑上去,太不可思议了,高难度。。。