- 版权说明:重拾Linux笔记,禁止转载哈。
- 关于勘误:如有错误,请直接回复批评与指教。笔者会及时更新滴。
- 关于重拾:笔者自我感觉对LinuxOS理解不够深入,尴尬ing。想从以下两方面入手给自己一些启发:
- Linux应用面(完结)
- Linux内核面(整理中)
- 重拾目的:笔者从事工作侧重于大吞吐量高性能分布式系统,对服务端优化部分理解不够深入,虽然现在找到一些突破方向,但是希望自己能够在OS层面找到一些突破口。目前纯YY
Linux应用面
权限命令:
- chown :改变文件拥有者。/etc/passwd 必须存在
- chown chaoli.lcl:users
- chgrp :改变文件所属群组。/etc/group必须存在
- chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
- chmod 644 .bashrc
- chmod u=rwx,go=rx .bashrc
目录:
- 目录的权限r,x通常配合在一起使用,但w权限需要慎重。
- x目录权限意味着可以进入cd到目录进行工作。
文件格式:
- 指令属于二进制文件(binary)
- 可读取的纯文本档(ASCII)
- last 读取 数据格式文件(data)
- -文件,d目录,l连结档,b硬盘软盘等存储接口设备(dev/sda),c键盘鼠标一次性读取的接口设备。
- s数据接口文件支持socket通信(var/run),p(FIFO.pipe)特殊的文件类型主要解决多程序同时存取一个文件所造成的错误问题。
查询系统版本:
- uname -r查询linux核心版本号
- lsb_release -a 查询LSB版本,以及distribution
目录操作:
- . 代表此层目录
- .. 代表上一层目录
- - 代表前一个工作目录
- ~ 代表『目前使用者身份』所在的家目录
- ~account 代表 account 这个使用者的家目录(account是个帐号名称)
- cd:变换目录
- pwd:显示目前的目录 pwd -P显示真实的物理目录
- mkdir:创建一个新的目录 -p递归父目录, -m 增加权限
- rmdir:删除一个空的目录 -p递归父目录, -r 递归删除
打印出系统变量:
- echo $PATH
文件与目录管理
- ls -al -full-time ~
cp -i 存在是否覆盖 -a附带所有属性,即复制之后权限不变 -r递归 -l实体连结 -s符号链结[捷径,快捷方式,-d复制捷径] -u 复制差异文件
是否需要完整的保留来源文件的资讯?
- 来源文件是否为连结档 (symbolic link file)?
- 来源档是否为特殊的文件,例如 FIFO, socket 等?
- 来源档是否为目录?
rm -f忽略文件不存在的警告 -i互动问答 -r递归
mv -f强势覆盖 -i互动询问 -u 目标文件存在且source比较新才会升级
获取文件名或目录名
- basename 获取文件名 dirname获取目录名 用户home目录为.
文件内存查阅
- cat -n加印行号[-b排除空行号] -A完整显示(包含特殊字符)
- tac 相反输出
- nl(添加行号列印) -b指定行号指定的方式(a空白行显示 t忽略空白行显示) -n指定行号表现的方式(ln行号左边显示,rn行号右边显示且不加0,rz在右边显示且加0)-w行号栏位占用的位数
- more(一页一页的翻动)
- 空白键 (space):代表向下翻一页;
- Enter :代表向下翻『一行』;
- /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
- :f :立刻显示出档名以及目前显示的行数;
- q :代表立刻离开 more ,不再显示该文件内容。
- b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用
- less
- 空白键 :向下翻动一页;
- [pagedown]:向下翻动一页;
- [pageup] :向上翻动一页;
- /字串 :向下搜寻『字串』的功能;
- ?字串 :向上搜寻『字串』的功能;
- n :重复前一个搜寻 (与 / 或 ? 有关!)
- N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
- q :离开 less 这个程序;
- head(取出前几行) -n (可以跟上负数)
- tail(取出末尾几行) -n -f持续侦测内容(ctr+c跳出)
- od(非纯文档展示) -t(a默认的字节,c使用ASCII,dfox[size]不同进制输出)
修改文件时间或建置新档
ls -l -time=[atime,ctime,mtime]
- mtime默认的,文件内容变更的时间
- atime文件被查看访问的时间
- ctime文件权限属性变更的时间
- 全部cp是不会绝对完整的复制,ctime排除。
范例三:修改案例二的 bashrc 文件,将日期调整为两天前
[root@www tmp]# touch -d "2 days ago" bashrc
# 不过, ctime 并没有跟著改变喔!
范例四:将上个范例的 bashrc 日期改为 2007/09/15 2:02
[root@www tmp]# touch -t 0709150202 **重点内容**bashrc
[root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
# atime 与 mtime 都改变了,但是 ctime 则是记录目前的时间!-t参数影响ctime。而-d不影响
文件、目录的默认权限和隐藏权限
- umask 002 减去-———w-权限 = -rw-rw-r–
- 文件的默认权限:666 目录的默认权限是777
文件隐藏属性
- lsattr -a将隐藏档的属性也秀出来 -d如果是目录,仅列出目录本身的属性 -R连同子 目录的数据也一并列出来
- chattr [+-=] i让文件无法被更动,系统安全性 a文件只能添加数据,而不能删除修改
文件特殊权限s,t
- SUID 用户更改密码passwd命令。会暂短得到owner的权限
SUID 权限仅对二进位程序(binary program)有效;
- 运行者对於该程序需要具有 x 的可运行权限;
- 本权限仅在运行该程序的过程中有效 (run-time);
- 运行者将具有该程序拥有者 (owner) 的权限。
SGID支持目录 会暂短得到group的权限
- 对于文件
- SGID 对二进位程序有用;
- 程序运行者对於该程序来说,需具备 x 的权限;
- 运行者在运行的过程中将会获得该程序群组的支持!
- 对于目录
- 使用者若对於此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
- 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
- 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文 件,该新文件的群组与此目录的群组相同。
- SBIT 只针对目录有效 例如tmp目录
- 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;
- 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
检测文件类型
- file
- -命令档名的搜寻
- which(寻找[运行档])
- 文件档名的搜寻
- whereis,locate搜索系统文件DB
- updatedb手动升级DB
- updatedb:根据 /etc/updatedb.conf 的配置去搜寻系统硬盘内的档名,并升级 /var/lib/mlocate 内的数据库文件;
- locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字档名。
- find扫硬盘
- find -mtime[+,-] n n天之前之内之间变更的文件
-newer 比该文件还有新的文件档名
-uid -gid -user -group -nouser -nogroup
-name - find ./ser* -exec ls -l {} \;
-exec 之后增加对find结果集进行操作的命令,{}代表find结果集 \;代表结束命令,反斜杠转义
- find -mtime[+,-] n n天之前之内之间变更的文件
vim命令
- :wq! 强制退出并写入。!有强制的意思
- :w [filename] 另存
- :r [filename] 光标处读入整个文件
:! command 暂时离开vi到指令模式下执行command :! ls /home
一般模式指令:
行操作:删除dd , 复制yy ,粘贴pp
字符操作:x删除
搜素:/kill -9 %1 杀死vim进程
区域选择(Visual Block)
- [ctrl]+v 进入区域选择
- 移动光标后,y复制到寄存器。
- 移动复制目的光标处,p粘贴
多档案编辑
- vim test1.sh test2.sh
- :files
- :n下一个档案
- :N上一个档案
多窗口
- vim test2.sh
- :sp test.sh
- [ctrl]+w j|k 切换框 重复点击
预设vim环境
vim ~/.vimrc
DOS与Linux文件转换
- DOS断行字符^M$
- Linux断行字符$
- dos2unix [-kn] file [newfile]
- unix2dos -k man.config
中文编码的问题
- linux默认语系 /etc/sysconfig/i18n
- 终端界面bash语系 LANG 。在i18n文件配置
- 档案原来的编码
- 终端软件->设置显示字符编码
语系编码转换
iconv —list
iconv -f big5 -t utf8 vi.big5 -o vi.utf8
正体中文转换简体中文。(需要utf8先转换成本地语系,在从本地语系做出转换)
[root@www vitest]# iconv -f utf8 -t big5 vi.utf8 | \
> iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8
alias 别名
alias ll=‘ls -al’
unalias 别名 取消别名
Bash脚本开发
- tab 第一个字符后面,连续两次,搜索命令。补全命令
- tab 第二个字符后面,补全文件
- 变量配置守则
name=chaoli.lcl echo $name [${name}]
- 变量与变量内容以等号连接
- 等号两边不能直接接空格符
- 变量名称只能是英文字母与数字,但开头不能是数字
- 变量内容若有空格可以使用双引号或者单引号结合起来。
双引号:保持原本特性。内容可继续读变量
单引号:一般的纯文本字符 - \逃脱字符,可以将特殊符号变成一般字符
- 在一串命令中,还需要其他命令提供信息,可以使用反单引号[
命令
],[$(命令)]
version=${uname -r} echo $version
],代表先运行返单引号的命令。运行的结果先输出
ps:反单引号[ - 变量为扩增变量内容时,可用” 变量内容”或者