复习Linux命令: 1)等待:sleep 秒数 自动化脚本中作为步骤间隔时间 2)任务管理: 查看系统所有进程:ps -ef 结束当前进程:ctrl+c 挂起当前进程:ctrl+z 查看后台任务:jobs 前置:fg 任务号 3)命令帮助手册:man 命令名 回车-跳行 空格-翻页 q-退出 4)查看目录下内容:ls 查看目录下内容的详细属性:ls -l 类型、权限、属主、属组、大小、最后一次修改时间 是否隐藏 ls -al ls -F ls -R ls -t ls -ld 查看当前目录属性 5)清屏:clear 6)查看磁盘空间分布:fdisk -l df -k mount 7)查看当前shell: ps 查看进程 ps -ef 查看所有进程 8)shell切换:bash csh sh ksh ... 启动子进程 exit 退出子进程 9)输出重定向: > 覆盖 >> 追加 将前面命令的结果 输出 到某文件中 本质:对文件的写操作 写出 10)查看文件内容:cat 文件名 ... 本质:对文件的读操作 读入内存 11)查看系统环境变量值:echo $系统变量名 echo ~ echo Hello echo $PATH 命令的搜索路径 12)新建目录:mkdir 目录路径名 13)新建文件:touch 文件路径名 14)拷贝文件:cp 源文件路径 新路径 15)移动/重命名:mv 源文件路径 新路径 16)删除文件:rm 文件名 存在交互 y n rm -f 文件名 关闭交互 17)删除空目录:rmdir 目录名 18)删除非空目录:rm -r 目录名 存在交互 y n rm -rf 目录名 关闭交互 注意:如果是root用户,在/目录下,千万不能: rm * 删除所有内容 建议:平时少用root登录,root拥有最高权限,为了防止误操作。 用户 使用账户的人 允许很多人 同时使用系统 账户 root 是账号,是数据 使用相同或不同账号登录系统 用户名、密码 一、用户和组的管理 Linux/Unix是多用户系统: root是超级用户,拥有最高权限。其它用户及权限由root来管理。对比Windows系统: 控制面板 -> 管理工具 -> 计算机管理 -> 本地用户和组 -> 右击某用户 -> 属性 -> 隶属于(哪个组) 用户和组是从属关系 思路:系统区分不同用户、不同组也是为了管理不同权限 管理员可以授予、回收、修改不同资源的不同权限 1、添加用户:useradd 用户名 (只能由root操作) # id 为root # useradd xiaohong 规律:不写组,会自动创建一个组,组名同于用户名xiaohong; 创建用户后,会在/home目录下,自动生成一个目录,就是该用户的主目录,目录名也同于用户名 xiaohong # cd /home # ls -l 属主 属组 drwx------ 2 xiaohong xiaohong 4096 10月 19 11:00 xiaohong 目录名 密码:password 简写为:passwd 2、设置密码:passwd 用户名 # passwd xiaohong 输入密码:123 123 清密码:passwd -d 用户名 # passwd xiaohong 输入密码:123 123 3、改变身份: su 用户名 su 不写用户名,默认就是root 目的:获取某用户的权限进行管理 注意:从root切换到普通用户不需要密码,但从普通用户切换到root或其他用户需要密码。 练习:从root切换到xiaohong,从xiaohong切换到root 再返回身份 exit su也会启动一个子进程 查看最初登录身份:who am i 查看当前用户名:whoami 查看当前用户详细身份:id (用户id 用户名 组id 组名) 二、案例: 1、添加boys组: groupadd 组名 # id 是root # groupadd boys 2、添加girls组: # groupadd girls 3、查看组信息: /etc/group 组管理配置文件 # cat /etc/group 重点查看组id和组名 每一行就是一个组的记录,每一列就是不同的属性 组名 组id(gid) root:x:0:root ... xiaohong:x:500: boys:x:501: girls:x:502: 4、添加用户tom到boys组:useradd -g 组名 用户名 # useradd -g boys tom # passwd tom 密码:123 5、同理,添加用户alice和rose到girls组: # useradd -g girls alice # useradd -g girls rose # passwd alice 密码:123 # passwd rose 密码:123 6、查看用户账户信息: /etc/passwd # cat /etc/passwd 每一行就是一条账户的信息,具有多个属性: 用户名:口令占位符:uid:gid:描述:用户主目录:登录shell root:x:0:0:root:/root:/bin/bash ... xiaohong:x:500:500::/home/xiaohong:/bin/bash tom:x:501:501::/home/tom:/bin/bash alice:x:502:502::/home/alice:/bin/bash rose:x:503:502::/home/rose:/bin/bash uid: 用户id gid: 组id 补充:用户口令文件 /etc/shadow 分别使用root和xiaohong身份查看 $ cat /etc/shadow 权限不够 # cat /etc/shadow 可以查看,但是密码都经过加密MD5 7、用alice的身份,在其主目录下创建1.txt文件 # id 是root # su alice 不用密码 $ cd 回alice主目录 /home/alice $ pwd $ ls $ touch 1.txt 创建空文件 $ ls -l -rw-r--r-- 1 alice girls 0 7月 12 10:39 1.txt (编辑纯文本:包括各种源程序、配置文件) .py .java .c .json .sql .html : (shift ;) i 底行模式 <-- 命令模式 --> 输入模式 wq回车 <--Esc 8、使用vi编辑器,编辑1.txt文本 (vi基本使用) 1)vi 1.txt 启动vi 编辑1.txt 纯字符界面 默认处于:命令模式 可敲大量命令 2)敲i键,切换到:输入模式 (左下角:插入 INSERT) 3)输入 I am alice! 4)敲Esc键,由输入模式 -> 命令模式 5)敲 : 键(Shift ;)-> 底行模式(冒号模式) 6)在冒号后输入:wq 回车 保存并退出(Write Quit) 写入磁盘 并 退出vi 7)补充:如果保存时出现问题,可以不存盘强制退出 Esc 冒号模式 shift ; q! 回车 或ctrl+c 结束vi进程 9、尝试让tom进入alice主目录中,查看并修改1.txt文件。 $ id 是xiaohong $ su tom 密码123 $ cd /home $ cd alice 权限不够 $ ls -l drwx------ 2 alice girls 4096 4月 27 10:50 alice drwx------ 2 rose girls 4096 4月 27 10:23 rose drwx------ 2 tom boys 4096 4月 27 10:22 tom 三、文件/目录的权限: 1、user 所有者(属主 owner 文件的创建人) u 2、group 所有者所在的组 g 比如:root用户 在 root组 xiaohong用户 在 xiaohong组 tom用户 在 boys组 alice和rose 在girls组 3、other 其他 o 既不是自己的,也不是同组的 ls -l 开始的10个字符: d rwx --- --- 文件类型 文件/目录的权限 - --- --- --- - 文件 所有者 同组人 其他人 d 目录 4、三种访问权限:可读r 可写w 可执行x Read Write eXcute 700 rwx------ 出现的位置固定 rwx 缺失使用-代替 可读r r-- 可写w -w- 可执行x --x - rw- r-- r-- 普通文件:权限 644 自己:可读、可写 同组:只读 其他:只读 d rwx r-x r-x 目录:权限 755 自己:可读、可写、可执行 同组:可读、可执行 其他:可读、可执行 - rwx rwx rwx 可执行文件: 777 对所有人:可读、可写、可执行 - rwx rw- r-- 764 二进制之父:莱布尼茨 伏羲 0 1 00 01 10 11 二进制 八进制数 权 421 权限的数字表达法:用1位八进制数表示一种身份的三种权限 000 0 --- 001 1 --x 010 2 -w- 011 3 -wx 100 4 r-- 101 5 r-x 110 6 rw- 111 7 rwx 128 64 32 16 8 4 2 1 01100001 97=64+32+1 将十进制数97 -> 二进制数:01100001 -> 十六进制:0~9 A~F 61 让程序员更方便表示二进制 0110 0001 6 1 -> 八进制:0~7 141 01 100 001 1 4 1 128 64 32 16 8 4 2 1 11101001 233 = 128+64+32+8+1 将十进制数233 -> 二进制数:11101001 十六进制:1110 1001 E9 E 9 八进制:11 101 001 351 3 5 1 笔试题:Linux系统中某文件具有如下权限,对于用户自己拥有可读、可写、可执行,对于同组人可读、可执行,对于其他人可读,请写出该权限的八进制数形式____. 754 7 5 4 - rwx r-x r-- u g o 5、归纳文件和目录的各种权限的规律: 1)文件的权限: r 可读:可以使用vi、cat等查看文件的内容 Disk I 输入 读取磁盘数据 w 可写:可以修改后保存磁盘 Disk O 输出 将数据写入到磁盘中 x 可执行:可以直接运行 命令就是可执行文件 2)目录的权限: r 可读:通过ls 查看目录下的内容 w 可写:可以改变目录下的内容,比如新建、删除资源 x 可执行:可以cd进去 为何tom无法进入alice的主目录? $ ls -ld drwx------ 2 alice girls 4096 4月 27 10:50 . 700 修改为: drwx-----x 701 6、修改文件/目录的权限:chmod 规则 文件/目录名 规则: 角色:u 自己人 user g 同组人 group o 其他人 other a 所有人 all 操作:+ - 权限:r w x 数字:644 755 ... u g o 举例: rw- r-- r-- # chmod u+x 1.txt 针对自己增加可执行权限 # chmod u-x 1.txt 针对自己去除可执行权限 # chmod g+w 1.txt 针对同组人增加可写权限 # chmod a+rx, g+w 1.txt 所有人都可读,可执行;同组的可写 # chmod 777 1.txt 数字表达法 # chmod 644 1.txt 前提:只有文件的拥有者、root用户可以修改权限 案例:由root或alice修改alice主目录的权限,让tom能进入其中,并且查看目录下内容,查看1.txt的内容,修改1.txt内容。 由alice修改:让tom能cd进入 $ id 是alice $ cd 在主目录中 $ ls -ld 权限 700 rwx --- --- $ chmod o+x ~ 701 rwx --- --x 或 chmod 701 ~ 由alice修改:让tom能查看其主目录下内容 $ chmod o+r ~ 705 rwx --- r-x 或 chmod 705 ~ $ ls -l -rw-r--r-- 1 alice girls 12 4月 27 10:50 1.txt 644 目前tom可读,但不可写 -rw-r--rw- 646 由alice修改:让tom可以改写1.txt $ chmod o+w 1.txt chmod 646 1.txt 练习:让alice或root改变权限,让tom和rose都能进入alice主目录,查看目录下内容,查看1.txt内容,修改1.txt $ id 是alice $ cd 在主目录 /root/alice $ ls -ld drwx---r-x 705 drwxr-xr-x 755 $ chmod 755 ~ 或 chmod a+rx ~ $ ls -l -rw-r--rw- 646 -rw-rw-rw- 666 $ chmod 666 1.txt 或 chmod a+rw 1.txt 说明:如果alice不小心将自己主目录权限改为666或644,会让自己缺少目录的x权限 755 rwx r-x r-x 644 rw- r-- r-- 自己是无法进入自己主目录中 cd回车 会失败 如何解决? 使用root身份将alice主目录的权限改为755 $ su 输入密码 # chmod 755 /home/alice 准备一个可执行文件:f1 改为可执行,可直接运行 由alice操作: $ id 是alice $ pwd 在/home/alice $ vi f1 编辑:date sleep 10 cal 保存退出 $ f1 命令找不到 和PATH有关 没有改命令所在路径 $ /home/alice/f1 $ ./f1 权限不够 -rw-r--r-- 644 -rwxr--r-- 744 -rwxr-xr-x 755 $ chmod u+x f1 $ chmod a+x f1 举例:写一个shell脚本,求出1~100的累加和 (笔试题) $ id 是alice $ vi sum.sh #!/bin/bash sum=0 i=1 while (($i<=100)) do sum=$(($sum+$i)) i=$(($i+1)) done echo "Sum=$sum" 保存退出后 $ chmod a+x *.sh 针对所有.sh文件,针对所有用户都可执行 比如:tomcat的bin目录下,有大量.sh文件, 包括启动服务器startup.sh 关闭服务器shutdown.sh 希望将所有.sh文件都改为针对所有用户可执行 四、查看文件内容的方式:cat more vi head tail 1、cat 适合看小文件,不可翻页,不可编辑 可以将多个文件合并成一个文件 $ date > t1 $ echo Hello > t2 $ cal > t3 $ cat t1 t2 t3 > newfile 2、more 适合看大文件,可以翻页,不可编辑 控制命令: 空格 -- 翻页 回车 -- 跳行 b -- 向前一屏 f -- 向后 h -- 求助 q -- 退出 / -- 查找 n -- 继续查找 将/etc/passwd文件拷贝到alice的主目录下: $ id 是alice $ cp /etc/passwd ~ $ cat passwd $ more passwd 纯文本编辑器:编辑任何的源代码、脚本、配置文件 3、vi 功能强大文本编辑器(Unix/Linux) vim等都是对vi的加强版 关注三种模式:如何切换 回车 i a o O 底行模式 ----> 命令模式 ----> 输入模式 <---- (初始模式) <---- : / ? Esc 常用的操作命令: O i 光标 a o 变为输入模式,光标停留位置不同 向上 k 向下 j 向左 h 向右 l 用小键盘方向键也可 到行首 ^ 到行尾 $ 到第5行 5G 屏首 H 屏尾 L 屏中央 M 前翻页 ctrl + b backward 后翻页 ctrl + f forward x 删除一个字符 dw 删除当前词 3dw 删除3个单词 dd 删除当前行 5dd 删除5行 (当前行开始) :5, 10d 冒号模式,删除5~10行 r 替换一个字符 cw 替换一个单词 cc 替换一行 C 替换从光标到行尾 yw 拷贝词 yy 拷贝行 (Y) 5yy 拷贝5行 p 粘贴 :1,2co3 拷贝行1,行2到行3之后 :4,5m6 移动行4,行5到行6之后 剪切 :w 存盘 write (类似Windows中 ctrl + s) :w 新文件名 另存为新文件 :wq 存盘退出 或 ZZ (shift + z + z) 或:x :q! 强制退出不存盘 其它命令: ~ 大小写转换 J 把当前行和下一行连起来 u 撤销上一步 undo :set number 显示行号 :set nu :set nonumber 取消行号 :set nonu :21 光标跳到指定行 21G 到21行 G表示文件为 1G第一行 /字符串 从当前行往下查找 ?字符串 从当前行往上查找 n 继续向下查找 N 反方向继续查找 :r file2 在光标所在位置插入另一个文件 (合并) :1,$s/旧串/新串/g 替换全文 说明:s表示替换 g表示全部替换 global 将所有: 换成@ :1,$s/:/@/g 练习:将文本中所有home都替换成 192.168.0.2 :1,$s/home/192.168.0.2/g 4、head 和 tail 查看文件的头几行: head -3 文件名 头3行 查看文件的后几行: tail -5 文件名 后5行 技巧:使用tail -f 文件名 动态刷新实时监控文件 用途:常用于查看系统的日志文件; 日志文件经常被更新,追加新的内容,需要监控。 $ tail -f 1.txt $ ctrl + c 结束监控进程 面试题:需要跟踪、监控Linux某日志文件xxx.log tail -f xxx.log select 列名, 表达式, 函数, ... 列的投影 from 表名, ... where 记录的匹配条件 行的选择 五、常用技巧 1、过滤:grep 过滤出n行 2、统计:wc 统计:行、单词、字符 的数量 3、排序:sort 4、管道: | 管道符:用于连接两个命令,前一个命令的输出,作为后一个命令的输入。(前一个命令的输出,作为后一个命令传入的参数) 例子1:将/etc/passwd的头10行,写入文件f2中 $ head -10 /etc/passwd > f2 例子2:将/etc/passwd的头10行排序后,写入文件f3中 $ head -10 /etc/passwd | sort > f3 例子3:将/etc/passwd排序后的头10行,写入文件f4中 $ sort /etc/passwd | head -10 > f4 5、常见用法 1)管道more: 分屏显示 对比:ls -l /etc ls -l /etc | more 空格 回车 q 2)管道grep: 过滤 对比:ls -l /etc ls -l /etc | grep ssh 找到含有ssh的行 drwxr-xr-x 2 root root 4096 4月 25 11:20 ssh 练习:查找出tom的账户信息 cat /etc/passwd | grep tom tom:x:501:501::/home/tom:/bin/bash 练习:找出girls组的所有用户的账户信息,按照用户名排序 /etc/group 组 girls:x:502: /etc/passwd 用户 先根据组名找到gid: cat /etc/group | grep girls 再根据gid找到与之有关的用户信息: cat /etc/passwd | grep 502 | sort 3)管道wc:统计 cat f1 | wc 3 行 4 单词 18 字符 练习:统计出girls组有多少账户 cat /etc/passwd | grep 502 | wc 行数就是账户数 小结:|常用法 |more 分页 |grep 过滤 |sort 排序 |wc 统计 六、进程管理 1、查看当前所有进程 ps -ef 以全格式显示当前系统所有进程 每一行就是一个进程的信息 -e 所有进程 -f 全格式 UID PID PPID C STIME TTY TIME CMD root 1 0 0 19:41 ? 00:00:03 init root 2 1 0 19:41 ? 00:00:00 [keventd] root 3 1 0 19:41 ? 00:00:00 [kapmd] Uid: 用户名 该进程由哪个用户发起的 (重要) Pid: 进程id 进程的唯一标识 (重要) PPid: 父进程id C: cpu占有率 Stime: 开始的时间 (重要) TTY: 开始该进程的终端号 Time: 运行时间 CMD: 启动该进程的命令名 (重要) uid Stime CMD Pid __用户在__时刻使用__命令启动了一个进程,被系统分配进程号pid为__ 补充:top 查看系统资源使用情况,包括CPU、进程、内存Memory等 特点:动态实时刷新 ctrl + c结束进程 启动sleep进程: sleep 3000 其它窗口:ps -ef | grep sleep alice 3421 3212 0 17:49 pts/0 00:00:00 sleep 3000 进程id: 3421 2、根据pid杀进程:kill 进程id 前提:只有进程的发起者、root才可杀进程 和权限有关 $ kill 3421 没有权限 $ su 密码:123456 # kill 3421 说明:某些时候kill 进程id 无法直接关闭进程,可能是信号丢失引起; 可以使用kill -9 进程id -9选项 百分百杀进程 3、根据进程命令名批量杀进程:pkill 命令名 # pkill sleep 关机:halt halt: must be superuser. 重启:reboot reboot: must be superuser. 必须是root才有权限操作! 作业:盘点重要的、常用的十类命令。 最实用的命令 id pwd ls -l、 任务管理、进程管理、磁盘文件管理、网络管理、特殊技巧; 建议分类记忆,后续需要时查阅相关文档、手册,进行适当的扩展。