Linux学习
很棒的linux学习网站http://billie66.github.io/TLCL/book/index.html
为了方便记忆可以用这个:http://www.selflink.cn/links/linux (其实学习其他内容比如python也可以通过www.selflink.cn/links/python访问,同样其他的还有html,js,css,java,php,mysql——使用www.selflink.cn/links制作自己的跳转链接)
为了体验一下linux服务器,又买了一个阿里云,感觉速度确实比Windows Server速度快。于是开始学习linux了。
先从虚拟机开始学。系统centOS,有图形界面。
2016.7.27 学习了几个终端命令还有几个快捷键。
data:显示时间和日期
cal:显示本月日历
df:显示磁盘剩余空间
free:显示内存剩余空间
exit:退出终端
快捷键:
从图形界面转到命令行:按CTRL+ALT+F1~F6
从一个命令行转到另一个命令行:ALT+F1~F6
从命令行回到图形界面:ALT+F7
2016.7.27晚 学习了目录操作的一点知识。
pwd:显示当前目录的路径
ls:显示当前目录的内容 ls -a:显示包括隐藏的内容的当前目录的内容("."开头的是隐藏内容)
cd:改变目录 "."表示当前目录 ".."表示当前目录的父目录 "./"可以省略
cd -:回到上次所在的目录 cd (~username):去往username的家目录,括号中省略表示去往当前用户的家目录
文件名的注意事项:
文件名大小写敏感
文件名没有拓展名的概念
文件名可以包含空格,但是尽量不要这样做,尽量用下划线代替
目录权限注意事项:
家目录是用户唯一有权限写入的目录。
2016.7.29凌晨 学习了ls命令的详解
ls:列出当前目录的内容
ls 指定目录: 列出指定目录的内容
ls 指定目录1 指定目录2 ... : 列出多个目录的内容
ls -l : 以长模式输出内容 ls 指定目录 -ld :显示指定目录的信息(巧妙配合l与d)
ls -i : 显示文件或目录节点号(后续可以用这个查看硬链接的效果,硬链接与原文件节点号相同)
与显示顺序有关: -s:按大小排序 -r:反向 -t:按时间排序
另外-f 和 -h 还不是很懂具体作用是什么。
ls -l 输出格式详解 例如: -rw-r--r-- 1 root root 12314 2017-7-22 11:05 aaa.png
-rw-r--r-- : 文件的访问权限。
第一个字符 文件类型 "-"代表普通文件,"d"代表目录
此后三个字符 文件所有者的权限
再此后三个字符 文件所属组群用户的权限
最后三个字符 其他用户的权限
1 : 文件硬链接的数目(硬链接就像c++里面的引用,符号链接就像Windows里的快捷方式)
root : 文件所有者
root : 文件所属组群
12314 : 文件大小(字节)
2017-7-22 11:05 : 上次修改文件的时间
aaa.png : 文件名
file命令:显示文件类型
less命令:显示文件内容
2016.7.29晚 详细学习less命令和几个目录操作命令
禅语:“less is more.”
less运行后可以查看文件内容。有一些键盘命令需要记住。
键盘命令:
Page UP or b : 向上翻页
Page DOWN or space : 向下翻页
UP Arrow : 向上一行
Down Arrow : 向下一行
g or 1G: 移动到开头
G : 移动到结尾
/characters : 向前查找指定字符串
n : 再次显示刚才的查找
h : 显示帮助
q : 退出less程序
cp : 复制文件 cp -r : 复制文件夹
rm : 删除文件 rm -r : 删除目录及其内容 rm -i : 删除前显示确认信息 rm -v : 删除时显示提示信息 rm -rf : 删除时不显示确认信息
mkdir : 创建目录
mv : 重命名 或 移动文件或目录
ln : 创建硬链接 ln -s : 创建符号链接(目录只能创建符号链接,不能创建硬链接)
2016.7.30早 学习通配符
文件名一定不要有空格,否则使用通配符的时候会遇到很多麻烦事。
基本通配符:
* : 匹配任意多个任意字符(包括0个)
? : 匹配一个任意字符(不包括0个)
[character] : 匹配任意一个属于[]中的字符
[!character] : 匹配任意一个不属于[]中的字符
[[:class:]] : 匹配任意一个属于指定字符类中的字符
常用字符类:
[:alnum:] : 字符和数字类
[:alpha:] : 字母类
[:digit:] : 数字类
[:lower:] : 小写字母类
[:upper:] : 大写字母类
模式 | 匹配对象 |
---|---|
* | 所有文件 |
g* | 文件名以“g”开头的文件 |
b*.txt | 以"b"开头,中间有零个或任意多个字符,并以".txt"结尾的文件 |
Data??? | 以“Data”开头,其后紧接着3个字符的文件 |
[abc]* | 文件名以"a","b",或"c"开头的文件 |
BACKUP.[0-9][0-9][0-9] | 以"BACKUP."开头,并紧接着3个数字的文件 |
[[:upper:]]* | 以大写字母开头的文件 |
[![:digit:]]* | 不以数字开头的文件 |
*[[:lower:]123] | 文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件 |
来源:http://billie66.github.io/TLCL/book/chap05.html
2016.7.30下午 关于命令的相关命令
type : 显示命令类型(命令类型有:一个可执行程序,内建于shell内部的命令,一个shell函数,另一个命令的别名)
which : 显示命令的位置(只对可执行程序的命令有效)
help : 显示命令的帮助文档(只对shell内部命令有效)
command --help : 显示命令帮助文档(对大多数命令有效)
man : 查看命令手册(打开一个命令的文档,打开方式是less) man 5 passwd : 显示passwd手册的第5章节
章节 | 内容 |
---|---|
1 | 用户命令 |
2 | 程序接口内核系统调用 |
3 | C 库函数程序接口 |
4 | 特殊文件,比如说设备结点和驱动程序 |
5 | 文件格式 |
6 | 游戏娱乐,如屏幕保护程序 |
7 | 其他方面 |
8 | 系统管理员命令 |
来源:http://billie66.github.io/TLCL/book/chap06.html
apropos : 搜索基于某个关键字的命令手册 与 man -k 效果相同
whatis : 搜索特定关键字的命令手册
2016.8.2凌晨 突然想起来两天没学linux了,继续学习……
info : 还不是很会用
在一行里执行多个命令,命令之间用分号隔开。
alias name='string' : 给命令起别名(可以先用type string检测这个名字是否被用过了),不过这样起的别名只能持续到终端关闭之前
unalias name : 删除别名
2016.8.2晚 重定向
重定向标准输出 : 命令后面加上 >filename ,命令的运行结果会输出到文件里,而且会覆盖原来的内容。(可以用 >filename 命令来快速创建一个空文件)
>>filename 不会覆盖原来的内容,而是在文件末尾添加内容。
重定向标准错误:命令后面加上 2>filename ,如果在>filename后面加的话,可以写2>&1,把标准错误定向到与重定向的输出同一个文件。
还有一种更方便的写法 &>filename 让标准输出与标准错误联合定向。(但是&>>不行)
一个特殊的定向位置——位存储桶: >/dev/null :什么也不输出,就好像什么都没有发生一样。(用于隐藏一些输出信息)
cat : 连接文件/输出文件内容 不带参的时候等待键盘输入(Ctrl+d代表结束输入EOF标志) 可以与重定向联合使用
cat filename 与 cat <filename 效果差不多,以后会看到一些区别。
管道线:
命令的运行结果输送到less,方便查看 : type cd | less
过滤器,多个管道线连接成的处理输出的管道,例如排序 : ls /bin /usr/bin | sort | less
uniq管道 : 删除相邻的重复行 | sort | uniq | less : 删除所有重复行,用less显示
uniq -d : 显示重复列表
wc : 显示文件行数、字、字节数 wc -l : 只显示行数
小例子: ls /bin /usr/bin | sort | uniq | wc -l 显示去重之后的行数
2016.8.3晚 继续学习新的命令,现在命令多了一个功能——充当管道
grep pattern [file...] : 输出匹配模式的文本
grep -i : 大小写不敏感 grep -v : 输出不匹配的内容
充当管道的例子 : ls /bin /usr/bin | sort | uniq | grep zip 输出目录下带zip的文件名
head/tail : 打印内容的前/后十行
-n number : 打印number行
tail有一个-f选项,可以实时浏览内容的变化,直到你输入Ctrl+c(查看日志信息很方便)
tee : 在管道的过程中可以用 | tee filename | 管道把中间结果放进filename里
2016.8.5晚 echo命令
echo : 把后面的内容输出到屏幕上(也可以重定向)
可以使用通配符 echo * : 显示当前目录所有的文件和目录(*字符的展开) echo .* : 显示当前目录所有的隐藏文件 echo ~ : 输出家目录 当然其他的通配符也可以。
算数表达式的计算 : echo $((expression)),如echo $((2+2)) 会输出4
只支持整数运算,运算符有+-*还有%(取模)、**(取幂)、/(整除)
大括号的展开:echo num{1..5} 会输出num1 num2 num 3 num4 num5
大括号可以嵌套:echo {a{1,2},b{1,2}} 会输出a1 a2 b1 b2
大括号可以组合:echo {2015,2016}-{1..12}
--以上通配符不仅可以在echo里用,同样也可以用于别的命令(比如快速创建一系列文件夹)
变量:echo $USER 会输出用户名,因为$USER这个变量里存储了用户名
要查看有效的变量名可以用printenv | less 命令
2016.8.6下午 命令替换
昨天学习了几种展开,包括*展开,~展开,表达式展开,变量展开。今天学习的命令替换其实就是一个命令的输出可以展开。
echo $(ls) : 把ls命令输出的内容输出到屏幕上。
其实echo只是测试一下这个展开,使用展开真正的强大之处在于与其他命令的配合。
比如 ls -ld $(which cp) : 居然显示了cp命令的信息,而我们其实并不知道cp的目录位置,就是因为我们配合了which命令找到了cp的位置,然后显示了cp的文件信息。
再比如 file $(ls hello*) : 显示当前目录下每一个以hello为开头的文件的类型信息。
在一些旧版shell中,也可以用倒引号代替美元和括号,如ls -ld `which cp`
2016.8.7晚 继续学习shell中字符串的控制
书中写了两个很典型的例子:
echo this is a test
输出:this is a test
echo $100 money
输出:00 money
上面显然输出的不是我们想输出的,类似尴尬的情况还有带空格的文件名。
所以需要有控制的方法:
1.双引号。"two words.txt"这个就可以代表一个文件名了
但是双引号中的变量和命令都可以正常展开。如echo "$USER's cal : $(cal)"
而且,有趣的是,有些情况只有这样才能正常展开。比如echo $(cal)与echo "$(cal)"效果是不一样的。这是由于参数个数的不同导致的,echo会默认把多个参数之间用一个空格隔开,加了双引号,会被看成一个参数,不加双引号,是多个参数。
2.单引号。禁止所有展开。是什么就是什么。
3.在双引号里手动禁止展开。转义字符。让echo解释转义字符可以加-e参数。如echo -e "\$5.00 dollors\nhello"。与C语言转义字符差不多。
2016.8.8晚 键盘操作技巧
clear : 清空屏幕(Ctrl + l)
快捷键:
按键 | 行动 |
---|---|
Ctrl-a | 移动光标到行首。 |
Ctrl-e | 移动光标到行尾。 |
Ctrl-f | 光标前移一个字符;和右箭头作用一样。 |
Ctrl-b | 光标后移一个字符;和左箭头作用一样。 |
Alt-f | 光标前移一个字。 |
Alt-b | 光标后移一个字。 |
Ctrl-l | 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。 |
Key | Action |
---|---|
Ctrl-d | Delete the character at the cursor location |
Ctrl-t | Transpose(exchange)the character at the cursor location with the one preceding it. |
Alt-t | Transpose the word at the cursor location with the one preceding it. |
Alt-l | Convert the characters from the cursor location to the end of the word to lowercase. |
Alt-u | Convert the characters from the cursor location to the end of the word to uppercase. |
按键 | 行动 |
---|---|
Ctrl-k | 剪切从光标位置到行尾的文本。 |
Ctrl-u | 剪切从光标位置到行首的文本。 |
Alt-d | 剪切从光标位置到词尾的文本。 |
Alt-Backspace | 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。 |
Ctrl-y | 把剪切环中的文本粘贴到光标位置。 |
来源:http://billie66.github.io/TLCL/book/chap09.html
Tab键自动补全命令(不过在我的CentOS上好像没有什么效果……)
history : 显示历史命令列表
!88 显示第88个历史命令
Ctrl + r 也可以搜索历史命令
表9-5: 历史命令
Ctrl-p | 移动到上一个历史条目。类似于上箭头按键。 |
Ctrl-n | 移动到下一个历史条目。类似于下箭头按键。 |
Alt-< | 移动到历史列表开头。 |
Alt-> | 移动到历史列表结尾,即当前命令行。 |
Ctrl-r | 反向递增搜索。从当前命令行开始,向上递增搜索。 |
Alt-p | 反向搜索,不是递增顺序。输入要查找的字符串,然后按下 Enter,执行搜索。 |
Alt-n | 向前搜索,非递增顺序。 |
Ctrl-o | 执行历史列表中的当前项,并移到下一个。如果你想要执行历史列表中一系列的命令,这很方便。 |
序列 | 行为 |
---|---|
!! | 重复最后一次执行的命令。可能按下上箭头按键和 enter 键更容易些。 |
!number | 重复历史列表中第 number 行的命令。 |
!string | 重复最近历史列表中,以这个字符串开头的命令。 |
!?string | 重复最近历史列表中,包含这个字符串的命令。 |
来源:http://billie66.github.io/TLCL/book/chap09.html
2016.8.9晚
文件模式,代表着文件所有者,文件组所有者,和其他人的读,写,执行权限。
文件属性 | 含义 |
---|---|
-rwx------ | 一个普通文件,对文件所有者来说可读、可写、可执行。其他人无法访问。 |
-rw------- | 一个普通文件,对文件所有者来说可读可写。其他人无法访问。 |
-rw-r--r-- | 一个普通文件,对文件所有者来说可读可写,文件所有者的组成员可以读该文件,其他所有人都可以读该文件。 |
-rwxr-xr-x | 一个普通文件,对文件所有者来说可读、可写、可执行。也可以被其他的所有人读取和执行。 |
-rw-rw---- | 一个普通文件,对文件所有者以及文件所有者的组成员来说可读可写。 |
lrwxrwxrwx | 一个符号链接,符号链接的权限都是虚拟的,真实的权限应该以符号链接指向的文件为准。 |
drwxrwx--- | 一个目录,文件所有者以及文件所有者的组成员可以访问该目录,并且可以在该目录下新建、重命名、删除文件。 |
drwxr-x--- | 一个目录,文件所有者可以访问该目录,并且可以在该目录下新建、重命名、删除文件,文件所有者的组成员可以访问该目录,但是不能新建、重命名、删除文件。 |