快捷键:
ctrl+l相当于命令cls
条件测试语句:
- 文件测试语句,逻辑测试语句,整数值比较语句,字符串比较语句,格式为[ 条件表达式 ],注意中括号两边都要有空格
- 文件测试所用的参数:
-d 测试文件是否为目录类型 -e 测试文件是否存在 -f 判断是否为一般文件 -r 测试当前用户是否有权限读取 -w 测试当前用户是否有权限写入 -x 测试当前用户是否有权限执行 -
[ -d /etc/fatab ]和echo $?,两条命令执行后,返回值为0,表示是目录存在,非0,就不是目录类型或者不存在
-
[ -e /dev/cdrom ] && echo "Exist",&&代表前面的结果为真后才会执行后面的命令,||则相反,前面为假才会执行后面
-
[ ! $USER = root ] || echo "administrator",这里面非不要写成!=root,
-
[ ! $USER = root ] && echo "user" || echo "root",这里面只有当&&执行失败时后才执行||后面的语句
-
以上的[ ]可以用test来代替,比如test -d /etc/fatab
-
-
整数比较运算符中,-eq等于 -ne不等于 -gt大于 -lt小于 -le小于等于 -ge大于等于
-
字符串比较中,=相同, !=不相同 , -z是否为空值,-n是否不为空
-
添加用户shell:
[root@linuxprobe ~]# vim addusers.sh #!/bin/bash read -p "Enter The Users Password : " PASSWD for UNAME in `cat users.txt` do id $UNAME &> /dev/null if [ $? -eq 0 ] then echo "$UNAME , Already exists" else useradd $UNAME echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null echo "$UNAME , Create success" fi done
case 语句:
case "$KEY" in [a-z]|[A-Z]) echo "您输入的是 字母。" ;; [0-9]) echo "您输入的是 数字。" ;; //相当于break *) //相当于default echo "您输入的是 空格、功能键或其他控制字符。" esac
定时任务:
- 第一种方式:at 09:25, 执行的命令, 按下Ctrl + d来结束定时任务,然后到点了就会执行,
- 第二种方式:echo "要执行的命令" | at 09:25,一样的效果
- 第三种方式:echo "要执行的命令" | at now+1 MINUTE,这里还可以是HOUR,DAY,MONTH
- at -l,查看已设置好但还未执行的一次性计划任务
- atrm 任务号,删除某个定时任务
crontab:
- crontab -e,创建、编辑计划任务
- crontab -l ,查看当前计划任务
- crontab -r ,删除某条计划任务
- crontab -u 编辑他人的计划任务
- “分、时、日、月、星期 命令”。这是使用crond服务设置任务的参数格式,需要注意的是,如果有些字段没有被设置,则需要使用星号(*)占位
-
星期 取值为0~7的任意整数,其中0与7均为星期日 命令 要执行的命令或程序脚本 - 需要说明的是,除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。还可以用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
- 尤其需要注意的是,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询。
- 计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。
usermod:
-
-c 填写用户账户的备注信息 -d -m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 -e 账户的到期时间,格式为YYYY-MM-DD -g 变更所属用户组 -G 变更扩展用户组 -L 锁定用户禁止其登录系统 -U 解锁用户,允许其登录系统 -s 变更默认终端 -u 修改用户的UID
Chattr:
- chattr命令用于设置文件的隐藏权限,英文全称为change attributes,如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”
- chattr +a test.txt,这个命令执行后,这个文件就不能被删除了
-
i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) S 文件内容在变更后立即同步到硬盘(sync) s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) A 不再修改这个文件或目录的最后访问时间(atime) b 不再修改文件或目录的存取时间 D 检查压缩文件中的错误 d 使用dump命令备份时忽略本文件/目录 c 默认将文件或目录进行压缩 u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 t 让文件系统支持尾部合并(tail-merging) x 可以直接访问压缩文件中的内容
ACL(文件访问控制列表)
- setfacl命令用于管理文件的ACL权限规则,英文全称为“set files ACL”,
- setfacl -Rm u:test:rwx /root,设置test这个用户的ACL(文件的访问控制列表)权限,本来这个用户是进不去/root这个目录,设置后就可以了
- setfacl -m g:test:rw /etc/fstab,设置acl的组权限
- getfacl -R home > backup.acl,给home文件备份ACL权限,需要注意,getfacl在备份目录权限时不能使用绝对路径的形式,因此我们需要先切换到最上层根目录,然后再进行操作。
- setfacl --restore backup.acl,恢复home文件的ACL权限
- dr-xrwx---+ 14 root root 4096 May 4 2020 /root,权限后面的那个+本来是.的,因为被设置了ACL权限,所以变成+了
-
-m 修改权限 -M 从文件中读取权限 -x 删除某个权限 -b 删除全部权限 -R 递归子目录
su命令和Sudo服务:
- sudo命令用于给普通用户提供额外的权限
- 使用sudo命令可以给普通用户提供额外的权限来完成原本只有root管理员才能完成的任务,可以限制用户执行指定的命令,记录用户执行过的每一条命令,集中管理用户与权限(/etc/sudoers),以及可以在验证密码后的一段时间无须让用户再次验证密码。
- visudo命令用于编辑、配置用户sudo的权限文件,这是一条会自动调用vi编辑器来配置/etc/sudoers权限文件的命令,能够解决多个用户同时修改权限而导致的冲突问题。
-
[root@linuxprobe ~]# visudo 99 ## Allow root to run any commands anywhere 100 root ALL=(ALL) ALL 101 boss ALL=(ALL) ALL
- 上面是给boss这个用户添加sudo权限,格式是 谁可以使用 允许使用的主机 = (以谁的身份) 可执行命令的列表
-
谁可以使用:稍后要为哪位用户进行命令授权。
允许使用的主机:可以填写ALL表示不限制来源的主机,亦可填写如192.168.10.0/24这样的网段限制来源地址,使得只有从允许网段登录时才能使用sudo命令。
以谁的身份:可以填写ALL表示系统最高权限,也可以是另外一位用户的名字。
可执行命令的列表:可以填写ALL表示不限制命令,亦可填写如/usr/bin/cat这样的文件名称来限制命令列表,多个命令文件之间用逗号(,)间隔。
-
然后su - boss,切换至boss这个用户,sudo -l 查看可执行的命令,然后你就会发现,.直接 ls /root,会权限不足,应该用sudo ls /root就可以了
-
但是,boss ALL=(ALL) ALL这样给的权限太大了,所以要改成boss ALL=(ALL) NOPASSWD:/usr/bin/cat等等其中多加的NOPASSWD是为了不用每次使用sudo命令都要输一次用户密码了
linux执行命令步骤:
- 是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对路径则直接执行,否则进入第2步继续判断
- Linux系统检查用户输入的命令是否为“别名命令”,比如rm命令
- Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令:
- 系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,ATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。
Vim:
- 三种模式:命令模式,输入模式,未行模式
- 命令模式:
- ----u,撤销上一步的操作,ctrl+r反撤销
- ----x, 4x代表删除光标后的4个字符,4X代表删除光标前的4个字符
- ----dd,删除(剪切)光标所在整行,4dd就是删除(剪切)4行,输入p,就会粘贴到光标的下面几行
- -----yy,复制光标所在整行,4yy也同理
- -----p,将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
- ----shift+zz,保存并退出
- ----gg,光标移到文件开始,4G
- ----/ 输入这个后相当于查找,比如/love,查找love,按n继续向上查找love,N则是向下
- 末行模式:
- -----冒号切换至这个模式
- ----- :w 保存, :q 退出, :q! 强制退出, :wq! 强制保存并退出 :w filename另存为
- :wq && :x 这两个都是保存并退出
- 输入模式:
- ------a,i,o三个键,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光标的下面再创建一个空行
- vim test.txt,前文件存在时,这个命令是打开文件,不存在时,这个命令是创建一个临时的输入文件
- vim +4 c.txt 就是将光标放在第四行位置
YUM&&DNF仓库:
- /etc/yum.repos.d/目录中(因为该目录存放着软件仓库的配置文件)
- 使用Vim编辑器创建一个名为rhel8.repo的新配置文件(文件名称可随意,但后缀必须为.repo)
- 按配置参数中所填写的仓库位置挂载光盘,并把光盘挂载信息写入/etc/fstab文件中。
- 使用“dnf install httpd -y”命令检查软件仓库是否已经可用。
简单的shell脚本:
- vim example.sh,内容#! /bin/bash,# for example,pwd,ls -al
- 第一种执行方法:bash example.sh
- 第二种执行方法:如果直接./example.sh来执行的话,会报权限不够,此时执行 chmod u+x example.sh,然后在执行./example.sh,一样的效果
- ./example.sh one two three four,这个命令中,one是第一个参数,表示$1,$0对应的是当前Shell脚本程序的名称,也就是xx.sh,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$@和$*一样,$?对应的是显示上一次命令的执行返回值,而$1、$2、$3……则分别对应着第N个位置的参数值,如果超过$9,要加{},比如${10}
shell脚本范例:
- #!/bin/bash
- DIR="/sys/test"
- if [ ! -d $DIR ]
- then
- mkdir -p $DIR
- fi
cat:全称concatenate
- 全称concatenate,用于查看内容较·2少的纯文本文件
- cat filename 查看某个文件内容,加上-n就是结果会显示出行号
- cat ./xxx 查看某个文件内容,加上-n就是结果会显示出行号
- cat > filename 只能创建新文件,不能编辑已有文件.
其他:
- echo xxx 输出字符串,后面加上>filename,就是添加内容至文件 中
- echo $SHELL 输出变量的值,$xx表示某变量的值
- date "+%Y%m%d%H:%M"%S
- date -s "20201101 8:30:00"将当前系统的时间设置为这个
- date "+%j"显示当前是一年中的第几天
- timedatectl这个是版本7后面有的
- poweroff关闭系统
- wget xx.com下载文件,全称web get,-r 递归下载,- p 下载页面内所有资源
- ps 全称processes,查看进程状态,-a -u -x
- top 查看动态进程
- pidof xx查看某个进程的PID码
- kill 进程PID,有时无法杀掉进程,就用kill -9 xxPID,就是用最高级别强制杀死
- killall 服务名,杀掉这个服务的所有进程,
- 如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加一个&符号,这样命令将进入系统后台来执行。
- history 查看本机所有的使用过的linux命令,加上-c参数就是清空,在其后面用 ! 3命令执行第三条命令
- ifconfig查看当前网络配置信息
- who 查看当前登陆的主机信息
- last 查看主最机近被访问记录
- ls -a查看所有文件包括隐藏文件,-l查看文件属性信息,-ld 查看目录属性信息
- tree 以树形来查看当前目录的分层信息, tree -L 2代表只显示2层目录
- find /xx -name filename或者-perm xx权限,其中-xx权限代表包含,没有-代表全部
- locate xx 查看包含xx名字的文件位置,第一次用这个命令时要先执行updatedb
- whereis xxx 查看xxx命令或者源代码的位置,which xxx是查看xxx命令的位置
- more xxx查看内容较多的纯文本文件,
- head -n 10 xxx查看xxx文件的前10行内容
- tail -n 10 xxx查看xxx文件的后10行内容,tail -f /xx/xxx 查看这个文件的最新内容,也就相当于它会自动刷新文件内容,比如查看实时日志信息
- cat anaconda-ks.cfg | tr [a-z] [A-Z] 用tr命令把内容中的 [a-z]替换成 [A-Z] ,也就是全部换成大写,tr的全称为transform
- wc -l /xx/xxx 查看文件内容的行数,全称为word counts,-w是查看单词数,-c查看字节数
- stat xxx查看文件的存储信息,包括修改时间
- grep /sbin/nologin /etc/passwd -n 筛选出/sbin/nologin这个 字符串,加上-v就是反向筛选,-n是显示行号,如果不记得在那个文件夹,可以用*,-R是递归查找
- cut -d : -f 1 /etc/passwd,查看文件的第一列,-d 设置间隔符号,-f设置查看第几列
- diff 文件A 文件B,加上--brief是判断两文件是否相同,-c是查看内容具体的的不同之处
- uniq uniq.txt去掉文件内容中相邻的重复部分,非相邻的不管
- sort -u sort.txt ,先内容排序,-u去重,与uniq命令不同,sort命令是无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用-u参数进行去重操作
- sort -n number.txt 按照数字大小排序
- sort -t : -k 3 -n user.txt,用:取出每一列,然后取第三列字段,内容中第三列是数字,然后在按数字大小排序
- touch -d "2020-05-04 15:44" anaconda-ks.cfg,如果仅仅是touch 文件名,就是单纯创建个文件,如果加上-d,就是设置文件的修改时间和访问时间,-a是设置访问时间,-m 是设置修改时间,这样做是让别人不知道你修改了文件
- touch filename 如果这个文件已经存在,那么只是更新文件的时间搓,并不会改变文件内容
- mkdir -p a/b/c/d创建递归文件目录
- cp -r 源文件 目标文件,递归复制源文件,也可以cp dir1 dir2 -a, cp c.txt c2.txt
- mv x.log linux.log 这个是剪切操作,由于是在同一目录下,所以就变成同命名操作
- rm -f linux.log 强制删除,不加-f的话删除时会询问你,-i代表询问你,如果是目录就必须加-r,否则删除不了,其实rm只是一个别名命令,其本名是rm -i,所以我们直接rm命令,它会询问你
- dd if=/dev/zero of=560_file count=1 bs=560M,从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件,这个命令和cp区别是一个是对块操作,一个是对文件操作,有人说cp就是不带option的dd
- dd if=/dev/cdrom of=RHEL-server-8.0-x86_64-LinuxProbe.Com.iso,把光驱设备中的光盘制作成iso格式的镜像文件
- file xxx.cfg 查看文件类型
- tar czvf etc.tar.gz /etc和tar xzvf etc.tar.gz -C /root/etc,c代表压缩,x代表解压,z代表用tar.gz来压缩或者解压,v代表显示解压缩的过程,f代表目标文件名,-C代表指定解压到的目录,tar后面可以跟几个文件,也就是把几个文件一起压缩到一个文件中
- tar jcvf etc.jar.bz2 file1 file2这个是压缩成bz2格式,jxvf则是解压
- man bash > xx.txt,将结果覆盖输出到txt文件中,>>是追加输出到文件中,2>是将报错信息输出,&>则是正常内容或者报错信息都输出
- wc -l < readme.txt,把readme.txt文件导入给wc -l命令,统计一下文件中的内容行数
- passwd 什么都不加,就是修改当前用户的密码,echo "asdf" | passwd --stdin root,表示root的密码修改为asdf,-l锁定用户,-u解除锁定,-d用户可以用空密码登陆,-e强制用户下次登陆时修改密码,-S显示用户的密码是否锁定以及加密方式
- touch {AA,BB,CC}.conf 用通配符创建多个文件,注意中间那个用大括号,echo file{1,2,3,4,5},这个也一样
- $$作用是显示当前程序的进程ID号码
- echo `uname -a` 这个是先执行反引号里的命令,然后其执行的结果在输出
- alias 别名=命令,这个是给命令取个别名,用的时候直接用别名,比如rm就是一个别名命令,其本名是rm -i,也就是alias rm=rm -i,而unalias则是取消别名,比如 unalias rm,这时在去执行rm命令,就是直接删除,而不会询问了,因为它已经回到它的本名rm
- export VARIAL 将VARIAL这个变量升级为全局变量,若不在使用VARIAL这个变量,可以用unset VARIAL来取消这个变量
- hostname 查看当前主机名
- /etc/sysconfig/network-scripts中,使用Vim编辑器修改网卡文件ifcfg-ens160
- echo $?,这个是返回上一条命令的返回值
- free -m | grep Mem: | awk '{print $4}',第一个命令是系统的剩余内存,最后一个是筛选第4个字断并打印
- /dev/null是个空洞文件,写进去的东西会永遠丟失,所以ping -c 4 172.31.13.49 &> /dev/null,echo $?这两条命令执行完后会输出0,因为这个文件经常用来判断某个命令是否执行成功,成功就会输出0
- if [条件] then else fi 这个if else语句格式
- read -p "Enter your score(0-100):" GRADE,read是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量,-p参数用于向用户显示一些提示信息。这里的read在用户输入时是不能删格的,想要可以删格,加上stty erase ‘^H’ read -p就行了
- for 变量名 in 取值列表 do 事情 done,取值列表分别取值,然后重复do事情
- id 用户名 &> /dev/null,如果用户名存在会输出0,
- useradd 用户名,-d指定家目录,-e到期时间,-u指定UID,-g指定基本用户组(必须存在),-G指定一个或多个扩展用户组,-n指定一个或多个扩展用户组,-s指定该用户的默认Shell解释器
- groupadd 组名,创建新的用户组
- `xx命令`,这个反引号里面放的的命令,而$(XX命令)跟它的效果类似,比如,HLIST=$(cat ~/ipaddrs.txt),这里HLIST就有点类似集合了
- PRICE=$(expr $RANDOM % 1000),这个expr命令是用来求值的
- while true,exit可以退出循环
- let TIME++,这个是让变量TIME++
- 普通用户的UID是从1000开始的
- 一旦用户的解释器被设置为nologin,则代表该用户不能登录到系统中,/sbin/nologin
- 用户的信息保存在/etc/passw中,而用户的密码保存在/etc/shadow中
- 用户的信息保存在/etc/passwd文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用usermod命令修改已经创建的用户信息
- 千万不要将SUID权限设置到vim、cat、rm等命令上面!即便是普通用户使用 vim 命令,都会暂时获得 root 的身份和权限,例如,很多原本普通用户不能查看和修改的文件,竟然可以查看了,以 /etc/passwd 和 /etc/shadow 文件为例,普通用户也可以将自己的 UID 手动修改为 0,这意味着,此用户升级成为了超级用户。除此之外,普通用户还可以修改例如 /etc/inittab 和 /etc/fstab 这样重要的系统文件,可以轻易地使系统瘫痪。
- SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效)
- chmod和chown命令是用于修改文件属性和权限的最常用命令,它们还有一个特别的共性,就是针对目录进行操作时需要加上大写参数-R来表示递归操作,即对目录内所有的文件进行整体操作。
- chown命令用于设置文件的所有者和所有组,英文全称为change own,语法格式为“chown所有者:所有组 文件名”。
- chown linuxprobe:linuxprobe anaconda-ks.cfg
- lsattr命令用于查看文件的隐藏权限,英文全称为“list attributes”,在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls之类的命令则看不出端倪:
- 先用lsattr test.txt来查看期隐藏权限,会出如---a---等结果,然后用chattr -a test.txt来取消其权限
- 就第一个扇区来讲,主引导记录需要占用446字节,分区表占用64字节,结束符占用2字节;其中分区表中每记录一个分区信息就需要16字节,这样一来最多只有4个分区信息可以写到第一个扇区中,这4个分区就是4个主分区。
- sudo --help 查看帮助,有些命令没有help,比如pwd
- man 章节 查找的信息,章节1是命令的帮助,章节2是系统的调用(操作系统提供的函数),章节3是C库函数的帮助信息,比如man 3 printf查看printf帮助信息, man 1 ls查看ls的帮助
- tab键,不仅可以补全命令,也可以补全文件名
- | 是管道符,前面的输出结果作为后面的输入
- apt-get install在线安装,sudo临时获取权限,sudo apt-get install tree在线安装tree这个命令
- cd -返回到刚才的路径
- ls -l > c.t.xt把结果输出到这个文件里
- 以上是Makefile的文件内容,先用make命令(如果文件名不是Makefile,那么就要make -f filename),然后执行./hello就行,执行make clean会执行clean下面的命令
- ‘
- 以上是Makefile中自定义变量的使用,比如gcc定义成cc变量,是因为不同平台编译的不同,为了在别的平台编译时方便更改,所以跨平台编译时直接更改cc变量
- 上面三个.c编译成.o文件动作重复,可以一步到位,%*.o:%*.c $(cc) $(CFLAGS) -c $< -o $@
- -Wall 选项可以打印出编译时所有的错误或者警告信息。-g选项是指可以用gdb调试。
- Makefile中可以用#注释
- gcc hello.c -o hello 执行./hello就行
- netstat -anp|grep 22查看22端口的状态
- gedit命令,编辑文本,文本可以是不存在的