#### 1. 什么是终端 简单来说,操作系统分为内核和用户交互界面两个部分。而终端就是连接内核和用户交互界面的桥,用户与主机进行交互必然用到的设备。 分类: - 物理终端 直接接入本机的显示器和键盘设备,映射在linux的/dev/console上 ``` # 控制台终端 $ ll /dev/console crw------- 1 root root 5, 1 Aug 8 15:50 /dev/console ``` - 虚拟终端 附加在物理终端之上的一软件方式虚拟实现的终端,CentOS 6默认启动6个虚拟终端 ``` Ctrl+Alt+F# [1,6] Ctrl+Alt+F1 表示切换到tty1终端 两个特殊的终端 tty: 表示当前正在使用的终端 tty0:表示当前已经被激活的所有虚拟终端 ttySN:表示串行终端 ``` - 图形终端 附加在物理终端之上的以软件方式虚拟实现的终端,但额外会提供桌面环境 设备文件路径:/dev/tty# - 模拟终端 图形界面下打开的命令行接口,基于ssh协议或telnet协议等远程打开的界面 ``` 设备文件:/dev/pts/# [0,oo) $ ll /dev/pts/ total 0 crw--w---- 1 root tty 136, 0 Aug 9 08:57 0 crw--w---- 1 root tty 136, 1 Aug 8 18:02 1 crw--w---- 1 root tty 136, 2 Aug 8 17:53 2 c--------- 1 root root 5, 2 Aug 8 15:50 ptmx ``` 查看当前终端设备命令: ``` $ tty /dev/pts/0 ``` #### 2. 常用的shell解释器 - sh (bourn) Unix上的标准shell。是第一个流行的shell - csh 这个shell的语法类似于C语言 - tcsh tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持 - ash 一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,与bash shell 完全兼容 - ksh (korn) - bash (bourn again shell), GPL Linux 发行版默认的shell,兼容sh - zsh #### 3. 显示当前使用的shell ``` echo ${SHELL} ``` #### 4. 显示当前系统所有的shell ``` $ cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash ``` #### 5. 命令提示符 ``` [root@ _1_ /data]# -> 表示这个终端的提示符,由变量PS1控制 $ echo $PS1 [\[\e[36m\]\u\[\e[m\]@ \[\e[33m\]_\#_\[\e[m\] \[\e[31m\]\w\[\e[m\]]\$ 选项: \e:\033 \u:当前用户 \h:主机名简称 \H:主机名 \w: \t:24小时时间格式 \W:当前工作目录基名 \T:12小时时间格式 \!:命令历史数 \#:开机后命令历史数 prompt: 管理员 # 普通用户 $ ``` #### 6. ls ``` -a 列出目录下的文件,包括隐藏文件. .. -l 列出目录下的文件,单列显示,包括文件名、权限、所有者、所属组、文件大小等信息 -d 仅显示目录名,显示符号链接文件本身,而不显示其所指向的目录列表 -t 以文件或目录的更改时间排序 -r 以文件名反序排列 -X 根据扩展名排序 -1 同ls,但每行列出一个文件 -m 都好分隔每个文件和目录名称 -R 递归处理 ``` #### 7. cd ``` cd 或 cd ~ 回到当前用户的家目录 cd - 在上一个目录和当前目录之间来回切换 环境变量 PWD 当前目录路径 OLDPWD 上一次所在目录路径 ``` #### 8. type - 显示指定名命令的类型,判断指令是内部指令还是外部指令 - 命令类型 alias:别名 keyword:关键字,shell保留字 function:函数,shell函数 builtin:shell内建命令 file:文件,磁盘文件,外部命令 unfound - 格式 type [OPTION] [PARAM] 选项: ``` -t:描述该命令的类型 -p:如果给出的指令为外部指令,则显示其绝对路径; -a:显示包含该命令的所有位置 ``` - 示例 ``` $ type ls ls is aliased to `ls --color=auto' $ type if if is a shell keyword $ type type type is a shell builtin ---------------------------------- $ type -t ls alias $ type -t if keyword $ type -t type builtin --------------------------------- $ type -a kill kill is a shell builtin kill is /usr/bin/kill $ type -at kill builtin file --------------------------------- $ type -p htop /usr/bin/htop $ type -p kill 没有输出 ``` #### 9. tty ``` # 通过SecureCRT连接linux,终端名为/dev/pts/0 [root@localhost ~]# tty /dev/pts/0 # 使用Vmware控制台终端,终端名为/dev/tty1 [root@localhost ~]# tty /dev/tty1 # 查看已登陆用户及终端设备 [root@localhost ~]# w 10:20:34 up 18:29, 4 users, load average: 0.03, 0.14, 0.27 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 10:16 3:54 0.00s 0.00s -bash root pts/0 192.168.0.138 Thu15 2.00s 1.95s 0.00s w root pts/1 192.168.0.138 Thu15 16:17m 0.02s 0.02s -bash root pts/2 192.168.0.138 Thu17 16:40m 0.02s 0.02s -bash ``` #### 10. cat 格式 ``` cat [OPTION]... [FILE]... 选项: -A:--show-all,等价于 -vET -n:对所有输出行进行编号 -b: 对于非空行添加行号,覆盖-n -E:在每行结尾处显示$ -v:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外 -T:将 TAB 字符显示为 ^I -e:等价于"-vE" -s:当遇到有连续两行以上的空白行,就代换为一行的空白行 -t: 等价于"-vT" ``` 创建一个不存在的文件 ``` cat > hello.txt # 如果添加内容,则在光标之后添加,Ctrl+D结束,如果只是创建空文件,则直接Ctrl+D结束 ``` 将几个文件合并为一个文件 ``` cat file1 file2 > file ``` 向已存在文件追加内容,以EOF为结束标记,标记可更改 ``` cat >> filename << EOF 或者 cat << EOF >> filename ``` 向已有文件写入内容,覆盖,以EOF为结束标记,标记可更改 ``` cat > filename << EOF ``` #### 11. which ``` 作用:用来查找系统PATH目录下的可执行文件,查看某个系统命令是否存在 ``` #### 12. whereis ``` 只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息 ``` #### 13. pwd ``` 显示当前gong工作目录的绝对路径 ``` #### 14. echo - 格式 ``` echo [OPTIONS] [STRING] # echo会将输入的字符串送到标准输出,输出的字符串间以空白字符隔开并在最后加上换行号 -E:(默认)不支持 \ 的解释或者说转义功能 -n:不自动换行 -e:启用\字符的解释功能 echo -e "hello\n" 若出现以下字符串则会特别处理 \c:压缩换行符 echo -e "hello\c" \t:插入table键 echo -e "hello\tname" \v:垂直table键 echo -e "hello\vname" \a:发出警告声 \n:换行且光标移至行首 \r:回车,即光标移至行首,但不换行 \\:插入\字符 \b:退格键 \0nnn:插入nnn(八进制)所代表的ASCII字符 echo -e '\033[43;31;5mhello\033[0m' \xHH:插入HH(十六进制)所代表的ASCII字符 ``` - 单引号&双引号 ``` echo "$VAR_NAME" :变量会替换,弱引用,也就是说会显示VAR_NAME对应的变量值 echo '$VAR_NAME' :变量不会替换,强引用 ``` - $() 或 `` 命令行扩展,将一个命令的输出打印给另一个命令的参数 ``反引号,当一个命令调用另一个命令的输出信息的时候要把被调用命令放到反引号里面 ``` echo "hello $(hostname)" echo "I am `whoami`" touch `date +%F`.log ``` - {} 括号扩展,打印重复字符串的简化形式 ``` echo file{1,3,5} ——> file1 file3 file5 echo {1..10} ——> 1 2 3 4 5 6 7 8 9 10 touch file{1,2,3} rm -rf file{1,2,3} echo {000..20..2} ——> 000 002 004 006 008 010 012 014 016 018 020 echo {a..z} ——> a b c d e f g h i j k l m n o p q r s t u v w x y z echo file{1,2,3}.{log,txt} ——>file1.log file1.txt file2.log file2.txt file3.log file3.txt 注: .. 表示范围 ``` #### 15. man ``` 查看文档帮助 手册页存放在/usr/share/man man命令配置文件 /etc/man.config或man_db.conf MANPATH /PATH/TO/SOMEWHERE 指明man文件搜索位置 man -M /PATH/TO/SOMEWHERE cmd 到指定位置下搜索cmd的手册页并显示 中文man需要安装包 man-pages-zh-CN 内部命令:help/man cmd 外部命令:cmd --help/-h man cmd ``` #### 16. date ``` 作用:显示日期和时间 示例: 自定义显示时间格式: date "+%Y-%m-%d %H:%M:%S" == date "+%F %T" 显示日期: date "+%F" 2019-08-12 显示n天之前的时间: date -d "3 day ago" Fri Aug 9 11:59:47 CST 2019 date -d "3 day ago" +%F 2019-08-09 显示今天为周几: date "+%w" 1 date '+%a' Mon 设定当前系统时间: date 0613112616.00 date -s "20160613 11:06:00" -s为写入硬件时间(硬件时钟和系统时钟) (https://www.cnblogs.com/roger0212/p/4436719.html) 硬件时钟:主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟 系统时钟:指kernel中的时钟 当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。 系统时钟的设定就是我们常用的date命令,而我们写的RTC驱动就是为硬件时钟服务的,它有属于自己的命令hwclock,因此使用date命令是不可能调用到我们的驱动的,我们可以通过hwclock的一些指令来实现更新rtc时钟——也就是系统时钟和硬件时钟的交互。 hwclock –r 显示硬件时钟与日期 hwclock –s 将系统时钟调整为与目前的硬件时钟一致。 hwclock –w 将硬件时钟调整为与目前的系统时钟一致。 linux系统有两个时钟:一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟, 硬件时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的。 另一个时间是 “System clock”也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的, 内核时钟在系统关机的情况下是不存在的,所以,当操作系统启动的时候,内核时钟是要读取RTC时间 来进行时间同步。并且在系统关机的时候将系统时间写回RTC中进行同步。 Linux内核与RTC进行互操作的时机只有两个: 1) 内核在启动时从RTC中读取启动时的时间与日期; 2) 内核在需要时将时间与日期回写到RTC中。 系统启动时,内核通过读取RTC来初始化内核时钟,又叫墙上时间,该时间放在xtime变量中。 ``` #### 17. atime、mtime、ctime | 名称 | 含义 | | ------------------ | ------------------------------------------------------------ | | atime(access time) | 访问时间,文件中的数据库最后被访问的时间,如cat, vim | | mtime(modify time) | 修改时间,文件内容被修改的最后时间,如 vim | | ctime(change time) | 变化时间,文件元数据发生变化的时间,如权限、所有者,如chmod,chown,vim | ``` 查看这三个时间: ls -l mtime ls -lu atime ls -lc ctime https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_031_linuxtime.html ``` #### 18. stat ``` 格式:stat [OPTION]... FILE... 作用:获取指定文件的元数据,查看文件访问时间、修改时间、元数据修改时间 $ stat test File: ‘test’ Size: 65 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 40797360 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-08-12 17:06:19.465440232 +0800 Modify: 2019-08-12 17:06:19.465440232 +0800 Change: 2019-08-12 17:06:19.465440232 +0800 Birth: - ``` #### 19. who ``` 作用:获取当前已经登陆到系统的所有用户信息 ``` #### 20. whoami ``` 作用:获取当前用户信息 ``` #### 21. w ``` # 查看已登陆用户及终端设备 [root@localhost ~]# w 10:20:34 up 18:29, 4 users, load average: 0.03, 0.14, 0.27 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 10:16 3:54 0.00s 0.00s -bash root pts/0 192.168.0.138 Thu15 2.00s 1.95s 0.00s w root pts/1 192.168.0.138 Thu15 16:17m 0.02s 0.02s -bash root pts/2 192.168.0.138 Thu17 16:40m 0.02s 0.02s -bash ``` #### 22. linux下的文件类型 ``` - (f):普通文件 d: 目录文件 b: 块设备 c: 字符设备 l: 符号链接文件 p: 管道文件 s: 套接字文件 socket ``` #### 23. history ``` 作用:调用历史中的命令 ~/.bash_history:登录shell时会读取命令历史文件中记录下的命令 echo $HISTSIZE:显示记录的历史命令最大条数 /etc/profile:修改HISTSIZE就可以更改历史命令最大条数 重复上一条命令: 上方向键,回车 按 !! 并回车执行 输入!-1并回车执行 按ctrl+p并回车执行 前一条命令的最后一个参数 !$ Esc . 点击Esc后松开,再点击.键 Alt+. 按住alt的同时点击.键 !n 重复执行第n条指令 !-n 执行历史命令倒数第n个命令 !string 重复上一个以string开头的命令 !?string 重复前一个包含string的命令 !string:p 仅打印命令历史,而不执行 ``` #### 24. 命令行展开 ``` ~: 展开为用户的主目录 ~USERNAME:展开为指定用户的主目录 {}:可承载一个以逗号分隔的列表,并将其展开为多个路径 /tmp/{a,b} = /tmp/a, /tmp/b /tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi 练习: mkdir /tmp/{tom,jerry}/hi ``` #### 25. mkdir ``` mkdir -p 递归创建目录,文件存在时不报错 ``` #### 26. rmdir ``` 作用: 删除空目录 rmdir -p a/b/c ``` #### 27. touch ``` 文件存在:更新文件的访问时间 atime 文件不存在: 创建文件 touch -a / -time=atime 更改atime touch -m 更改mtime touch -d -t 使用指定日期时间 ``` #### 28. bash通配 ``` 匹配模式:元字符 * :匹配任意长度的任意字符 ? :匹配任意单个字符 []: 匹配指定范围内的任意单个字符 [[:upper:]]:所有大写字母 [[:lower:]]:所有小写字母 [[:alpha:]]:所有字母 [[:digit:]]:所有数字 [[:alnum:]]:所有字母和数字 [[:space:]]:所有空白字符 [[:punct:]]:所有标点符号 [^]:匹配指定范围外的任意单个字符 ``` #### 29. IO定向及管道 ``` 输入的数据流:<-- 标准输入(stdin),键盘: 输出的数据流:<-- 标准输出(stdout),显示器: 错误输出流: --> 错误输出(stderr),显示器: 文件描述符: 标准输入:0 标准输出:1 错误输出:2 2>/dev/null 重定向标准错误 2>&1 &> 将错误信息或者普通信息都重定向输出 ``` #### 30. tr ``` 格式: tr [OPTION]... from-chars [to-chars] 选项: -s:压缩to-chars中多次连续出现的字符 -d:删除输入流中的个别字符 示例: tr ' ' '\n' < test 空格替换成换行 tr '[a-z]' '[A-Z]' < test 小写替换成大写 tr '[a-zA-Z]' '[A-Za-z]' < test 小写替换成大写,大写替换成小写 tr -s ':' '\11' 将冒号替换成制表符,将多个制表符替换成单个制表符 tr -s ' ' ' ' < lostsaspace tr -d '[0-9]' 删除数字 ``` #### 31. useradd ``` -u,--uid UID:指定UID; useradd -u 9999 tom -d: 指定用户家目录; useradd -d dir tom -g,--gid GID:指定基本组ID,此组得事先存在; -r,--system:创建系统用户; -M,不创建家目录 ``` #### 32. usermod ``` 作用:修改用户属性 -d, --home:修改用户家目录 -u,--udi UID:修改用户的ID为此处指定新的UID -g,--gid GID:修改用户基本组ID,此组得事先存在; -L,--lock:锁定用户密码:即在用户原来的密码字符串之前加一个“!”; -U, --unlock:解除锁定 ``` #### 33. userdel ``` 作用:删除用户 userdel [选项] 用户名 userdel tom:只会删除/etc/passwd和/etc/shadow中的记录 -r:删除用户时一并删除其家目录; ``` #### 34. passwd ``` (1) passwd:修改用户自己的密码: (2) passwd USERNAME ,修改用户的密码,仅限root 注意:/etc/shadow中密码前面有两个感叹号!!表示不允许该用户登录系统 以echo的方式给用户设置密码 --stdin选项能让密码从标准输入接收 echo "PASSWORD" | passwd --stdin USERNAME ``` #### 35. su ``` 登录式切换 :会通过重新读取目标用户的配置文件来重新初始化 su - user su -l user 完全切换 非登录式切换:不会读取目标用户的配置文件进行切换 su USERNAME 注意:管理员可无密码切换至其他用户 -c 'COMMAND':仅以此指定用户的身份运行此处指定的命令 visudo 编辑/etc/sudoers配置文件 ## Allow root to run any commands anywhere root ALL=(ALL) ALL tom ALL=(ALL) ALL 意思是tom用户可以从任何地方登录执行任何人的命令 tom ALL=(ALL) NOPASSWD:ALL 使用sudo不输入密码 tom ALL=(ALL) NOPASSWD:/sbin/shutdown, /usr/bin/reboot ``` #### 36. 进程对文件的访问权限应用模型 ``` 进程的属主与文件的属主是否相同? 相同:则应用属主权限 不同: 检查进程的属主是否属于文件的属组 是:应用属组权限 否:应用其他人权限 r:可使用ls命令获取其下的所有文件列表 w:可修改此目录下的文件列表,即创建或删除文件 x:可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息 ``` #### 37. umask ``` 作用:用于创建文件或目录的默认权限,umask设置的是权限的"补码",chmod设置的是文件权限码 一般在 /etc/profile $HOME/.bash_profile中设置umask的值 umask默认值是022 文件默认权限 644(6-0,6-2,6-2) 目录默认权限 755(7-0,7-2,7-2) 对于目录: default=777-umask 奇数加一,偶数不变 对于文件: default=666-umask 奇数加一,偶数不变 umask的修改 临时修改: umask 023 永久修改: 编辑文件 添加 umask=022 交互式登录的配置生效: /etc/profile < /etc/profile.d/*.sh < ~/.bash_profile < ~/.bashrc 最后修改:2019 年 08 月 21 日 11 : 09 AM © 著作权归作者所有