目录
linux基础原则: 1,目的单一的小程序组成(组合小程序,完成复杂任务) 2,一切皆文件 3,尽量避免捕获用户接口(不跟用户交互) 4,配置文件保存为纯文本格式
命令提示符 # "#"表示root模式 # "$"表示普通用户 1)系统用户 2)普通用户 当输入某条命令后,命令会先交给SHELL,由SHELL交给内核,内核在进行判断,这个命令是否有权限执行,如果无权限,则从什么地方开始执行,且返回错误值
SHELL #GUI 如:"x-Windows" #CLI 如:"Gnome,KDE,..." 1) sh,bash,csh,zsh,ksh,tcsh,比较常用好用的是bash 系统合法的SHELL,"[root@xiaofu ~]# cat /etc/shells"文件中。
用户角度看SHELL类型 1.登陆式SHELL 1)正常通过某终端登录(SSH) 2) su - USERNAME 3) su -l USERNAME #读取配置文件顺序: /etc/profile---->/etc/profile.d/*.sh---> ~/.bash_profile---> ~/.bashrc--->/etc/bashrc---> /etc/bashrc 2.非登陆式SHELL 1) su USERNAME 2)通过图形界面打开的SHELL 3)自动执行的SHELL脚本 #读取配置文件顺序: ~/.bashrc --->/etc/bashrc --->/etc/profile.d/*.sh Bash配置文件 1.全局配置文件 #/etc/profile, /etc/profile.d/*.sh, /etc/bashrc 2.个人配置文件 # ~/.bash_profile , ~/.bashrc #当全局配置文件和个人配置文件不同时,以个人配置为准。 ###################################### profile类文件作用: 1)设定环境变量 2)运行命令或脚本 bashrc类文件作用: 1)设定本地变量 2)定义别名
/boot 系统启动相关文件,如:内核,initrd,grub /dev 设备文件 块设备:可以实现随机访问的设备,(无先后顺利) 字符设备 线性,(有次序,按字符为单位),鼠标,显示器 设备号:主设备号,次设备号 /etc 配置文件 /home,/root 家目录 /lib 库文件,内核模块文件/lib/modules 静态库 .a 动态库 动态链接库(.so 共享对象) /media,mnt 挂载移动设备,额外的临时文件系统 /opt 可选目录,安装第三方程序 /proc 伪文件系统,没任何内容,启动了就有文件,内核映射文件 /sys 伪文件系统,和硬件设备相关的属性映射文件 /tmp,/var/tmp 临时文件 /var 可变化文件 /bin 可执行文件 用户命令 系统启动相关的命令 /sbin 管理命令 /usr 全局共享只读文件,只读文件 /usr/bin /usr/sbin /usr/lib 启动之后某些基本功能相关的命令 /usr/local 第三方软件 /bin /sbin /lib
内置命令 #help 命令 外部命令 #命令 --help 命令手册 #man 命令 man分章节: 1.用户命令:所有用户都可以使用的命令(/bin,/usr/bin,/usr/local/bin) 2.系统调用 3.库调用 4.特殊文件(设备文件都属于特殊文件) 5.文件格式(配置文件语法) 6.游戏 7.杂项 8.管理命令(/sbin,/usr/sbin,/usr/local/sbin) --root权限才能使用(修改硬件参数) #命令的使用: SYNOPSIS mount [-lhV] mount -a [-fFnrsvw] [-t vfstype] [-O optlist] <>--->必须给出的内容 []--->可选 ...--->可出现多次 {}--->进行分组(意义不大) | 多选 MAN: NAME:命令名称及功能简要说明 SYNOPSISS:用法说明(包括可用选项) DESCIPTION:详细说明,每个选项的意义 OPTIONS:说明每个选项的意义 files:此命令相关的配置文件 EUGS: EXPLAMES:比如: SEE ALSO:另外参照 man使用: 向后翻一屏:space(空格键) 向前翻一屏:b 向后翻一行:ENTER 向前翻一行:k 查找功能:---- /关键字 :向后 ?关键字:向前 n:下一个 N:前一个 q:退出 在线手册: info 命令 帮助文档:/usr/share/doc
命令缓存 当执行某条命令后,bash会缓存下来 [root@xiaofu ~]# hash hits command 1 /usr/bin/mv 1 /usr/bin/cp #缓存的概率对系统而已非常重要,应用缓存,DNS缓存...查找内容的速度非常快,速度是o(1)的---衡量一个程序执行速度的标准 #从一个列表中查找一个数据的速度随着列表长度变化而发生变化的比例,无论这个队列有多长,o(1)查找的速度一样。
进程是用户操作计算机的代理 ###示例### [root@xiaofu tmp]# ll -d *.txt -rw-r--r--. 1 user01 group1 0 Dec 15 03:41 1.txt -rw-r--r--. 1 user02 group2 465 Dec 15 02:34 2.txt ###进示例### 启动一个进程,这个进程一定是以某个用户的身份运行的,这个用户就是这个进程的发起者,那么这个进程能访问那些资源取决于: 这个进程自身的属主属组及访问文件的属主属组。 如: 进程1 user01 user01 对象 rwxr-xr-- user02 user01 a.txt 1,当进程1访问"a.txt"文件的时候,以什么权限访问? #系统查看进程1的属主和"a.txt"的属主是否一样,不一样的话,再看属组(进程1的属主是否属于"a.txt的属组",如果是,则以"r-x"这个权限执行,如果不是属主组则以"other"的身份"r--"访问) 2, user01 发起"ll"命令后以什么权限执行? # "/bin/ls"也有自身的权限"rwxr-xr-x root root /bin/ls","user01"既不是属主组root,所有以"other"权限"r-x"执行,执行成功后的进程2---"ll进程"的属主是进程的发起者"user01"
-l(long) 显示文件属性 文件属性类型: -:普通文件(f) -d:目录文件 -b:块设备文件 block -c:字符设备文件 character -l:符合链接文件(软链接) -p:命令管道符文件 pipe -s:套接字符文件 socket 文件权限---属主,组,其他 (owner:group:other) 文件硬链接次数 文件大小(size)单位:字节 时间戳:最近一次修改时间 访问时间:access 修改时间:文件内容发生改变 modify 改变时间:文件属性的改变 change 文件的属性数据也叫元数据 -h:做单位换算 -a:显示以.开头的隐藏文件 . 表示当前目录 .. 表示父目录 -A 显示当前所有文件(不显示.和..文件) -d:显示目录自身属性 -i:显示文件缩影节点号 index node (inode) -r:逆序显示 -R:递归显示(消耗资源)recursive
###示例### [root@localhost ~]# ls -l total 4 -rw-------. 1 root root 1572 Nov 3 08:33 anaconda-ks.cfg [root@localhost ~]# ls -l /dev
crw-rw-rw-. 1 root root 1, 8 Dec 9 23:44 random
drwxr-xr-x. 2 root root 60 Dec 9 23:44 raw
drwxr-xr-x. 2 root root 80 Dec 9 23:44 rhel
lrwxrwxrwx. 1 root root 4 Dec 9 23:44 rtc -> rtc0
crw-------. 1 root root 253, 0 Dec 9 23:44 rtc0
家目录:主目录 cd ~用户名:进入指定用户的家目录 (只有root有权限) cd - :返回上一次目录 ###示例### [root@localhost ~]# cd ~ [root@localhost ~]# pwd /root [root@localhost ~]# cd /mnt/ [root@localhost mnt]# cd /tmp [root@localhost tmp]# cd /home [root@localhost home]# pwd /home [root@localhost home]# cd - /tmp [root@localhost tmp]# cd -
命令类型: 内置命令(SHELL内置) 外置类型:在文件系统的某个路径下 有一个与命令名称相应的可执行文件(别名除外) ###示例### [root@localhost home]# type ls ls is aliased to `ls --color=auto' [root@localhost home]# type cd cd is a shell builtin [root@localhost home]# type type type is a shell builtin
[root@test ~]# vim /etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin zs:x:1000:1000:zs:/home/zs:/bin/bash ###注释### 一位:登录名 #"zs" 二位:密码占位符,(密码在/etc/shadow里面) #"x" 三位:uid #"1000" 四位:gid 基本组id ,(其他的附加值在/etc/group里面) #"1000" 五位:可选(用户注释信息) #"zs" 六位:家目录 #"/home/zs" 七位:用户默认SHELL #"/bin/bash" ###系统合法的shell### [root@test ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin
[root@test ~]# vim /etc/shadow xiaofu:$1$11111111$oDTohtH7a0kE4AiKw1H8O/:18241:0:99999:7::: user01:!!:18241:0:99999:7::: 一位:登录名 #"xiaofu" 二位:加密的密码 #"加密字符串($1$11111111$xxxxxxx)" #"1"-->md5加密 "11111111"--->密码加密前面加的杂质 "xxxx"--->用户密码 # "*" --->锁定,不允许登陆 #"!!" --->空密码 三位:从1970年1月1日到密码上一次修改所经过的时间 四位:密码最小使用期限(0不做限定) 五位:最长时间期限 六位:密码警告时间 七位:强制修改时间 八位:账号有效时间 9位:保留
[root@test ~]# vim /etc/group xiaofu:x:2000:xiaofu mygroup:x:2001: mygroup2:x:2002: user01:x:2003: 第1位:用户名 第2位:密码占位符 第3位:组ID 第4位:以这个组为附加值的用户列表(多个用户,以,号分开) 用户组类别: 1.私有组:创建用户时,如果没有为其指定所属组,系统会自动为其创建一个与用户名同名的组 2.基本组(默认组),用户的默认组,基本组未必是私有组 3.附加值,额外组,默认组以外的其他组
useradd 选项 用户名 -u uid -g gid (基本组) -G Gid,...(附加组)可以有多个,使用,号分开 -c 注释 (可以用引号引起来) -d 家目录 -s 指定shell路径 -m -k 强制为用户创建家目录 /etc/skel #环境的设置文件,bash的配置文件 bash用于个人用户的环境配置文件 M 不创建家目录 /etc/login.defs ###示例1### ###新建用户"jeff",uid为2020,家目录为"/home/jeff",基本组为"mygroup2",附加值为"xiaofu"### [root@test ~]# useradd -d /home/jeff -g mygroup2 -G xiaofu -u 2020 jeff [root@test ~]# id jeff uid=2020(jeff) gid=2002(mygroup2) groups=2002(mygroup2),2000(xiaofu) [root@test ~]# cd /home/jeff/ [root@test jeff]# pwd /home/jeff [root@test jeff]# ll -d drwx------. 2 jeff mygroup2 62 Dec 11 00:14
###示例2### ###新建用户user01,uid为2030,gid为2030,家目录为"/home/user01",基本组为"user01",附加组为"mygroup"### [root@test ~]# vim /etc/passwd jeff:x:2020:2002::/home/jeff:/bin/bash user01:x:2030:2030::/home/user01:/bin/bash [root@test ~]# vim /etc/group xiaofu:x:2000:jeff mygroup:x:2001:xiaofu mygroup2:x:2002: user01:x:2030: [root@test ~]# vim /etc/shadow jeff:!!:18241:0:99999:7::: user01:!!:18241:0:99999:7:: #密码暂时为空 [root@test ~]# cp -r /etc/skel/ /home/user01 #bash环境变量配置文件拷贝到"/home/user01"目录中 [root@test ~]# chown -R user01.user01 /home/user01/ [root@test ~]# chmod -R go= /home/user01/ #属组和其他人无权限访问家目录 [root@test ~]# su - user01 Last login: Wed Dec 11 00:32:52 EST 2019 on pts/0 #无密码暂时无法登陆 [root@test home]# openssl passwd -1 -salt '12312312' #"-1"使用md5加密 "-salt"密码前加一点杂质的关键字 Password: $1$12312312$w4nuNA8mCUe8wpnYCpAJD0 #手动创建加密密码并写入/etc/shadow文件中 [root@test]#vim /etc/shadow
user01:$1$12312312$w4nuNA8mCUe8wpnYCpAJD0:18241:0:99999:7::: 测试可正常使用密码从远程登陆
[root@test default]# vim useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
userdel 选项 用户名 默认不删除家目录 -r 同时删除家目录 ###以上同useradd命令类似### [root@test ~]# userdel -r jeff #"-r"删除"/home目录下的家目录" [root@test ~]# ll /home total 4 drwxr-xr-x. 3 root root 16 Dec 10 03:24 home drwx------. 2 openstack openstack 83 Dec 10 23:36 openstack drwx------. 2 2030 2030 99 Dec 11 00:42 user01 drwx------. 2 xiaofu xiaofu 99 Dec 11 00:05 xiaofu
usermod -u -g -G 覆盖以前的附加值 -Ga 追加附加值 -c 注释 -d(m) 家目录 (覆盖以前的文件,加m保留以前的文件) -l 修改用户登录名 -e 用户禁用时间 -f 非活动时间 -L 锁定用户账号 -U 解锁用户账号
[root@test ~]# chsh
Changing shell for root.
New shell [/bin/bash]:
[root@test ~]#
[root@test ~]# chfn
Changing finger information for root.
Name [root]: haha
Office []: 110
Office Phone []: 119
Home Phone []: 11111
Finger information changed.
[root@test ~]# stat
stat: missing operand
Try 'stat --help' for more information.
[root@test ~]# cat /etc/passwd | grep root
root:x:0:0:haha,110,119,11111:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
chage
-d 最近一次修改时间
-E 过期时间
-I 非活动时间
-m 最短使用期限
-M 最长使用期限
-W 警告时间
即:命名的内存空间(内存中渔村的值),用于定义当前用户的工作环境的属性, 新建用户属,位于"/etc/skel"的文件就是bash的环境变量配置文件。 [root@test ~]# printenv #显示环境变量 内存缓存 [root@test ~]# hash #使用命令"hash"查看当前SHELL的缓存命令 hits command 2 /usr/bin/printenv
groupadd -r 添加一个系统用户组,useradd也支持 #系统用户通常没有家目录,且不能登陆系统 groupmod -n 修改祖名 groupdel gpasswd 祖名 [root@test ~]# gpasswd group1 #给组"group1"加密码 Changing the password for group group1 New Password: [user02@test ~]$ id user02 uid=1001(user02) gid=1001(group2) groups=1001(group2) [user02@test ~]$ mkdir 111 [user02@test ~]$ ls 111 [user02@test ~]$ ll -d 111/ drwxr-xr-x. 2 user02 group1 6 Dec 13 00:10 111/ #目录的组名已经为"group1"
chmown 属主 属组 改变文件属主 chgrp chown 属主 file ... -R 修改目录及其子目录/文件的属主 --reference=/path/to/somefile file, ... (参考某个文件) 新文件 ###示例### [user02@test ~]$ ll -rw-r--r--. 1 user02 group2 0 Dec 13 00:20 a.txt -rwxrwxr-x. 1 user02 group1 0 Dec 13 00:21 b.txt [user02@test ~]$ chown --reference a.txt b.txt #把b.txt文件的属性修改成a.txt一样 [user02@test ~]$ ll -rw-r--r--. 1 user02 group2 0 Dec 13 00:20 a.txt -rwxrwxr-x. 1 user02 group2 0 Dec 13 00:21 b.txt -rw-r--r--. 1 root root 358 Nov 3 01:52 redhat.repo -rw-r--r--. 1 root root 64 Nov 3 01:52 rhel7.4.repo [root@test ~]# chown user01 /etc/yum.repos.d/redhat.repo [root@test ~]# chown :group2 /etc/yum.repos.d/redhat.repo [root@test ~]# chown user02:group3 /etc/yum.repos.d/rhel7.4.repo [root@test ~]# ll /etc/yum.repos.d/ -rw-r--r--. 1 user01 group2 358 Nov 3 01:52 redhat.repo -rw-r--r--. 1 user02 group3 64 Nov 3 01:52 rhel7.4.repo
-rw-r--r--. 1 user02 group3 64 Nov 3 01:52 rhel7.4.repo a:all o:other u:user g:group [root@test ~]# chmod a+x script.sh [root@test ~]# chmod a-x script.sh [root@test ~]# chmod go= script.sh [root@test ~]# chmod 777 script.sh [root@test ~]# ll -rwxrwxrwx. 1 root root 0 Dec 13 00:34 script.sh
系统设备 #默认输出设备(标准输出) --->STDOUT 值为1 如:显示器 #默认输入设备(标准输入)--->STDIN 值为0 如,KB #标准错误输出:STDERR 描述符 值为2 如:显示器 ############################################## > #覆盖输出 >> #追加输出 2> # 覆盖重定向错误输出 2>> #追加重定向错误输出 < #输入重定向 << #在此处生成文档,"END,EOF表示文档结束标记" ###示例### [root@xiaofu ~]# cat << EOF > 1 > 2 > EOF 1 2 [root@xiaofu ~]# cat >> /tmp/a.txt << END #在脚本中生成文件 > hello,World, > Nice to meet you!!! > END [root@xiaofu ~]# cat /tmp/a.txt hello,World, Nice to meet you!!! ############################################ [root@xiaofu ~]# ls /varr > /tmp/a1.txt 2> /tmp/var.err [root@xiaofu ~]# cat /tmp/a1.txt [root@xiaofu ~]# cat /tmp/var.err ls: cannot access /varr: No such file or directory [root@xiaofu ~]# ls /var > /tmp/a1.txt 2> /tmp/var.err [root@xiaofu ~]# cat /tmp/a1.txt adm cache ... ############################################# [root@xiaofu ~]# ls /vdar &> /tmp/b.txt #不管错误/正确的信息均输出到目标文件中 [root@xiaofu ~]# cat /tmp/b.txt ls: cannot access /vdar: No such file or directory
set
# -C :禁止对已存在文件使用覆盖重定向
强制覆盖输出,使用">|"命令
+C :关闭上诉功能
管道命令"|" #管道:( 前一个命令输出,作为后一个命令的输入 | ...) #命令1输出 | 命令2的输入 | 命令3的输入... ###示例### echo "Hello,World" | tr 'a-z' 'A-Z' echo 'redhat' | passwd --stdin root [root@xiaofu ~]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/abc.txt #查看"/etc/passwd"倒数第9行并显示用户名和SHELL,并保持在"/tmp/abc.txt"文件中 systemd-network:/sbin/nologin [root@xiaofu ~]# cat /tmp/abc.txt systemd-network:/sbin/nologin [root@xiaofu ~]# cut -d: -f1 /etc/passwd | sort -n #让数值排序"/etc/passwd"的文件
时钟 #rtc 硬件时钟(clock/hwclock) #系统时钟 (date) hwclock -w (将系统时间同步到硬件时间) hwclock -s (将硬件时间同步到系统)
[root@xiaofu ~]# mkdir -p /tmp/test/{a/b,y} #花括号展开 [root@xiaofu ~]# tree /tmp/test/ /tmp/test/ ├── a │ └── b └── y ####################################################### [root@xiaofu test]# mkdir -p /tmp/test02/{a,d}_{b,c} [root@xiaofu test]# tree /tmp/test02/ /tmp/test02/ ├── a_b ├── a_c ├── d_b └── d_c
touch file 修改文件属性命令
# touch file
# stat file 查看文件属性信息
END