Linux Stu

时间:2021-11-23 09:53:26

指定命令别名

alias ..='cd ..'

命令连接符

持续的执行命令,不管错误
[命令1]; [命令2]; [命令3];
前一个正确才执行下一个
[命令1] && [命令2] && [命令3];
前一个错误,就执行下一个
[命令1] || [命令2] || [命令3];

限制用户进程数

vim /etc/security/limits.conf
     *       hard    nproc   200

给予用户sudo权限

vim /etc/sudoers

...

## Allow root to run any commands anywhere 
## 允许root用户以root权限运行任何命令
root    ALL=(ALL)       ALL
...
## Allows people in group wheel to run all commands
## 让wheel用户组的所有用户默认拥有sudo权限
# %wheel        ALL=(ALL)       ALL
## Same thing without a password
## 让wheel用户组的所有用户,不用输入密码即可拥有sudo权限
# %wheel        ALL=(ALL)       NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 给予用户指定的权限,命令需要写完整的路径
## 禁止某些命令:%users  ALL=!/user/sbin/useradd
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
...

切换用户同时进入用户家目录

su zach -

我是谁?

who     谁在线
w     详细在线信息
whoami     当前的有效用户
who am i     当前的实际用户

目录与文件高亮

alias ls='ls --color=auto'
/etc/bashrc     # 添加后所有用户有效
/home/<user>/.bashrc     # 仅对当前用户有效

文件权限

s表示SUID(Set UID)/SGID
SUID (4755)
ls -l /bin/su
-rwsr-xr-x.
su这个命令,无论任何人执行都将具有root权限,这个权限仅在su命令中有效
chmod u+x file

SGID (2770)
chmod 2770 shop
drwxrws---
在shop目录里创建的文件所属组都是shop,组成员可以互相修改对方创建的文件

t权限的名称是Sticky Bit(SBIT),仅对目录有效
SBIT (1777)
ls -ld /tmp
drwxrwxrwt.
任何人都可以在里面创建目录,只能控制自己的文件,其它可以查看,不能修改

搜索文件

搜索“ls”命令以及它的联机帮助文档所在的位置

whereis ls

yum install -y locate
updatedb
locate -b "\ls"
查找命令,确认是否安装
which gcc
列出一天内变化的文件的详细信息
find / -mtime -1 -exec ls -l {} \;
“{}”起始是一个站位符,在find命令的执行过程中会不断地被替换成当前找到的文件。
“;”是结束标记

文件压缩打包

tar
压缩率 gz<bz2<xz
tar -xvf filename.tar
z代表gz
j代表bz2
J代表xz
tar -zcvf filename.tar.gz FILES
tar -zxvf filename.tar.gz
tar -jcvf filename.tar.bz2 FILES
tar -jxvf filename.tar.bz2
tar -Jcvf filename.tar.xz FILES
tar -Jxvf filename.tar.xz
cpio
find ... | cpio -ocB > filename
cpio -idc < filename
mkfifo可以创建命名管道
find /boot | cpio -ocB > /tmp/boot.img
find /boot | cpio -ocB | gzip -9 > /tmp/boot.img
cpio -idc < /tmp/boot.img     //未压缩
gzip -dc /tmp/boot.img | cpio -idc     // 压缩过

文件前后台

tail -f /etc/profile
Ctrl+Z
bg
tail -f /etc/bashrc &
jobs
fg 1
kill -9 %2
jobs
任务脱离终端
nohup [命令与参数] &

计划任务

at 10:00 tomorrow
at>/bin/echo 123;
Ctrl+D
at -l
crontab -e
crontab -l
crontab -r
crontab -u root

2.4.3 守护进程的启用

vim /etc/xinetd.d/rsync
disable=yes 代表该守护进程处于关闭状态
disable=no 代表该守护进程处于开启状态
/etc/init.d/xinetd restart重启super daemon

2.4.4 全面了解程序信息

ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  6210  6209  0  80   0 -  1698 wait   pts/0    00:00:01 bash
0 R  1000  6258  6210  0  80   0 -  1173 -      pts/0    00:00:00 ps
字段 说明
F 程序标志,代表程序的执行权限,常见的取值有:0,普通权限;4,root 权限;1,此程序仅执行了fork二没有执行exec
S 程序状态:R,运行中;S,睡眠状态,可唤醒;D,不可被唤醒状态,一般是在等待I/O;T,停止状态,比如被调试的时候;Z,僵尸状态,程序已经终止但却无法被移除至内存外
UID 此进程拥有者的UID
PID 此进程的进程ID
PPID 此进程的父进程ID
C CPU的使用率,单位为百分比
PRI 运行优先级
NI 运行优先级调整值
ADDR 指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示 “-”
SZ 此程序用掉的内存
WCHAN 表示目前程序是否运行中,若为 “-” 表示正在运行中
TTY 登陆者的终端机位置,若为远程登陆则使用动态终端界面
TIME 使用掉的CPU时间,注意,是此程序实际话费CPU运行的时间,而不是系统时间
CMD 就是 command 的缩写,也就是程序名称
ps aux
USER     PID %CPU %MEM    VSZ   RSS TTY   STAT START   TIME COMMAND
root       1  0.0  0.2  19232  1480 ?     Ss   18:54   0:00 /sbin/init
root       2  0.0  0.0      0     0 ?     S    18:54   0:00 [kthreadd]
root       3  0.0  0.0      0     0 ?     S    18:54   0:00 [migration/0]
root       4  0.0  0.0      0     0 ?     S    18:54   0:02 [ksoftirqd/0]
root       5  0.0  0.0      0     0 ?     S    18:54   0:00 [stopper/0]
......
postfix 1375  0.0  0.6  80936  3352 ?     S    22:15   0:00 pickup -l -t fifo -u
root    1376  0.0  0.2 110232  1148 pts/0 R+   22:20   0:00 ps aux
字段 说明
USER 该进程所属的使用者用户
PID 该进程的进程 ID
%CPU 该进程所占 CPU 资源的百分比
%MEM 该进程所占实体内存的百分比
VSZ 该进程用掉的虚拟内存量 (kbytes)
RSS 该进程用掉的固定的内存量 (kbytes)
TTY 该进程所运行的终端机,若与终端机无关则显示 “?”。另外,tty1-tty6 是本机上面的登陆者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序
STAT 该进程的当前状态,与 “ps-l” 的 S 字段相同 (R/S/T/Z)
START 该进程启动时间
TIME 该进程使用 CPU 运行的时间
COMMAND 该程序的实际命令
top
top - 当前时间 up 系统连续运行时间,已登录系统的用户数(1 user),系统在1、5、15分钟的平均工作负载(load average)
top - 22:39:44 up 2 days, 23:01,  1 user,  load average: 0.00, 0.01, 0.05
进程的总数、正在运行数、睡眠数、停止数和僵尸数
Tasks:  60 total,   1 running,  59 sleeping,   0 stopped,   0 zombie
用户空间占用CPU的百分比(%us)、内核空间占用CPU的百分比(%sy)、改变过优先级的进程占用CPU的百分比(%ni)、空闲CPU百分比(%id)、I/O等待专用CPU的百分比(%wa)、硬中断占用CPU的百分比(%hi)、软中断占用CPU的百分比(%si)、被强制等待虚拟CPU的时间(%st,在虚拟系统中有效)
%Cpu(s):  0.3 us,  0.7 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
物理内存总数、已用数、空闲数、缓冲数
KiB Mem:    445740 total,   340756 used,   104984 free,    29148 buffers
交换分区总数、已用数、空闲数、缓存数
KiB Swap:   102396 total,        0 used,   102396 free,   277472 cached
VIRT虚拟内存用量(只是需要的,不是实际使用量)、RES常驻内存量(实际使用量,包含共享部分)、SHR共享内存。第一个进程所占用的真是物理内存:RES-SHR
  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                          
 6270 pi        20   0  5224 2460 2124 R   1.0  0.6   0:00.12 top                                              
    1 root      20   0  2152 1400 1296 S   0.0  0.3   0:10.18 init                                              
    2 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kthreadd                                          
    3 root      20   0     0    0    0 S   0.0  0.0   0:01.55 ksoftirqd/0                                      
    5 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kworker/0:0H                                      
    7 root      20   0     0    0    0 S   0.0  0.0   0:01.98 rcu_preempt                                      
    8 root      20   0     0    0    0 S   0.0  0.0   0:00.00 rcu_sched                                        
    9 root      20   0     0    0    0 S   0.0  0.0   0:00.00 rcu_bh                                            
   10 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 khelper                                          
   11 root      20   0     0    0    0 S   0.0  0.0   0:00.01 kdevtmpfs                                        
   12 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 netns                                            
......
CPU占比
超过100%的情况属于正常,16核心时,最大占用1600%
工作负载(load average)
0.00,表示目前桥面上没有任何的车流。
1.00,表示刚好在这座桥的承受范围内。
超过1.00,说明这座桥已经超出符合,交通严重的拥堵。2.00的情况说明车流已经超出桥所能承受的一倍,3.00的话说明桥上还有超出桥符合两倍多的车辆正在等待
16核心,负载可以达到16.00
top -d 2 -p 10
表示2秒刷新一次,值监控PID为10的进程
P键,让单个进程信息按照CPU使用率排序;
M键,以内存的使用率排序;
N键,以进程的PID排序..
pstree

2.5.2 利用软件管理工具rpm和dpkg

  RPM DPKG
安装 rpm -ivh <rpm软件包名> dpkg -i <deb软件包名>
查询 rpm -qa xxx*
rpm -ql <rpm包名>
dpkg -l xxx*
dpkg --listfiles xxx
卸载 rpm -e <rpm软件名> dpkg -e <deb软件名>

2.5.3 更酷的线上升级

  yum apt-get
安装 yum install <package_name> apt-get install <package_name>
升级 yum update <package_name> 刷新软件源,建立更新软件包列表
apt-get update
将系统中的所有软件包一次性升级到最新版本
apt-get upgrade
卸载 yum remove <package_name> apt-get remove <package_name>
清除软件包的同时清除配置
apt-get purge remove <package_name>
查询 1.查找软件包:
  yum search <keyword>
2.列出所有已安装的软件包:
  yum list installed
3.获取软件包信息:
  yum info <package_name>
4.列出软件包提供哪些文件:
  yum provides <package_name>
1.查找软件包:
  apt-cache search <keyword> or <regular expression>
2.获取指定软件包的详细信息:
  apt-cache show <package_name>
3.获取软件包版本和软件包的依赖关系:
  apt-cache showpkg <package_name>
清除缓存 下载的软件包和header储存在cache中不会自动删除。使用 yum clean 完成清除磁盘空间的工作
1.清除 header:
  yum clean headers
2.清除下载的 rpm 包:
  yum clean packages
3.清除缓存的软件包及旧 headers:
  yum clean all
1.清理整个软件包缓冲区:
  apt-get clean
2.按照依赖关系清理缓冲区中多余的软件包:
  apt-get autoclean
apt的执行效率高于使用Python携程的yum,Python升级注意yum

2.6.1

Linux Stu

2.6.2 磁盘的基本操作

dd
语法:
dd if=input_file of=out_file

dd if=/etc/bashrc of=./bashrc

等同于
cp /etc/bashrc ./bashrc
dd if=/etc/bashrc
等同于
cat /etc/bashrc
制作分区镜像:
dd if=/dev/sda1 of=./sda1.img
dd if=/dev/sda1 | gzip -9 > ./sda1.img
恢复镜像
gzip -dc ./sda.img | dd of=/dev/sda
bs指定依次读写的字节数
count指定读写次数
备份磁盘主引导记录
dd if=/dev/sda of=./mbr.img bs=512 count=1
销毁磁盘数据,urandom代表随机数,每次读入的数据都不会相同
dd if=/dev/urandom of=/dev/sda1
测试磁盘读写速度,zero代表0,每次读入数据都是0;null主要面对写,相当于黑洞。
dd if=/dev/zero of=./test.file bs=1024 count=1000000
dd if=./test.file bs=8k | dd of=/dev/null
修复磁盘
dd if=/dev/sda of=/dev/sda
fsck
语法:
fsck -t 文件系统 设备名
系统启动阶段执行,只能对文件系统的损坏进行修复,对磁盘的损坏是没有办法的。

fsck -f -t ext3 /dev/hda3

参数“-f”要求磁盘没有报错时也进行强制检查(非法关机时磁盘报错)。
mount
mount [-t 文件系统] 设备名称 挂接点
很多时候“-t”是多余的,Linux会从ExtN类的即inode文件系统的超级块中读取类型,大部分用于windows分区时。(NFS系统等)
直接挂载未压缩的镜像
mount -o loop ./sda1.img /mnt/sda1
挂载光盘
mount -o loop ./CentOS-6.6_x86_64-bin-DVD1.iso /mnt/centos
ro说明挂接的磁盘是只读的
rw说明挂接的磁盘是可读写的
loop说明要挂接的文件是一个虚拟设备,而且这个虚拟设备是环形的设备
umount /dev/sdb1
分区fdisk、cfdisk
格式化mkfs.ext3、mkfs

2.6.3 /etc/fstab文件——决定分区的连接

#
# /etc/fstab
# Created by anaconda on Sun Jan 18 20:48:12 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=69f95742-a279-4e43-b4c6-926cd5247f96 /boot      ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
  • 设备文件、磁盘卷标或者UUID
  • 挂载点
  • 文件系统类型
  • mount命令的-o选项参数,defaults不给定-o选项时的行为
  • 是否使用dump命令备份,0代表不做,1代表每天备份
  • 是否使用fsck命令检查磁盘;0代表不检查,1代表最早检查(一般只有树根“/”是1),2也是要检查,只是比1晚(除树根之外一般都使用这个)
blkid查看UUID***
swap
fdisk创建,
mkswap格式化
swapon开启
swapoff关闭
创建1G的交互文件
dd if=/dev/zero of=/tmp/swap bs=1M count=1024
mkswap /tmp/swap

2.8.1 勤勤恳恳的bash

别名功能(alias):为一个命令简历另一个名称。
历史命令(history):用history工具程序记录了最近你执行过的命令。
工作控制(job contorl):
ps    --列出正在运行的进程
kill  --向一个或多个进程发信号(经常是杀掉进程)
jobs  --列出自己运行的进程
bg    --将进程放到后台
fg    --将进程放到前台
kill -l 查看信号
 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

2.8.2 环境变量

set、env和export设置环境变量,
unset命令来清除设置,
readonly来设置只读属性。
export ENVTEST="ENV1"
env | grep ENVTEST
unset ENVTEST
env | grep ENVTEST

2.8.3 bash 的配置文件

/etc/profile     系统整体的配置文件。
/etc/inputrc     用来设置bash的热键、[Tab] 是否有声音等信息。
/etc/profile.d/*.sh     这个目录下的文件规定了bash的操作界面、语系以及一些公共的命令别名。
/etc/sysconfig/il8n     这个文件是供/etc/profile.d/lang.sh调用,决定bash默认使用何种语系。
个人配置读取:
~/.bash_profile、 ~/.bash_login 和 ~/.profile
如果~/.bashrc文件存在,~/.bash_profile会去读取环境设置等
~/.bash_history     记录历史命令
~/.bash_logout     当用户离开时调用
如果/etc/bashrc存在,会被~/.bashrc调用
主要工作:
(1)依据不同的UID给出umask值
(2)依据不同的UID给出ps1变量
(3)调用/etc/profile.d/*.sh的设置
Linux Stu
Linux Stu
source命令可以将配置文件的内容读入当前shell环境中

2.9.4 排序和去重

统计最常用的十条历史命令及其使用次数:

cut -d ' ' -f1 ~/.bash_history | sort -d | uniq -c | sort -nr | head

详解:
cut -d ' ' -f1 ~/.bash_history
从~/.bash_history文件中以空格为分隔符(-d ' ')剪出多列,则为-f1,3等)
sort -d
按字典序(-d)排序剪出来的第一列
uniq -c
对文本去重,并统计次数(-c)。
sort -nr
按数字排序(-n)并降序(-r)排列,没有-r默认是升序排列。
head
输出显示文件前面部分的内容,默认显示前面10行的内容