Linux——国产系统的未来
-
whoami :查看当前用户
-
date :查看时间
-
cal :查看日历cal 2018 查看一整年
认识Linux的构架
linux中 一切都是从根出发的 / 在Linux中一切皆文件 设备也是文件 访问设备的方式跟访问文件的方式是一样的 挂载:好比把u盘放到电脑上,本来u盘式不能直接访问的,电脑可以访问优盘的内容,我们通过把U盘插入到电脑上,实现访问,这个过程就叫挂载。 #在根目录下 ~$ tree -L 1 . #根 ├── bin #存放我们常用的命令 比如cd ls ├── boot #我们系统启动文件和核心文件都在这里(严禁乱动) ├── cdrom #光驱的内容 ├── dev #device 存放我们的硬件设备 硬盘 光驱都在这里 ├── etc #系统的配置文件 放在这个目录下 (重点) ├── home #普通用户的家目录 (重点) ├── initrd.img -> boot/initrd.img-4.13.0-45-generic ├── initrd.img.old -> boot/initrd.img-4.13.0-36-generic ├── lib #系统的动态链接库 类似于Windows中的 .dll 文件 ├── lib64#64位操作系统的动态链接库 ├── lost+found#系统自动生成的 如果系统文件出错这里边会自动多文件,记录产生的错误 ├── media#当我们插入u盘或者光驱的时候 会自动挂载到这里 ├── mnt #mount挂载的意思 Linux文件系统类型是ext4 windows中NTFS (硬盘先分区 在格式化 ) #ext4 想访问ntfs类型 可以手动挂载到mnt下面 #重点 ├── opt #安装第三方软件 比如Oracle等 ├── proc#系统的进程 状态信息 存放在这里 这些信息是在内存中 ├── root#管理员用户的家目录 里边存放好多隐藏的文件 慎动 重点 ├── run#进程的运行数据 ├── sbin #存放管理员常用的命令 ├── snap #sudo snap ├── srv #Linux服务信息 ├── sys #在这里存放Linux驱动的实时信息 ├── tmp #临时目录 ├── usr #C:\Program Files 类似于windows 的这个目录安装软件安装在这里 bin 应用程序的可执行文件 #sbin 超级管理员的执行文件 #local 管理员安装应用程序的目录 #重点 ├── var # 用来存放不断变大的文件 比如数据库文件日志 进程 #重点 ├── vmlinuz -> boot/vmlinuz-4.13.0-45-generic └── vmlinuz.old -> boot/vmlinuz-4.13.0-36-generic 22 directories, 4 files
历史命令
-
history
-
cai@hello-world:/音乐$ history 5
-
cai@hello-world:/音乐$ !257(执行257行)
-
!行号 自动执行第n条历史命令
-
-
上箭头 上一条命令
-
下箭头 下一条命令
文件操作
ls -a 列出所有的子文件及目录 包括隐藏的 -l 详细信息展示 --color 不同颜色展示 文件 白色 文件夹 蓝色 链接 浅蓝色
文件及目录的属性
drwxr-xr-x 16 cai cai 4096 Jul 18 17:06 cai -r--r--r-- 1 root root 55485539 Jul 17 20:02 VMwareTools-10.2.5-8068393.tar.gz drwxr-xr-x 9 root root 4096 Mar 22 17:10 vmware-tools-distrib lrwxrwxrwx 1 root root 30 Jul 17 19:03 vmlinuz -> boot/vmlinuz-4.13.0-45-generic 第一部分: - 文件 d 目录 l 链接 第二部分: rwx r-x r-x: rwx 文件或者目录拥有者的权限 可读 可写 可执行 r-x 所属组的权限 可读 不可写 可执行 r-x 其他人的权限 可读 不可写 可执行 - :没有权限 r:read w:write x:exec 第三部分: 16 1 表示inode 节点 第四部分: cai 所属的用户 第五部分: cai 所属的组 第六部分: 4096 文件的大小 单位字节 第七部分: Jul 18 17:06 最后一次修改的时间 第八部分: VMwareTools-10.2.5-8068393.tar.gz 目录名 或文件名
rwxrwxrwx 777
4=r,2=w,1=x,- = 0 : r 代表读,w 代表写,x 代表执行, 如果可读,权限是二进制的100,十进制是4; 如果可写,权限是二进制的010,十进制是2; 如果可运行,权限是二进制的001,十进制是1; 具备多个权限,就把相应的 4、2、1 相加就可以了: 若要 rwx 则 4+2+1=7 若要 rw- 则 4+2=6 若要 r-x 则 4+1=5 若要 r-- 则 =4 若要 -wx 则 2+1=3 若要 -w- 则 =2 若要 --x 则 =1 若要 --- 则 =0
软连接 ln就是windows中的快捷方式
link ln -s 源文件的名字 新名字(快捷方式的名) sudo ln -s var varrr
目录管理
-
pwd查看当前所在目录
-
绝对路径
-
cd / home 一切从/出发
-
-
相对路径
-
以当前目录为准 上级 目录或者子目录
-
..回到上级目录
-
. 还在当前目录
-
../../回到上两级目录
-
-
cd 回到当前目录的家目录
-
cd .. 回到上级目录
-
cd . 还在当前目录
-
cd ~ 回到当前用户家目录 (可以直接在虚拟机上进行新建文件夹)
-
cd - 回到来源目录
-
cd / 回到根目录 (在虚拟机上不能直接新建文件夹,需要通过终端创建)
创建目录
sudo mkdir 目录名字 #创建目录名 sudo mkdir -p 目录名/子/孙 #创建多级目录 sudo mkdir -p 音乐/喜欢/最爱
删除 目录
sudo rmdir 目录 删除空目录 sudo rmdir -p 递归删除 (目录里面不能有子目录 文件) //文件夹音乐/喜欢/最爱 sudo rmdir -p 音乐/喜欢/最爱 递归删除 先删除最爱文件夹 然后 喜欢文件夹下没有其他内容 也会被删除 然后 到音乐文件夹 如果音乐文件夹没有其他内容也会被删除
创建文件
sudo touch 文件名 sudo touch 文件1 文件2,,,, 创建多个文件 cat 文件名 查看文件中的内容 echo 内容 输出内容到屏幕 echo内容 >文件名 内容保存在文件中(元文件中有内容会被替换掉 添加到最后 用 >> ) 注意:有时候导入文本失败 需要更改文件的权限 chmod 666(参数) 文件名
文件的移动
mv sudo mv 文件名 目录名 sudo mv 目录名 目录名(已经存在) sudo mv 文件名或者目录名 新目录名 (重命名)
文件的复制
cp copy sudo cp source.list source.list.backup 备份 sudo cp -r 目录名 新目录名 (复制目录)
文件的删除
sudo rm 文件名 可以删除多个 sudo rm -i 文件 删除之前确认是否删除 sudo rm -f 文件 强制删除 sudo rm -f *.mp4 删除以.MP4结尾的文件
强制删除目录
sudo rm -rf 文件名/目录名 强制删除 sudo rm -rf /* 删除所有 慎用
查看文件
cat 文件名 查看文件内容 tac 文件名 文件内容的倒看 head -n 数字 查看前多少行 tail -n 数字 查看后多少行 tail -f cat文件名 实时查看文件后面的内容 用来查看日志 watch -d -n 秒数 cat 文件名 每秒刷新一次文件的内容 (重点) more 文件名 空格分页查看 回车一行行 q退出 less 文件名 g首页 G尾页 b向前分页 空格向后分页 q退出 stat 文件 查看文件的详细信息 atime accesstime 访问时间 mtime modifytime 修改时间 ctime createtime 创建时间
文件的查找
find [路径] [参数] 文件的名字 cai@hello-world:/$ sudo find / -name 1 (在根目录下查找文件名为1的文件) cai@hello-world:/$ sudo find / -name test(在根目录下查找文件名为test的文件) cai@hello-world:/$ sudo find / -iname html(查找名为html的文件不区分大小写) find /音乐 -mtime -1(查找在音乐目录下的修改时间在一天内的文件) sudo find /音乐 -user root(查找根目录下音乐文件夹下属于root用户的文件) sudo find /home -size 10c(查找home目录下大小在10字节的文件) sudo find /home -size +10c -size -100c(查找home目录下大于在10字节小于100字节的文件) sudo find /home -size +10c -size -100c -iname "*.txt" (查找home目录下大于在10字节小于100字节文件后缀.txt的文件)(注意 * 通配符的作用) -name 按文件名字查找 -iname -mtime +n 表示超过n天的文件 -n表示在n天之内的文件 -user 根据文件所属的用户 查找 -size 单位 c字节 k m g find /-name test.html 在/(根)目录下查找文件名为 test.html的文件 find /var -size +10k -size -100k -name "*.log" 查看var 下面文件大小在10---100k的.log文件
grep 类似于js正则表达式
-
cai@hello-world:/$ grep -rn 像 /音乐 *.txt (在根目录下查找 匹配内容“像” 在路径音乐文件夹下的后缀为 .txt文件中查找)
-
cai@hello-world:/音乐$ grep 像 *.txt (直接在音乐目录下查找匹配)
-
-r 递归查找
-
-n 显示行号和内容
grep 参数 “内容”(要匹配的内容) 文件名 grep -n 6 1.txt 在文件1.txt中匹配内容6 显示行号 参数: -i 忽略大小写 -c 只显示行数 不显示内容 -r 递归查找 -n 显示行号 内容 -w 只匹配单词 --color 不同的颜色显示 --include 在文件中搜索 --exclude (其他教程都没有提) cai@hello-world:/$ sudo grep -rn '像' --include '*.txt' (在当前用户根目录含有“.txt文件中匹配 像 递归查找显示行号和内容”)
管道符
-
cai@hello-world:/$ cat /音乐/huawei.txt | grep "风"
-
cat /etc/passwd 查看etc目录下的passwd的所有内容
-
cat /etc/passwd | grep 'root' 匹配包含“root”内容的行
-
cat 1.txt | grep "56"
-
先查看文件1.txt文件内容 在匹配内容56
-
上一个的输出 作为下一个的输入
查找命令所在的位置
/bin 存放普通用户常用的命令 which 命令 which ls whereis ls cai@hello-world:/$ which ls (ls命令在哪个文件下) /bin/ls cai@hello-world:/$ which grep (grep命令在哪) /bin/grep cai@hello-world:/$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz(得到的是绝对路径) cai@hello-world:/$ whereis grep grep: /bin/grep /usr/share/man/man1/grep.1.gz /usr/share/info/grep.info.gz
wc统计
统计文件内部有多少行 wc -l 统计多少行 cai@hello-world:/音乐$ cat english.txt | wc -l wc -w 统计单词数 cai@hello-world:/音乐$ cat english.txt | wc -w
awk 流式编辑器 将每一行进行切割 分析
先查看某个文件所有内容 然后用管道符 | 然后awk 参数 -F(以 : 进行切割) 然后输出打印'{print $1(打印第一部分 $0 打印全部)}' cat /etc/passwd | awk -F ':' '{print $1}' cai@hello-world:/etc$ cat group | awk -F ':' '{print $1}'
uniqu配合sort来使用
uniq -c 文件名 输出每一行出现的次数 cai@hello-world:/音乐$ uniq -c english.txt 假如文件是1.txt: hello hello nihao nihao world uniq -c 1.txt 回车结果 (字符串相邻时行数加1) 2 hello 2 nihao 1 world -d或--repeated 仅显示重复出现的行列 (见菜鸟教程Linux uniq命令) sort 1.txt | uniq -d 回车结果 2 hello 2 nihao
sort
cai@hello-world:/音乐$ cat time.txt | sort -t ":" -k 1 -n sort -n 按纯数字值排序 -r 倒序 -k 按照指定的列排序 -t 指定分隔符 -u 忽略相同的行 cat 文件名 管道符 | sort (默认对第一个字母排序) cat 文件名 | sort -t ":" -k 3 -n 把文件以 : 分割 对第三列进行排序 按照数字排列
查找最近使用的10条命令
最近经常使用history
unuq-c 显示出现的次数
sort 排序
对文件的第一列排序按照纯数字倒序 :sort -r -n -k 1
取前10行 head -n 10
history | awk -F " " "{print $2}" | sort |uniq -c | sort -r -n -k 1 | head -n 10
cai@hello-world:/音乐$ history | awk -F ':' '{print $1}' | sort | uniq -c | sort -r -n -k 1 | head -n 5 1 9 ls 1 99 vim /crontab 1 98 ls 1 97 cd etc 1 96 ls
文件的权限
rwxr-xr-x r 读 100 4 w 写 010 2 x exec 执行 001 1 - 没有权限 rwx 文件或者目录的拥有着 r-x 所属组的权限 r-x 其他用户的 常用: 700 rwx --- --- 755 rwx r-x r-x 777 rwx rwx rwx 600 rw- --- --- 644 rw- 可读可写 r- 可读 r- 可读 666 拥有着读写 组读写 其他用户读写 rw- rw- rw- cai@hello-world:/音乐$ sudo chmod g+w lover.odt (给所属的组增加一个写的权限) u 代表拥有着 g 所属组 o 其他人
chmod(修改文件的权限)
chmod + 增加 权限 在原来的基础上 - 减掉权限 = 赋值权限 chmod 777 文件名 给文件最大的权限 chmod 666 文件名 chmod -R 777 目录 递归修改目录子目录及文件(是目录要加-R) cai@hello-world:/音乐$ sudo chmod 666 lover.odt (给lover.odt文件一个666的权限) cai@hello-world:/音乐$ sudo chmod -R 777 time.txt
哪个目录或者文件 先到它所在的上一级目录 然后再 修改
更改文件及目录的拥有着 chown
源文件:(所有者为root用户 组名root) -rw-r--r-- 1 root root 261 7月 21 20:33 english.txt 更改文件的所有者(更改的所有者用户 组名要存在) cai@hello-world:/音乐$ sudo chown cai:cai english.txt 文件变成(此时文件的所有者是cai 组名cai) -rw-r--r-- 1 cai cai 261 7月 21 20:33 english.txt 递归修改目录的所有者和组名 例: 新建文件夹 cai@hello-world:/音乐$ sudo mkdir -p test/text1/text2 cai@hello-world:/音乐$ ls -al(显示所有文件信息) (test属于root) drwxr-xr-x 3 root root 4096 7月 21 22:51 test 修改所有者 cai@hello-world:/音乐$ sudo chown -R cai:cai test cai@hello-world:/音乐$ ls -al (test属于cai) drwxr-xr-x 3 cai cai 4096 7月 21 22:51 test 然后切换到test目录下 cai@hello-world:/音乐$ cd test cai@hello-world:/音乐/test$ ls -al total 12 drwxr-xr-x 3 cai cai 4096 7月 21 22:51 . drwxr-xr-x 4 root root 4096 7月 21 22:51 .. (test1目录所有者也被修改) drwxr-xr-x 3 cai cai 4096 7月 21 22:51 text1 change owner 的缩写chown chown 用户名:原来的组名 文件或目录 (只修改用户名) chown 原来的用户名:组名 文件 (只修改所有者) chown 用户名 :组名 文件 (都改) chown -R 用户名:组名 目录 (递归改变目录)
更改所属的组chgrp
chgrp 组名 文件名/目录名 原来: -rw-rw-rw- 1 root root 0 7月 21 20:58 lover.odt 更改: cai@hello-world:/音乐$ sudo chgrp cai lover.odt 之后: -rw-rw-rw- 1 root cai 0 7月 21 20:58 lover.odt chgrp -R 组名 文件名/目录名 递归修改
chattr底层控制权限chmod背后的大boss(拥有对文件的绝对的控制权)
i 不能删除 不能重命名 不能修改权限 cai@hello-world:/$ sudo chattr +i grilgril.txt (用chattr + i 处理后 grilgril.txt文件就不再被修改如:追加文件内容 修改所属的组 拥有着等) cai@hello-world:/$ sudo echo '女孩子文静点好啊' >> grilgril.txt -bash: grilgril.txt: Operation not permitted a 只能追加 不能删除 只能 >> cai@hello-world:/$ sudo chattr +a boy.txt cai@hello-world:/$ sudo vim boy.txt(利用vim编辑器无法写入内容) cai@hello-world:/$ sudo echo '男孩应该坚强!' >> boy.txt (利用echo可以追加内容) cai@hello-world:/$ sudo rm boy.txt (无法删除) sudo: unable to resolve host hello-world rm: cannot remove 'boy.txt': Operation not permitted + 在原来的基础上增加 - 在原来的基础上递减 cai@hello-world:/$ sudo chattr -a boy.txt (让a作用于文件boy.txt功能消失 可以删除文件 向文件vim内追加内容) cai@hello-world:/$ sudo vim boy.txt sudo: unable to resolve host hello-world cai@hello-world:/$ cat boy.txt 男孩应该坚强! 男孩应该爱护女孩子。 = 更新权限 cai@hello-world:/$ sudo chattr +a boy.txt(增加+a) cai@hello-world:/$ sudo chattr = boy.txt (更新,让权限消除) cai@hello-world:/$ sudo vim boy.txt (可以用vim编辑器操作)
用户和组的管理
一个用户至少有一个主组
一个组可以拥有多个用户
一个用户可以拥有多个组
添加组useradd whoami 查看当前哪个用户登陆
useradd 用户名 cai@hello-world:~$ sudo useradd yuting(新建一个用户) cai@hello-world:/etc$ cat passwd(信息存储在passwd文件里) yuting:x:1001:1001::/home/yuting: su 用户名 切换用户名 su 不写用户名 表示 切换到root 添加用户之后 用户信息 会存到 /etc/passwd 重启以后 还会在 home下面产生一个 以用户名为命名的目录 表示该用户的家目录 示例: 查看用户: cai@hello-world:/etc$ cat /etc/passwd | grep cai 得到:cai:x:1000:1000:cai,,,:/home/cai:/bin/bash cai@hello-world:/etc$ cat passwd | grep yuting yuting:x:1001:1001::/home/yuting: 查看组: cai@hello-world:/etc$ cat /etc/group sambashare:x:128:cai sambashare:用户组 x:密码 cai:用户??????? 查看组名: cai@hello-world:/etc$ cat /etc/group | grep cai adm:x:4:syslog,cai cdrom:x:24:cai sudo:x:27:cai dip:x:30:cai plugdev:x:46:cai lpadmin:x:113:cai cai:x:1000: sambashare:x:128:cai cai@hello-world:/etc$ cat passwd groups | grep yuting cat: yuting:x:1001:1001::/home/yuting: groups 查看当前登录用户的组内成员 cai@hello-world:/etc$ groups cai adm cdrom sudo dip plugdev lpadmin sambashare groups cai 查看cai用户所在的组,以及组内成员 cai@hello-world:/etc$ groups cai cai : cai adm cdrom sudo dip plugdev lpadmin sambashare whoami 查看当前登录用户名 cai@hello-world:/etc$ whoami cai root@hello-world:/etc# whoami root cai:x:1000:1000:cai,,,:/home/cai:/bin/bash 第一部分:cai 用户名 第二部分:x 用户的密码 第三部分:1000 用户的id 第四部分:1000 组id 第五部分:/home/cai 家目录 第六部分: /bin/bash 表示 cai 具备执行脚本的权限 (shell命令所在的目录) /usr/sbin/nologin 表示该用户不具备执行脚本的权限 也表示 该不能用该用户登录系统 useradd -g 添加用户的时候 直接把该用户加入到指定的组中 组必须是已经存在的 sudo useradd -g jinxingping jinlong -u 用户制定id sudo useradd -u 8888 liangliang -m 在创建 用户的同时 自动在home 目录下面生成一个以用户名为命名的目录 -d 制定用户的家目录 sudo useradd -md /qiaoqiao jinqiao 创建jinqiao的同时自动创建用户家目录 并且自己制定家目录在 /qiaoqiao cai@hello-world:/etc$ sudo useradd -md /qing feng cai@hello-world:/etc$ cat passwd feng:x:1003:1003::/qing: -s 制定用户不能登录 sudo useradd -m guoguo -s /usr/sbin/nologin
删除用户
userdel 用户名 root@hello-world:/etc# sudo userdel tingzhi (删除tingzhi用户) root@hello-world:/etc# cat passwd(看不到tingzhi的信息 已经被删除)
修改用户名
passwd 用户名 cai@hello-world:/etc$ sudo passwd feng(修改feng用户的密码) Enter new UNIX password: (输入两次密码) Retype new UNIX password: passwd: password updated successfully cai@hello-world:/etc$ su feng (切换到feng用户) Password: feng@hello-world:/etc$ passwd 后面不写用户名 默认修改root Ubuntu root 是不启用的 sudo password rpoot 启用管理员用户 su root passwd -l 锁定用户密码 -u 解锁
用户组
groups 查看当前用户属于哪个组 id 查看用户id 组id cai@hello-world:/etc$ groups cai adm cdrom sudo dip plugdev lpadmin sambashare cai@hello-world:/etc$ id uid=1000(cai) gid=1000(cai) groups=1000(cai),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare) 添加组: sudo groupadd 组名 组的信息存放在 /etc/group 下面 删除组: sudo groupdel 组名 修改组: sudo groupmod -n 新组名 旧组名