shell
shell的启动和使用
shell在启动的时候,先读取/etc/bash.bashrc
文件对整个Linux操作系统进行配置,然后读取$HOME/.bashrc
文件对当前用户进行配置,如果这两个文件有冲突,则以后者为准。
pengjidong@pengjidong:/etc$ cat -n bash.bashrc
1 # System-wide .bashrc file for interactive bash(1) shells.
2
3 # To enable the settings / commands in this file for login shells as well,
4 # this file has to be sourced in /etc/profile.
5
6 # If not running interactively, don't do anything
7 [ -z "$PS1" ] && return
8
9 # check the window size after each command and, if necessary,
10 # update the values of LINES and COLUMNS.
11 shopt -s checkwinsize
12
13 # set variable identifying the chroot you work in (used in the prompt below)
14 if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
15 debian_chroot=$(cat /etc/debian_chroot)
16 fi
17
18 # set a fancy prompt (non-color, overwrite the one in /etc/profile)
19 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
shell的通配符
-
*
代表任意长度的字符串 -
?
代表任意单个字符 -
[]
制定了模式串匹配的字符范围 -
-
中间连字符,[a-d]
与[abcd]
作用相同
Shell中的特殊符号
单引号,由单引号括起来的字符当普通字符处理
$
,表示引用变量的值-
双引号,其作用与单引号类似,但是没有单引号那么严格,双引号中的
``
、$
和\
会被解释为特殊的意思,而单引号引用则当做普通字符串pengjidong@pengjidong:~$ x=* pengjidong@pengjidong:~$ echo '$x' $x pengjidong@pengjidong:~$ echo "$x" *
-
反引号,反引号括起来的字符串被解释为命令行,在执行时,shell先执行该命令行,并以它的标准输出结果取代整个反引号。
pengjidong@pengjidong:~$ echo "current directory is: `pwd`" current directory is: /home/pengjidong
#
,意为注释。
目录操作命令
mkdir
创建目录
mkdir [选项] 目录
常用选项如下:
-m
,在建立目录的时候用来设置目录的权限,其中分为3组权限:目录所有者的权限、组中其他人的权限、系统中其他人对目录的权限。这三个权限分别用三个数组之和来表示:对目录的读权限为4、写权限是2、执行权限是1.
# 所有者拥有完全权限、组中其他人拥有读和执行的权限、系统中其他人只有执行的权限
pengjidong@pengjidong:~$ mkdir -m 751 test
pengjidong@pengjidong:~$ ls -l
drwxr-x--x 0 pengjidong pengjidong 4096 Aug 22 20:02 test
r-100
/w-010
/x-001
/d-directory
rmdir
删除目录
rmdir [选项] 目录
常用替代命令rm
:
-rf
,递归的删除目录,常用于目录非空的情况下。
pengjidong@pengjidong:~$ rmdir test/
rmdir: failed to remove 'test/': Directory not empty
pengjidong@pengjidong:~$ rm -rf test/
pwd
显示当前目录
pengjidong@pengjidong:~$ pwd
/home/pengjidong
cd
改变当前目录
/
表示根目录
.
表示当前目录
..
表示上一级目录
文件操作命令
ls
列举文件命令
ls [选项] [文件目录列表]
常用选项如下:
-
-a
列出目录下所有文件,包括以.
开头的隐含文件pengjidong@pengjidong:~$ ls chapter2 hello.c pengjidong@pengjidong:~$ ls -a . .bash_history .bashrc hello.c .python_history .sudo_as_admin_successful .. .bash_logout chapter2 .profile .ssh .viminfo
-b
把文件名中不可输出的字符用反斜线加字符编号的形式列出(如C中一样)-
-i
输出文件i节点的索引信息pengjidong@pengjidong:~$ ls -i 1970324837030724 chapter2 3940649674039942 hello.c
-k
以k字节的形式表示文件大小-l
一行只输出一个文件
find
查找文件命令
find [目录列表] [匹配标准]
pengjidong@pengjidong:~$ find hell*
hello.c
常用选项
-
-mount
不在系统目录中查找
cat
显示文件内容
cat [选项] 文件列表
常用选项
-
-n
在文件的没行前,加上行号
pengjidong@pengjidong:~$ cat -n hello.c
1 #include
2
3 int main()
4 {
5 printf("hello world.\n");
6 return 0;
7 }
8
使用cat
拼接文件
pengjidong@pengjidong:~$ cat hello.c test.txt > t.md
pengjidong@pengjidong:~$ cat t.md
#include
int main()
{
printf("hello world.\n");
return 0;
}
this is a temporary file. 时间。
cp
复制文件
cp [选项] 源文件或目录 目标文件或目录
常用选项如下:
-
-a
它保留链接、文件属性,并递归地复制目录,其作用等与-dpR
的组合。 -
-d
复制时保留链接 -
-f
删除已经存在的目标文件而不提示 -
-i
与-f
相反,它强制提示 -
-p
还把修改时间与访问权限也复制进去 -
-r
递归地复制子目录 -
-l
不进行复制,只进行链接
mv
移动和重命名文件
mv [选项] 源文件名 目标文件名
mv [选项] 源目录名 目标目录名2
mv [选项] 文件列表 目录
常用选项如下:
-
-b
当遇到要覆盖其他文件或者目录的时候,将自动备份,备份文件名为-S
,如果没有指定-S
,则默认在文件名前加上~
-
-i
覆盖前给出提示 -
-f
覆盖前不给提示 -
-u
当要覆盖的文件或目录比源文件要新,则不覆盖目标文件 -S <字符串>
wc
文件内容统计
wc [选项] 文件列表
常用选项
-
-c
统计字节数 -
-l
统计行数 -
-w
统计字数
rm
删除文件
rm [选项] 文件
常用选项
-
-f
强制删除 -
-i
给出提示的删除
系统管理命令
ps
和kill
进程管理命令
ps
命令用于显示当前系统中由该用户运行的进程列表,而kill
命令用于输出特定的信号给指定进程号(PID)的进程,并根据该信号完成指定的行为,其中可能的信号有进程挂起、进程等待、进程终止等。
ps: ps [选项]
kill: kill [选项] PID
ps
命令选项
-
-ef
查看所有进程及其PID、系统时间、命令的详细目录、执行者等 -
aux
除了可以显示-ef
的内容外,还可以显示CPU及内存占有率、进程状态等 -
-w
以加宽的方式显示,这样可以显示较多的信息
pengjidong@pengjidong:/etc$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:42 ? 00:00:00 /init
pengjid+ 2 1 0 14:42 tty1 00:00:00 -bash
pengjid+ 27 2 0 14:56 tty1 00:00:00 ps -ef
pengjidong@pengjidong:/etc$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 10432 584 ? Ss 14:42 0:00 /init
pengjid+ 2 0.0 0.0 25784 3708 tty1 Ss 14:42 0:00 -bash
pengjid+ 28 3.0 0.0 41448 1852 tty1 R 14:56 0:00 ps -aux
kill
中的信号
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
所以,如果我们使用某个确定的信号来杀死进程的时候,这个时候我们使用kill -s 9 PID
此外在还有一个存放内存中的特殊目录/proc
,他并不在我们的磁盘上,而是在我们的内存上,当前系统运行的所有进程都动态的存放在这个目录中。
# 查看CPU的基本信息
pengjidong@pengjidong:/etc$ cd /proc/
pengjidong@pengjidong:/proc$ cat cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz
stepping : 4
microcode : 0xffffffff
cpu MHz : 2401.000
cache size : 256 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 6
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave osxsave avx f16c rdrand
bogomips : 4802.00
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz
stepping : 4
microcode : 0xffffffff
cpu MHz : 2401.000
cache size : 256 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 6
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave osxsave avx f16c rdrand
bogomips : 4802.00
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz
stepping : 4
microcode : 0xffffffff
cpu MHz : 2401.000
cache size : 256 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 6
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave osxsave avx f16c rdrand
bogomips : 4802.00
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz
stepping : 4
microcode : 0xffffffff
cpu MHz : 2401.000
cache size : 256 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 6
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave osxsave avx f16c rdrand
bogomips : 4802.00
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
nice
&renice
定义进程优先级
nice [option] commands
nice - run a program with modified scheduling priority
nohup
用户退出后继续运行
nohup - run a command immune to hangups, with output to a non-tty
nohup COMMAND [ARG]...
nohup OPTION
pengjidong@pengjidong:/proc$ sudo nohup find / -name init* > /home/pengjidong/a.find
nohup: ignoring input and redirecting stderr to stdout
# 我们发现这样子执行后并没办法继续输入命令了
# 于是我们在后面加上一个 &
pengjidong@pengjidong:/proc$ sudo nohup find / -name init* > /home/pengjidong/a.find &
进程挂起和终止
Ctrl
+C
:进程终止
Ctrl
+Z
:进程挂起
查看被挂起的进程jobs
进程的恢复:
fg
恢复到前台继续运行
bg
恢复到后台继续运行
top
动态显示进程信息
top - 15:29:00 up 46 min, 0 users, load average: 0.52, 0.58, 0.59
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu(s): 9.3 us, 4.9 sy, 0.0 ni, 85.6 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
KiB Mem : 8306224 total, 4165264 free, 3904484 used, 236476 buff/cache
KiB Swap: 19552888 total, 19480224 free, 72664 used. 4260884 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 10432 584 552 S 0.0 0.0 0:00.54 init
2 pengjid+ 20 0 25784 3736 3632 S 0.0 0.0 0:01.88 bash
163 pengjid+ 20 0 41680 1864 1336 R 0.0 0.0 0:00.03 top
w
查看当前系统信息命令
w [options] user [...]
example:
ubuntu@VM-0-7-ubuntu:~$ w
15:04:44 up 20 days, 17:52, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 182.106.212.146 15:04 3.00s 0.04s 0.00s w
man
帮助命令
man [选项] 命令名称
常用选项如下:
-
-f
只显示出命令的功能而不显示其中详细的说明文件 -
-w
不显示手册页,只显示对应帮助文件的所在位置 -
-a
显示所有的手册页,而不只是显示第一个 -
-E
在每行末尾显示$
符号
pengjidong@pengjidong:~$ man -f ls
ls (1) - list directory contents