linux初学(他人勿看,没营养的)

快捷键:


  • 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执行命令步骤:

  1. 是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对路径则直接执行,否则进入第2步继续判断
  2. Linux系统检查用户输入的命令是否为“别名命令”,比如rm命令
  3. Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令:
  4. 系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作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命令,编辑文本,文本可以是不存在的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值