一、Linux的用户

Linux是一个多用户多任务的操作系统,在复杂的企业环境中,同一时间登录系统的用户不在少数,为了方便管理,Linux有root用户和普通用户之分。root用户对系统有着绝对的权限,这就意味着一旦root用户被盗取,它有能力使这个系统崩溃,正常的生产情况下,root用户是被禁止登录系统的。普通用户的权限有限并且可以被灵活的限制,是我们工作时用到的用户。

怎样知道当前系统有哪些用户正在工作呢?这里有一些有帮助的命令

1、whoami

[root@localhost ~]# whoami
root

whoami用于打印当前登录用户的用户名,相当于执行命令“id -un”,只有“--help”和“--version”两个选项,功能简单


2、who am i(或who 加任意两个字符串)

[root@localhost yum.repos.d]# who am i
root     pts/0        2016-07-22 17:21 (10.1.250.61)
[root@localhost yum.repos.d]# who  a a
root     pts/0        2016-07-22 17:21 (10.1.250.61)


3、w

[root@localhost ~]# w
 18:20:01 up  1:12,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      17:09   25.00s  0.50s  0.50s -bash
root     pts/0    10.1.250.61      17:21    1.00s  0.57s  0.05s w
root     pts/1    10.1.250.61      17:23   44:57   0.13s  0.13s -bash

w命令是一个比较全面的命令,它可以看到用户正在执行的程序

第一行的字段依次是系统当前时间,系统已经运行的时间,当前登录系统的用户数和系统在1分钟,5分钟和15分钟的平均负载

下面的行依次表达的意思是登录的用户名,终端名,远程的主机ip,登录时间,空闲时间,隶属于当前tty下所有进程占用CPU的时间,WHAT域即当前正在执行的程序所需要占用的CPU时间,正在执行的命令


二、Linux里的终端

物理终端:与Linux主机直接相连的鼠标,键盘等设备

[root@localhost ~]# ls /dev/console
/dev/console

虚拟终端:附加于物理终端之上的,以软件实现的终端,ctrl+alt+{F1..F6},当图形界面启动时,F1为图像终端

[root@localhost ~]# ls /dev/tty1
/dev/tty1

伪终端:图形界面里打开的终端和通过ssh连接的终端

[root@localhost ~]# ls /dev/pts/
0  1  2  ptmx

pts可以开启无穷多个

查看当前的终端设备:tty


三、外部命令和内部命令

type查看命令类型

内置命令:shell自带的命令

[root@localhost ~]# type cdcd is a shell builtin
[root@localhost ~]# type mkdirmkdir is /usr/bin/mkdir
[root@localhost ~]# enable -n cd  #禁用某个内置命令
[root@localhost ~]# enable -a #列出内置命令的启用状态
[root@localhost ~]# enable cd #启用内置命令

注意,centos7里有些内置命令在PATH里有二进制可执行文件,但是没有相应功能

外部命令:在PATH里有二进制可执行文件,包括安装的应用命令

which,whereis可以查看命令的路径,which默认现在hash缓存里找,然后在找PATH

[root@localhost ~]# whereis mkdir
mkdir: /usr/bin/mkdir /usr/share/man/man1/mkdir.1.gz /usr/share/man/man1p/mkdir.1p.gz /usr/share/man/man2/mkdir.2.gz /usr/share/man/man3p/mkdir.3p.gz
[root@localhost ~]# which mkdir
/usr/bin/mkdir

hash命令:当执行一个外部命令后(无论命令是否执行成功),hash会将命令路径缓存在hash表里

[root@localhost ~]# mkdir


mkdir: 缺少操作数

Try 'mkdir --help' for more information.
[root@localhost ~]# hash
命中    命令
   1    /usr/bin/whereis
   1    /usr/bin/mkdir

删除缓存里的某个命令

[root@localhost ~]# hash
命中    命令
   1    /usr/bin/touch
   1    /usr/bin/whereis
   1    /usr/bin/mkdir
   4    /usr/local/sbin/ls
[root@localhost ~]# hash -d ls
[root@localhost ~]# hash
命中    命令
   1    /usr/bin/touch
   1    /usr/bin/whereis
   1    /usr/bin/mkdir

清空hash缓存

[root@localhost ~]# hash -r
[root@localhost ~]# hash
hash: hash table empty

四、时间和日期

Linux有两种时间:

系统时间:有Linux内核根据CPU频率计算的

硬件时间:主板时间

date命令:系统时间

[root@localhost ~]# date
Sun Jul 24 09:47:12 CST 2016
[root@localhost ~]# date 082919482011.44  #设置系统时间,格式:月日时分年点秒
Mon Aug 29 19:48:44 CST 2011
[root@localhost ~]# date
Mon Aug 29 19:48:45 CST 2011

clock(hwclock):硬件时间

[root@localhost ~]# clock
Sun 24 Jul 2016 09:50:57 AM CST  -0.461441 seconds
[root@localhost ~]# clock -s #根据硬件时间修改系统时间
[root@localhost ~]# clock -w #根据系统时间修改硬件时间


cal:显示日历

[root@localhost ~]# cal
      July 2016     
Su Mo Tu We Th Fr Sa
        1  2
3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
[root@localhost ~]# cal 9 1752 #Linux中特殊的一个月份
   September 1752   
Su Mo Tu We Th Fr Sa
    1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

nano:文本编辑器(基本不用这个)


五、Linux字符界面下的桌面共享(必须是同一个用户登录同一个主机才有效)

screen:

[root@localhost ~]# screen -S help #创建一个新的screen会话

[root@localhost ~]# screen -x help #加入一个会话

[root@localhost ~]# exit #退出会话(两边同时退出)

[root@localhost ~]# screen -ls   #显示已存在的会话信息
There is a screen on:
    2899.help    (Attached)
1 Socket in /var/run/screen/S-root.

六、echo命令,显示字符

echo中引号的区别:

双引号:弱引用,变量会替换,可以识别`和$和\

单引号:强引用,引号里的内容原封不动的打印到屏幕

反引号:会将引号中的内容当作shell命令执行,也能替换其中的变量但是只有变量会报错然后将变量替换,它与$( )的作用相同

[root@localhost ~]# echo `$LANG`
bash: en_US.UTF-8: command not found...
[root@localhost ~]# echo `echo $PATH`
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

echo打印转义字符要加-e选项

[root@localhost ~]# echo "\nieda"\nieda
[root@localhost ~]# echo -e "\nieda" #shell中\n为换行ieda
[root@localhost ~]# echo -e "\ieda"\ieda

由上可以看出,不加-e将打印特殊字符的本身含义,加-e后会把特殊字符当做特殊的含义


echo的选项:

-n #不再字符最后自动换行

[root@localhost ~]# echo -n ned a
ned a[root@localhost ~]#


shell中echo打印颜色

[root@localhost ~]# echo -e "\033[41;31mHello World!\033[0m"  
bash: !\033[0m": event not found

#打印的内容在开头和结尾不能有特殊字符

[root@localhost ~]# echo "\033[41;31mHello World\033[0m"
\033[41;31mHello World\033[0m

#打印颜色必须加-e选项进行转义

[root@localhost ~]# echo -e "\033[41;31mHello World\033[0m"


Hello World

其中41中的4表示背景色,31中的3是字符颜色,31和41可以调换位置

最后的0m表示颜色的作用范围结束.........举个例子

[root@localhost ~]# echo -e "\033[33;41mHello World\033["


Hello World
[root@localhost ~]#
[root@localhost ~]#

shell中颜色的种类从1到7依次是 :红绿黄蓝紫天(蓝)白


如何打印一个闪烁的三角形?

[root@localhost ~]# echo -e "\033[31;5m   *   \n  ***  \n*******\033[0m"
  *   
 ***  
*******

其中的5代表给打印文本添加闪烁的效果,为了更直白可以不加背景颜色