Linux基础

一、用户登录

当系统自启完成后,系统会进入登录提示界面,在linux系统中,由两类用户:

root用户:

  • 超级用户,ID号为0
  • 拥有系统接近完整的权限
  • 权限越大,责任越大
  • 命令提示符: #

普通用户:

  • 权限有限
  • 造成损害的能力有限
  • 命令提示符:$

二、shell解释器

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
它接受用户输入的命令并把它交给内核去执行。相当于用户和内核之间的"翻译官",shell被称为LINUX的命令解释器(command ipterpreter)
*同时shell也是一种高级编程语言,称为shell脚本,它可以将许多单一功能的命令结合起来通过编程语法完成复杂的生产工作。

三、bash shell

bash是一个为GNU计划编写的重要的工具软件之一,目前是linux标准的shell,与sh兼容。 shell: 人机交互界面
sh、csh、tcsh、bash、ksh、dash、zsh
bash: 命令解释器

四、内部命令和外部命令

内部命令:

内部命令是由系统内核开机加载至内存中,执行效率高

  • enable 命令: 可以查看内部命令和判断是否是内部命令,还可以禁用和开机内部命令
    查看内部命令:
    enable
    判断是否为内部命令
    enable command
    禁用内部命令
    enable -n builtin_command
    开启内部命令
    enable builtin_command

外部命令:

外部命令是保存在磁盘上的,当用户从键盘输入外部命令时,系统扫描硬盘上的命令路径,来完成指令操作。
当需要执行外部命令时,系统会读取环境变量.bash_profile和/etc/profile中寻找PATH路径
查看PATH变量中的路径
echo $PATH

Hash缓存表

系统初始hash表为空,当执行外部命令时,默认会从PATH路径寻找命令,将找到的这条命令的路径记录在hash表中。当用户再次使用这条命令时,shell解释器会有优先查看hash表中的数据,如果存在,则执行,反之,接着去PATH路径中寻找。 hash缓存表可大大提高命令的调用速率。

  • hash 常见用法: hash 显示hash缓存
    hash –l 显示hash缓存,可作为输入使用
    hash –p path name 将命令全路径path起别名为name
    hash –t name 打印缓存中name的路径
    hash –d name 清除name缓存
    hash –r 清除缓存

命令别名

在系统中我们经常会重复执行一些过长的命令,例如修改网络配置,这时候我们也可以通过设置别名来提高效率

alias命令:

  • 显示当前shell进程所有可用的命令别名
    alias
    定义别名NAME,其相当于执行命令VALUE
    alias NAME='VALUE'
    在命令行中定义的别名,仅在当前shell进程有效
    想要永久生效,则需要写入配置文件,
    仅对当前用户: ~/.bashrc
    对所有用户有效: /etc/bashrc
    配置文件完成后,配置文件不会立即生效,我们可以通过以下方式生效配置文件 bash进程重新读取配置文件
    source /path/to/config_file
    . /path/to/config_file

撤消别名:unalias

unalias [-a] name [name ...]   
-a 取消所有别名   
如果别名同原命令同名,如果要执行原命令,可使用   
\ALIASNAME   
“ALIASNAME”   
‘ALIASNAME’     
command ALIASNAME   
/path/commmand  

寻找顺序:

alias别名 --> hash缓存表 --> 内存 --> $PATH

五、基础命令:

date 命令:显示或设置系统时间和日期

	INSTRUCTION:
		Linux的两种时钟:
			系统时钟:由linxu内核通过CPU的工作频率进行的
			硬件时钟:主板
	Syntax
		date [option] [arguments]
	常用选项:
		-d<字符串>:显示字符串所指的时间和日期,字符串前后必须加双引号
		-s<字符串>:设置时间,字符串为设定时间参数,前后必须有引号
	参数:
		%H 小时,24小时制(00~23)
		%I 小时,12小时制(01~12)
		%k 小时,24小时制(0~23)
		%l 小时,12小时制(1~12)
		%M 分(00~59)
		%p 显示出上午或下午
		%r 时间,12小时制
		%s 从1970年1月1日0点到目前经历的秒数
		%S 秒(00~59) 
		%T 时间(24小时制)(hh:mm:ss)
		%X 显示时间的格式(%H时%M分%S秒)
		%Z 按字母表排序的时区缩写
		%a 星期名缩写
		%A 星期名全称
		%b 月名缩写
		%B 月名全称
		%c 日期和时间
		%d 按月计的日期(01~31)
		%D 日期(mm/dd/yy) 
		%h 和%b选项相同
		%j 一年的第几天(001~366)
		%m 月份(01~12)
		%w 一个星期的第几天(0代表星期天)
		%W 一年的第几个星期(00~53,星期一为第一天)
		%x 显示日期的格式(mm/dd/yy)
		%y 年份的最后两个数字(1999则是99)
		%Y 年份(比如1970、1996等)
		%C   世纪,通常为省略当前年份的后两位数字
		%U  一年中的第几周,以周日为每星期第一天
		%e   按月计的日期,添加空格,等于%_d

实例:

显示当前时间

# date
Sun Mar 10 12:19:52 CST 2019

date +参数 指定显示格式
输出前#(day,month,year)或后#(day,month,year)日期
+#:表示后一天
-#:表示前一天

# date -d "+1 day " +%F     //显示后一天
2019-03-11
# date -d "-1 day " +%F     //显示前一天
2019-03-09
# date -d "-1 month " +%F   //显示前一个月
2019-02-10
# date -d "+1 month " +%F   //显示后一个月
2019-04-10
# date -d "+1 year " +%F    //显示后一年
2020-03-10
# date -d "- 1 year " +%F   //显示前一年
2018-03-10

-设置系统时间

# date  当前时间
Sat Mar 10 12:33:49 CST 2018
# date -s "2018-03-10 12:33:30" 设置时间
Sat Mar 10 12:33:30 CST 2018

hwclock,clock: 显示硬件时钟

  -s, --hctosys 以硬件时钟为准,校正系统时钟 
  -w, --systohc 以系统时钟为准,校正硬件时钟
    实例:
        # clock
        Sun 10 Mar 2019 12:38:20 PM CST  -0.429873 seconds
        # clock -s      //校正系统时钟
        # date
        Sun Mar 10 12:38:30 CST 2019

关机:halt, poweroff

重启:reboot

  -f: 强制,不调用shutdown 
  -p: 切断电源 
关机或重启:shutdown 
  shutdown [OPTION]...  [TIME] [MESSAGE] 
  -r: reboot 
  -h: halt 
  -c:cancel 
  TIME:无指定,默认相当于+1(CentOS7) 
    now: 立刻,相当于+0 
    +m: 相对时间表示法,几分钟之后;例如 +3 
    hh:mm: 绝对时间表示,指明具体时间  

whoami:显示当前有效用户名称
who:显示目前登录系统的用户信息
w:显示已经登录系统用户列表,并显示用户正在执行的命令。

实例:

# whoami
root
# who
root     pts/0        2019-03-10 09:38 (192.168.###.1)
# w
12:44:35 up  3:07,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.###.1    09:38    3.00s  0.77s  0.08s w

screen:

	Syntax: [option] [arguments]
	常用选项:
		-S  	创建会话
		-x  	加入会话
	    -ls		显示已经打开的所有会话
	    -r 		恢复某screen会话
	    exit 	关闭screen会话
	    Ctrl+a,d 剥离当前screen会话

实例:

# screen -S help    创建名字叫help的会话
# screen -ls        查看已经打开的所有会话 
    There is a screen on:
    7820.help	(Attached)
    1 Socket in /var/run/screen/S-root.
#screen -x help     加入会话

echo:输出指定的字符串或变量

Syntax: echo [option] [arguments]
    常用选项
        -e : 启用字符转义功能
        -n  不自动换行
    使用-e选项时,若字符串出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
        \a 发出警告声;
        \b 删除前一个字符;
        \c 最后不加上换行符号;
        \n 换行且光标移至行首;
        \r 光标移至行首,但不换行;
        \t 插入tab;
        \\插入\字符;
        \nnn 插入nnn(八进制)所代表的ASCII字符;  

实例:

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# echo -e "hello\nlinux "
hello
linux 
# echo -e "\e[1;31mThis is red text\e[0m"
This is red text

history:显示历史命令

INSTRUCTION:
    用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。
    该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2。
    历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量HISTSIZE进行控制。
Syntax:
    history [option] [arguments]
    常用选项
        -c: 清空命令历史 
        -d  offset: 删除历史中指定的第offset个命令 
            n: 显示最近的n条历史 
        -a: 追加本次会话新执行的命令历史列表至历史文件 
        -r: 读历史文件附加到历史列表 
        -w: 保存历史列表到指定的历史文件 
        -n: 读历史文件中未读过的行到历史列表 
        -p: 展开历史参数成多行,但不存在历史列表中 
        -s: 展开历史参数成一行,附加在历史列表后   

实例:

# history 
    1  ifconfig
    2  poweroff
    3  ifocnifg
    4  ifconfig
    ..省略
# history 2
75  history -2n
76  history 2

whatis:显示命令的简短描述

显示命令的简短描述   
通过数据库来查找指定命令的man手册和显示简短的功能介绍  
系统刚安装后不可立即使用,还没有建立数据库   
使用makewhatis | mandb手动制作数据库,执行此命令会占据大量系统资源   
使用示例:     
    whatis cal 或 man –f cal    

man:提供命令帮助的文件

INSTRUCTION:
    手册页存放在/usr/share/man 
    几乎每个命令都有man的“页面” 
    man页面分组为不同的“章节” 
    统称为Linux手册 
    man命令的配置文件:/etc/man.config | man_db.conf 
        MANPATH /PATH/TO/SOMEWHERE: 指明man文件搜索位置 
    man -M /PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索
    COMMAND命令的手册页并显示 
章节:
    1:用户在shell环境可操作的命令或执行文件;
    2:系统内核可调用的函数与工具等
    3:一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
    4:设备文件说明,通常在/dev下的文件
    5:配置文件或某些文件格式
    6:游戏(games)
    7:惯例与协议等,如Linux文件系统,网络协议,ASCII code等说明
    8:系统管理员可用的管理命令
    9:跟kernel有关的文件
man手册段落说明
    NAME  名称及简要说明 
    SYNOPSIS 用法格式说明 
        []  可选内容 
        <>   必选内容 
        a|b  二选一 
        { }  分组 
        ...  同一内容可出现多次 
    DESCRIPTION 详细说明 
    OPTIONS  选项说明 
    EXAMPLES 示例 
    FILES  相关文件   
    AUTHOR 作者   
    COPYRIGHT 版本信息   
    REPORTING BUGS bug信息   
    SEE ALSO 其它帮助参考  

六、bash特性

1、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 + N  提示输入指定字符后,重复显示该字符N次 
		注意:Alt组合快捷键经常和其它软件冲突 

2、bash命令历史

bash保存的过去曾经执行过的命令的列表;
当前shell进程的保存在缓冲区中;
缓冲区中的命令会在shell退出时保存至文件中, .bash_history

使用上下箭头键可以翻看此前曾经执行过的命令;

history快捷方式:
    !#: #为命令历史列表中的命令编号;可用执行第#条命令;
    !!: 执行上一条命令;
    !-#: 执行命令历史列表中的倒数第#条命令;
    !string: 执行命令历史列表中的最近一次以string开头的命令;

    !$: 引用上个命令的最后一个参数; ESC, .
history
    -c: 清空列表
    -d #: 删除指定的历史命令
    -a: 追加当前会话的命令历史至历史文件中去;

命令历史相关的环境变量:
    HISTSIZE:命令历史中可以保存的命令的个数;
    HISTFILE: 命令历史文件;
    HISTFILESIZE:命令历史文件可以保存的命令的个数;
    HISTCONTROL: 控制命令历史的生成;
        ignoredups: 忽略记录重复的命令;连续的相同命令才为重复;
        ignorespace: 不记录以空白字符开头的命令;
        ignoreboth: 同时具有上面两种特性;

补充:Linux文件系统的另一特性:以点号开头的文件为隐藏文件; ls -a

3、bash补全

内部命令: 
    外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令 
    用户给定的字符串只有一条惟一对应的命令,直接补全 
    否则,再次Tab会给出列表 
路径补全 
        把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字
符串开头的文件名 
        如果惟一:则直接补全 
        否则:再次Tab给出列表

七、总结

以上就是我总结了第一天的学习内容,内容仅供复习使用,如有错误,请各位大佬指正!