linux基础
一:用户登录
root用户:管理员账户,也被称为超级用户,root拥有对Linux系统的所有权限,甚至可以把自己杀死(rm -rf /*),除非必须,一般不用root用户登录系统
普通用户:权限受到限制,只可以对自己有权限的文件进行操作
二:终端(terminal)
终端:
- 设备终端:鼠标,键盘,显示器
- 物理终端:控制台(/dev/console)
- 虚拟终端:/dev/tty[1-6] 在物理机旁边可以使用Alt+F【1-6】进行切换
- 串行终端:/dev/ttyS
- 伪终端:/dev/pts/# 通过ssh远程即可打开一个伪终端
ps:可以使用#tty命令来查看当前终端
[root@centos6 ~]#tty /dev/pts/0
交互式接口
交互式接口:启动终端后,在终端设备附加一个交互式应用程序
- GUI:Graphic User Interface,及图形化窗口,常见图形桌面有GNOME、KDE和XFCE等,CentOS默认为GNOME桌面
- CLI:Command Line Interface,及命令行窗口,常用的shell有sh、csh、tcsh、ksh、bash和zsh等,默认shell为bash
[root@centos6 ~]#cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh
可以看到系统支持的shell
shell:
shell也被称为LINUX的命令解释器(command interpreter)。是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。同时shell也是一种高级程序设计语言,即bash脚本语言
bash:
GNU Bourne-Again Shell(bash)是GNU计划中重要的工具软件之一,目前也是Linux标准的shell,与sh兼容。同时也是CentOS的默认shell。
[root@centos6 ~]#echo $SHELL /bin/bash
命令提示符
管理员的是#,普通用户为$。使用echo $PS1可以查看当前用户的提示符格式,也可以修改变量或者写入/etc/profile.d/file.sh来自定义用户提示符。
PS1="\[\e[1;33m\][\u@\h \W]\\$ \[\e[0m\]"
常用参数:
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
\! 命令历史数
\# 开机后命令历史数
三:命令(COMMAND)
命令分类
shell中的命令有俩类,内部命令和外部命令,使用help或enable可以列出内部命令列表。
内部命令:由shell自带,而且通过某命令形式提供
enable
cmd 启用内部命令
-n cmd 禁用内部命令
-n 查看所有已禁用的内部命令
外部命令:在文件系统路径下有对应的可执行文件,可使用:which --skip-alias cmd 查看命令可执行文件的路径
[root@centos6 ~]#which --skip-alias ls /bin/ls
ps:使用type命令可以判断命令是内部命令还是外部命令,如果显示路径则是外部命令
[root@centos6 ~]#type pwd pwd is a shell builtin [root@centos6 ~]#type ls ls is aliased to `ls --color=auto'
Hash缓存
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找。利用hash缓存表可大大提高命令的调用速率。
hash
-l 显示hash缓存
-p path cmd 将命令全路径path起别名为cmd
-t cmd 打印缓存中name的路径
-d cmd 清除cmd缓存
-r 清除全部缓存
命令别名(alias)
alias 显示当前shell中已定义的命令别名
CMD=‘VALUE’ 定义别名
unalias name取消别名
-a 取消所有别名
如果想永久生效需要写入~/.bashrc(对当前用户生效)或/etc/bashrc(对所有用户生效,全局),不建议修改全局配置文件
ps: 使用source或.可重读配置文件,使其立即生效
如果别名和原命令名重名,使用双引号、单引号或者\来执行原命令
命令格式
COMMAND [OPTIONS...] [ARGUMENTS...]
选项分为长选项和短选项,如下,执行结果是一样的
[root@centos6 ~]#ls -a . clear .gnome2 install.log.syslog .pulse-cookie .. .config .gnote .kde .ssh .abrt .cshrc .gnupg .local .tcshrc anaconda-ks.cfg .dbus .gstreamer-0.10 motd Templates .bash_history Desktop .gtk-bookmarks Music Videos .bash_logout Documents .gvfs .nautilus .viminfo .bash_profile Downloads .ICEauthority Pictures .Xauthority .bashrc .esd_auth .imsettings.log Public .cache .gconf install.log .pulse [root@centos6 ~]#ls --all . clear .gnome2 install.log.syslog .pulse-cookie .. .config .gnote .kde .ssh .abrt .cshrc .gnupg .local .tcshrc anaconda-ks.cfg .dbus .gstreamer-0.10 motd Templates .bash_history Desktop .gtk-bookmarks Music Videos .bash_logout Documents .gvfs .nautilus .viminfo .bash_profile Downloads .ICEauthority Pictures .Xauthority .bashrc .esd_auth .imsettings.log Public .cache .gconf install.log .pulse
参数是命令的作用对象,如文件名、用户名等
[root@centos6 ~]#id root uid=0(root) gid=0(root) groups=0(root)
ps:
- 多个选项以及多参数和命令之间使用空白字符分隔
- 取消和结束命令执行:Ctrl+c,Ctrl+d
- 多个命令可以用;符号分开
- 一个命令可以用\分成多行
日期和时间
Linux分为俩种时钟,系统时钟和硬件时间,系统时间由CPU振荡器计时,硬件时间为主板BIOS时间
date 可以用来显示或设定系统的日期与时间。
-d<字符串>:显示字符串所指的日期与时间。 -s<字符串>:根据字符串来设置日期与时间。
%H 小时(以00-23来表示)。 %I 小时(以01-12来表示)。 %K 小时(以0-23来表示)。 %l 小时(以0-12来表示)。 %M 分钟(以00-59来表示)。 %P AM或PM。 %r 时间(含时分秒,小时以12小时AM/PM来表示)。 %s 总秒数。起算时间为1970-01-01 00:00:00 UTC。 %S 秒(以本地的惯用法来表示)。 %T 时间(含时分秒,小时以24小时制来表示)。 %X 时间(以本地的惯用法来表示)。 %Z 市区。 %a 星期的缩写。 %A 星期的完整名称。 %b 月份英文名的缩写。 %B 月份的完整英文名称。 %c 日期与时间。只输入date指令也会显示同样的结果。 %d 日期(以01-31来表示)。 %D 日期(含年月日)。 %j 该年中的第几天。 %m 月份(以01-12来表示)。 %U 该年中的周数。 %w 该周的天数,0代表周日,1代表周一,异词类推。 %x 日期(以本地的惯用法来表示)。 %y 年份(以00-99来表示)。 %Y 年份(以四位数来表示)。 %n 在显示时,插入新的一行。 %t 在显示时,插入tab。 MM 月份(必要) DD 日期(必要) hh 小时(必要) mm 分钟(必要) ss 秒(选择性)
hwclock, clock : 显示硬件时钟
-s, --hctosys以硬件时钟为准,校正系统时钟
-w, --systohc以系统时钟为准,校正硬件时钟
tzselect(CentOS6.x)
timedatectl(CentOS7.x)
list-timezone 列出所有时区
set-timezone “时区” 设置时区
status 列出当前时区
/usr/share/zoneinfo/Asia/Shanghai 时区
/etc/localtime 时区
cal -y 显示日历
常用命令
- halt 关机
- poweroff 关机
- shutdown [OPTION]... TIME [MESSAGE] 关机或重启
- -r +TIME重启
- TIME:now立刻执行,+m相对时间,几分钟后执行,hh:mm绝对时间,具体时间关机
- -h +TIME关机
- -c 取消关机
- -r +TIME重启
- reboot 重启
- whoami 显示当前登录的用户
- who 显示当前系统所有的登录会话
- w 系统当前所有的登录会话及所做的操作
- nano 文本编辑器
- screen CentOS6.x默认没有安装,需要用rpm或yum安装后使用
- -S [SESSION] 新建会话
- -x [SESSION] 加入会话
- exit 退出并关闭会话
- Ctrl+a,d 安装Ctrl+a松开按d,剥离当前screen会话
- -ls 列出所有已建立的会话
- -r [SESSION] 恢复screen会话
- echo [-neE] [arg ...] 显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号
- -e 启用\字符的解释功能
- \a 发出警告声
- \b 退格键
- \c 最后不加换行符号
- \n 换行且光标移至行首
- \r 回车,光标移至行首但不换行
- \t 插入tab
- \\插入“\”字符
- \0nnn 插入nnn(八进制)所代表的ASCII字符
- \xHH插入HH(十六进制)所代表的ASCII字
- -n 不自动换行
- -e 启用\字符的解释功能
四:bash使用技巧
引用
双引号(""):弱引用,可识别变量,但是不识别命令
[root@centos6 ~]#echo "ls $HISTSIZE" ls 1000
单引号(''):强引用,变量和命令统统不识别,以字符串输出
[root@centos6 ~]#echo 'ls $HISTSIZE' ls $HISTSIZE
反引号(··):命令引用,执行被引用的命令,并输出结果,和“$()”功能相同
[root@centos6 ~]#echo `echo $HISTSIZE` 1000
扩展
{}:括号内的参数分别和外部参数做笛卡尔乘积
[root@centos6 ~]#echo file{1..5}{6,7,8} file16 file17 file18 file26 file27 file28 file36 file37 file38 file46 file47 file48 file56 file57 file58
命令补全
当输入一个命令字符开头可以表示唯一性时,按下tab键即可补全命令。
如果命令开头字符串不足以唯一标示一个命令时,按下2次tab键可显示所有以此字符串开头的命名。
文件路径补全和命令补全用法相同,如果不是唯一文件或文件夹名时则显示当前目录的所有以此字符串开头的文件或文件夹。
- command 2Tab 所有子命令或文件补全
- string2Tab 以string开头命令
- /2Tab 显示所有根目录下一级目录,包括隐藏目录
- ./2Tab 当前目录下子目录,包括隐藏目录
- *2Tab 当前目录下子目录,不包括隐藏目录
- ~2Tab 所有用户列表
- $2Tab 所有变量
- @2Tab /etc/hosts记录(centos7不支持)
- =2Tab 相当于ls –A (centos7不支持)
命令历史
命令在执行后命令历史会保存到内存中,当退出shell时这些命令历史会自动追加到~/.bash_history文件中
当登录shell时则会从~/.bash_history文件重新读入内存
- 如果想执行上一命令使用“↑”、"!!"、"!-1"或Ctrl+p调用
- !:0 执行前一条命令(去除参数)
- Ctrl + n 显示当前历史中的下一条命令
- Ctrl + j 执行当前命令
- !n 执行history命令输出对应序号n的命
- !-n 执行history历史中倒数第n个命令
- !string 重复前一个以“string”开头的命令
- !?string 重复前一个包含string的命令
- !string:p仅打印命令历史,而不执行
- !$:p 打印输出!$ (上一条命令的最后一个参数)的内容
- !*:p打印输出!*(上一条命令的所有参数)的内容
- ^string删除上一条命令中的第一个string
- ^string1^string2将上一条命令中的第一个string1替换为string2
- !:gs/string1/string2将上一条命令中所有的string1都替换为string2
- 使用up(向上)和down(向下)键来上下浏览从前输入的命令
- ctrl-r来在命令历史中搜索命令
- Ctrl+g:从历史搜索模式退出
- 要重新调用前一个命令中最后一个参数
- !$ 表示
- Esc, .(点击Esc键后松开,然后点击. 键)
- Alt+ .(按住Alt键的同时点击. 键)
调用历史参数
- command !^ 利用上一个命令的第一个参数做cmd的参数
- command !$ 利用上一个命令的最后一个参数做cmd的参数
- command !* 利用上一个命令的全部参数做cmd的参数
- command !:n 利用上一个命令的第n个参数做cmd的参数
- command !n:^ 调用第n条命令的第一个参数
- command !n:$ 调用第n条命令的最后一个参数
- command !n:m调用第n条命令的第m个参数
- command !n:* 调用第n条命令的所有参数
- command !string:^ 从命令历史中搜索以string 开头的命令,并获取它的第一个参数
- command !string:$ 从命令历史中搜索以string 开头的命令,并获取它的最后一个参数
- command !string:n 从命令历史中搜索以string 开头的命令,并获取它的第n个参数
- command !string:* 从命令历史中搜索以string 开头的命令,并获取它的所有参数
history命令详解
usage:
- history [-c] [-d offset] [n]
- history -anrw [filename]
- history -ps arg [arg...]
history: 显示命令历史记录
-c: 清空命令历史
-d offset: 删除历史中指定的第offset个命令
n: 显示最近的n条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 展开历史参数成多行,但不存在历史列表中
-s: 展开历史参数成一行,附加在历史列表后
HISTORY相关变量
- HISTSIZE:命令历史记录的条数
- HISTFILE:指定历史文件,默认为~/.bash_history
- HISTFILESIZE:命令历史文件记录历史的条数
- HISTTIMEFORMAT=“%F %T “ 显示时间
- HISTIGNORE=“str1:str2*:… “ 忽略str1命令,str2开头的历史
- HISTCONTROL 控制命令历史的记录方式
- ignoredups默认,忽略重复的命令,连续且相同为“重复”
- ignorespace忽略所有以空白开头的命令
- ignoreboth相当于ignoredups, ignorespace的组合
- erasedups删除重复命令
变量的赋值方法:
export 变量名=“值”
存放到/etc/profile 或~/.bash_profile中,不建议修改/etc/profile文件
bash快捷键
- Ctrl + l清屏,相当于clear命令
- Ctrl + o执行当前命令,并重新显示本命令
- Ctrl + s阻止屏幕输出,锁定
- Ctrl + q允许屏幕输出
- Ctrl + c终止命令
- Ctrl + z挂起命令
- Ctrl + a光标移到命令行首,相当于Home
- Ctrl + e光标移到命令行尾,相当于End
- Ctrl + f光标向右移动一个字符
- Ctrl + b光标向左移动一个字符
- Alt + f光标向右移动一个单词尾
- Alt + b光标向左移动一个单词首
- Ctrl + xx光标在命令行首和光标之间移动
- Ctrl + u从光标处删除至命令行首
- Ctrl + k从光标处删除至命令行尾
- Alt + r 删除当前整行
- Ctrl + w从光标处向左删除至单词首
- Alt + d从光标处向右删除至单词尾
- Ctrl + d删除光标处的一个字符
- Ctrl + h删除光标前的一个字符
- Ctrl + y将删除的字符粘贴至光标后
- Alt + c从光标处开始向右更改为首字母大写的单词
- Alt + u从光标处开始,将右边一个单词更改为大写
- Alt + l从光标处开始,将右边一个单词更改为小写
- Ctrl + t交换光标处和之前的字符位置
- Alt + t交换光标处和之前的单词位置
- Alt + #提示输入指定字符后,重复显示该字符#次
ps:注意:Alt组合快捷键经常和其它软件冲突
五:获得帮助
本地文档帮助
whatis
makewhatis | mandb 创建数据库缓存
CMD -h|--help
man or info
内部命令使用man bash,外部命令使用man 章节号 CMD,man命令的配置文件在/etc/man.config | man_db.conf
MANPATH /PATH/TO/SOMEWHERE: 指明man文件搜索位置
man -M/PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索
中文man需安装包man-pages-zh-CN
man章节介绍
- 用户命令
- 系统调用
- C库调用
- 设备文件及特殊文件
- 配置文件格式
- 游戏
- 杂项
- 管理类命令
- Linux内核API
在线文档帮助
- http://www.nginx.org
- http://tomcat.apache.org
- http://httpd.apache.org
- http://www.python.org
- http://kbase.redhat.com
- http://www.redhat.com/docs
- http://access.redhat.com
- rhn.redhat.com
- http://tldp.org
- http://www.slideshare.net
- http://www.google.com
- Openstackfiletype:pdf
- rhcasite:redhat.com/docs
感谢阅读,欢迎大家共同交流学习!