linux常用命## 标题令
1、查看linux版本
(1)查看Linux内核版本命令(两种方法):
#cat /proc/version
#uname -a
(2)查看Linux系统版本的命令(3种方法):
#lsb_release -a,可列出所有版本信息
cat /etc/redhat-release 这种方法只适合Redhat系的Linux
#cat /etc/issue,此命令也适用于所有的Linux发行版。
free -h 查看当前系统的内存
2. 多个终端之间的切换
Ctrl+Alt+Fn(n=1~7)
F1~F6——命令行界面 F7——图形用户界面
3. 从虚拟机(Linux)到Windows
按Ctrl+Alt
从Windows到虚拟机(Linux),直接点虚拟机窗口即可
4. 开机注册:
user: root
password: password
5. 关机 shutdown
(注意多用户环境提醒)
Shutdown(2分钟后关机)
Shutdown –h now(立即关机)
Shutdown –r now(重启)
Shutdown -h 20:15( 20:15 关机)
Shutdown –h +10(10分钟后关机)
6. 重新启动关机
reboot, halt, poweroff
等待数据写入磁盘: sync
7. Shell命令:
显示当前工作目录pwd,例如:
改变目录命令cd ,例如:
cd … (上移一层目录)
cd /home/ li (移动当用户li的主目录)
绝对目录例如 cd /usr/share/doc
相对目录,例如cd …/man
. (一个点)代表当前目录
…(两个点) 代表上层目录
8. 列出当前目录下的文件和子目录ls
ls (按字母顺序列出当前目录中的所有非隐藏文件)
ls –a (按字母顺序列出当前目录中的所有文件,包括隐藏文件)
ls –r (按字母逆序列出当前目录中的所有非隐藏文件)
ls –F (按类型列出所有文件)
ls –i (列出inode)
ls –l (以长列表格式列出当前目录中的所有文件)
ls –t (按文件最后修改时间列出文件)
ls -u (按文件最后访问时间列出文件)
ls -s (按文件大小间列出文件)
9. 文件访问权限
0:d目录,-普通文件,l连接文件,b块设备文件,c字符设备,p管道文件,s套接字文件。
1:权限。r读,w写,x执行,-无,s|S权限临时切换,t|T任何用户能听存取文件。9个字符分三组,分别对应文件属主、组和其他人的权限。如上图中文件abc,主人osadmin可以读写,组users中的成员只能读,其他人也只能读。
2:表示目录中的文件数目或文件的硬连接数。
3:文件的主人
4:文件的组
5:普通文件:大小,目录:包含的文件名所占据的大小(4096的整数倍,至少4096)
6;修改日期
7:文件或目录名
10. 显示文件内容cat
例如cat file1
查看有多少个文件及文件夹
ls | wc -w
统计某文件夹下文件的个数
ls -l |grep “^-”|wc -l
统计某文件夹下目录的个数
ls -l |grep “^d”|wc -l
wc -l filename 就是查看文件里有多少行
wc -w filename 看文件里有多少个word。
wc -L filename 文件里最长的那一行是多少个字
head -n 10 /etc/profile查看文件前10行的内容
tail -n 5 /etc/profile 查看文件后5行的内容
//查看当前目录下各个文件及目录占用空间大小
du -sh *
设置文件访问权限chmod 例:chmod 764 file1 -rwxrw-r—
或chmod +x file1
改变文件拥有者chown 例: chown wang file1 (使用户wang成为文件file1的 拥有者,root用户才有该权限,用户名必项要在/etc/passwd文件内存在)
改变群组chgrp 例:chgrp users install.log (文件install.log的组为users)
改变的组名必项要在/etc/group文件内存在
Chmod参数
Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。
u 表示该档案的拥有者,
g 表示与该档案的拥有者属于同一个群体(group)者,
o 表示其他以外的人,
a 表示这三者皆是。
11 生成空文件touch
touch /home/yhy/user.txt (在/home/yhy目录下生成一个名为 user.txt的文件)
想创建目录 dir1/dir2/dir3,但是,该目录的父目录都不存在:
mkdir -p dir1/dir2/dir3
12 复制文件cp
cp file1 file2 (将文件file1 的内容拷贝到file2)
cp file* /home/yhy(将以file开头的多个文件拷贝目录/home/yhy下)
cp –f file1 file2 (若file2已存在,覆盖时不发出提出)
cp –i file1 file2 (若file2已存在,覆盖时发出提出)
cp –p file1 file2 (拷贝后file2 保持原有的生成日期)
cp –r dir1 dir2 (将目录dir1及其子目录的内容拷贝到dir2)
远程复制文件
scp -P 22 file1.txt root@1.1.2.3:/root/(可以-P指定端口)
文件更名和移动mv
mv file1 file2 (将文件名从file1改为file2 )
mv file* /home/yhy (将多个文件移动到目录/home/yhy下 )
mv –f file1 file2 (若file2已存在,覆盖时不发出提出)
mv –i file1 file2 (若file2已存在,覆盖时发出提出)
13 删除文件或目录rm
rm –f file1 (删除file1,不提示确认 )
rm -d /home/ wang (删除目录/home/ wang )
rm –i file1 (提示用户确认后,删除文件file1)
rm –r * (递归删除子目录)
14. 生成目录mkdir
mkdir wang (在当前目录下建立子目录wang)
mkdir –p dir1/dir2 (生成目录dir2, 若dir1不存在也生成之)
mkdir –m 755 /usr/dir2 (生成目录dir2作为/usr的子目录)
链接文件ln
ln /home/li/file1 /home/wang/file1 (硬链接,两个文件使用同一个inode,其中一个改变文件时,在两个目录中都可看到)
ln -s /home/ li /file1 /home/wang/file1 (软链接,符号链方式。删除原文件后,软链接指向空文件。)
15. 查找文件
从目录中查找文件find
find / -name fig03.tif
(在根目录“/”下及其子目录下查找名为fig03.tif的文件)
以文件内容从的某个关键字查找文件grep
grep “wang” /etc/passwd
(在文件/etc/passwd 中查找关键字“wang” )
16. 挂载文件系统
挂载文件系统mount
mount /dev/hdb1 /mnt
mount –a 挂上/etc/fstab下的全部文件系统
mount –t 指定所挂文件系统名称
mount –w 将文件系统设为可读写
mount –r将文件系统设为可读
卸载文件系统umount
umount /dev/hdb1
17. 压缩文件
zip -r nsq_getSet_upload_new.zip nsq_getSet_upload/
Linux下使用tar命令把当前目录下的zcwyou.tar.gz解压到指定的目录/123/abc/ ,前提要保证存在/123/abc/这个目录。
# tar -zxvf zcwyou.tar.gz -C /123/abc
18 打包文件
打包文件tar
打包文件tar –cvf filename.tar /root/yhy
解除打包tar –xvf filename.tar
打包并压缩
tar –cjvf filename.tbz /root/yhy
tar –czvf filename.tgz /root/yhy
解除打包和压缩
tar –xjvf filename.tbz
tar –xzvf filename.tgz
19.查看时间、日历
查看系统时间date
查看系统日历cal
计算器: bc
退出quit
20 Date 常用的时间格式
-u使用格林威治时间
+%a星期几的简称,例如一、二、三
+%A星期几的全名,例如星期一、星期二
+%D显示日期(mm/dd/yy)
+%T显示时间(hh:mm:ss)
+%p显示上午、下午
20. 在线求助
man date 或者 info date------分页显示
例如date –help 帮助文件在/usr/share/doc/下
21 通配符
?表示该位置可以是一个任意的单个字符
*表示该位置可以是若干个任意字符
例如ls *.c 或 ld f?
22.进程信息
后台运行&
观察目前后台作业状态 jobs
job各选项的含义
-l列出作业号及PID
-r仅列出正在后台运行(run)的工作
-s仅列出正在后台暂停(stop)的工作
把后台作业拿到前台fg%作业号
23.显示当前登陆用户名 who
查看主机信息
命令:uname 若系统回应Linux表示主机使用的是Linux操作系统
要得到更详细的信息,可用命令:uname –a
详细信息的含义按顺序为:操作系统名称、主机名、操作系统核心版本、发布版版本、核心生成的时间、CPU硬件类型等
**
Red Hat Linux常用工具
**
24 Vi的命令方式
列出行号set nu
移动
当前的vi 可以使用键盘上的方向键
小写字母代替键盘上的方向键
向左h 向下j 向上k 向右l
删除文本
删除当前字符——x
删除当前单词——dw
删除当前行——dd
搜索文本——使用斜杠开关,例如
/dollar (搜索单词dollar)
25. Vi的插入方式
Insert 插入模式 ESC 退出插入状态 :wq! 保存并退出
删除和替换命令:
dd 删除光标所在的行 nx 删除光标之后的n个字符
x 删除光标处的字符
yy 复制光标位置所在行 p 将复制的字符粘贴在光标所在处
查找命令:
/字符串:向下查找字符串
?字符串:向上查找字符串
n:重复上一个查找动作
Lunix系统管理
1.Linux用户和组管理
用户账户是登录系统的唯一凭证
root用户是系统的最高管理者
三个重要的配置文件
a) 密码记彔在/etc/shadow(只有root才能够读取)
b) 账户记彔在/etc/passwd
c) 组名纪彔在/etc/group
2. 用户分角色,用户的角色是通过UID来标识的
Linux下的用户可以分为三类:
超级用户:超级用户(root)的UID为0
系统用户:系统用户的UID一般为1-499
普通用户:普通用户的UID为500-60000
3.useradd
例1:建立一个新用户账户user1,其工作组为root
#useradd -g root user1
#passwd user1 //设置口令
#cat /etc/passwd
//查看password文件中添加的用户账号信息
#cat /etc/shadow
ls /home //查看所建立账号的主目录
例2:建立一个新用户账户,并设置ID为 544:
#useradd -u 544 user2
4 usermod
(1)修改用户名,把用户名“user1”改名为“u1”
usermod –l u1 user1
(2)锁定“u1”用户,使其不能登录:
usermod –## L u1
(3)解锁“u1”用户账号,使其可以登录:
usermod –U u1
5 删除用户账号
删除用户账号userdel
Userdel [-r] <用户名>
-r 表示用户主目录及其内部文件都删除
例:
#userdel u1 //删除lyd账号
#userdel –r user2 //删除用户的同时删除其工作主目录
6. 用户组操作
创建组群账户groupadd
修改组群账户groupmod
删除组群账户groupdel
二个用户组群配置文件
/etc/group
/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件
命令行用户添加用户groupadd
格式groupadd [选项] <组名>
-g gid 用户所属的群组的ID,即GID
-r 指定增加系统账户,其GID小于500
-f 若用户组已存在,退出并显示错误
删除组groupdel
修改群组groupmod
设置组密码gpasswd
7. su命令
切换登录用户
命令语法:
su [选项] [用户]
[用户]:指定要变更的用户。若不指定此参数,变更为root。
在root用户下, 输入 su 普通用户. 则切换至普通用户, 从root切换到普通用户不需要密码,从普通用户切换需要密码
[选项]
-c<指令>:执行完指定的指令后,即恢复原来的身份。
-l:改变身份时,也同时变更工作目录,以及HOME, SHELL,USER,LOGNAME。此外,也会变更PATH变量
例: su -c ls root 变更帐号为 root 并在执行 ls 指令后退出变回原使用者。
例: su -c “cat shadow” root 变更帐号为 root 并在执行 ls 指令后退出变回原使用者
su –l yhy
8. 查看进程ps
ps各选项的含义
-l长格式列出
-u列出使用者的名称和使用时间,内存及CPU占用情况
-r只列出正在运行的进程
-A -e列出所有进程
-x列出与终端有关的进程
-a列出与终端有关的所有进程,包括其他用户的进程
列出当前后台程序
ps -aux | grep python
有状态位 有个R就是代表running
T表示终止
终止某个进程
Kill -9 pid
ps –l的含义
F:代表process flags
S:代表进程状态(STAT)
R (Running):该程序正在运作中;
S (Sleep):开程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
D :不可被唤醒癿睡眠状态
T :停止状态(stop)
Z (Zombie):僵尸状态
UID/PID/PPID(用户ID、进程ID父进程ID)
C:代表 CPU 使用
PRI/NI:Priority/Nice 的缩写,代表优先级
ADDR/SZ/WCHAN:都与内存有关(WCHAN表示是否允许)
TTY:登入者
TIME:使用掉的CPU 时间
CMD:就是 command 的缩写
列出内存及CPU占用情况ps –u
USER:该 process 属亍那个使用者账号
PID :该 process 进程标识符。
%CPU:该 process 使用掉的 CPU 资源百分比;
%MEM:该 process 所占用的物理内存百分比;
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作
STAT:该程序目前的状态
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 的时间。
COMMAND:该进程的指令
9.杀死进程 kill
kill各选项的含义
-s signal 指定发送的信号
-l 列出信号
信号:-9立刻强制删除一个作业
-15以正常方式终止一个作业
10. 查看内存用量 free
观察内存使用情况free[-b|-k|-m|-g] [-t]
-b :直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes), m(Mbytes) k(Kbytes), 及 g(Gbytes) 来显示单位
-t :增加显示物理内存与 swap 的总量。
Shell
1、 Shell常用命令
1) echo 命令格式:echo arg
功能:在屏幕上打印出由arg指定的字符串。
2). eval 命令格式:eval args
功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执行
3). exec 命令格式:exec 命令 命令参数
功能:当shell执行到exec语句时,不去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程,也就是最初的shell就终止了,所以shell程序中exec后面的语句将不再被执行。
4). export 命令格式:export 变量名
或:export 变量名=变量值
功能:shell可以用export把它的变量向下带入子shell从而让子进程继承父进程中的环境变量。但子shell不能用export把它的变量向上带入父shell。
注意:不带任何变量名的export语句将显示出当前所有的export变量
5). readonly 命令格式:readonly 变量名
功能:将一个用户定义的shell变量标识为不可变的。不带任何参数的readonly命令将显示出所有只读的shell变量。
6). read 命令格式:read 变量名表
功能:从标准输入设备读入一行,分解成若干字,赋值给shell程序内部定义的变量。
7). shift语句
功能:shift语句按如下方式重新命名所有的位置参数变量:$2成为$1,$3成为
2
…
…
在
程
序
中
每
使
用
一
次
s
h
i
f
t
语
句
,
都
使
所
有
的
位
置
参
数
依
次
向
左
移
动
一
个
位
置
,
并
使
位
置
参
数
“
2……在程序中每使用一次shift语句,都使所有的位置参数依次向左移动一个位置,并使位置参数“
2……在程序中每使用一次shift语句,都使所有的位置参数依次向左移动一个位置,并使位置参数“#”减一,直到减到0
8). wait
功能:是shell等待在后台启动的所有子进程结束。Wait的返回值总是真。
9). exit
功能:退出shell程序。在exit之后可有选择地指定一个数字作为返回状态。
10). “.”(点) 命令格式:. Shell程序文件名
功能:使shell读入指定的shell程序文件并依次执行文件中的所有语句
2、创建和执行shell程序
例题:
1).创建一个别名文件:(bash)示范文件myenv,内容如下:
#! /bin/bash
clear
cal
echo hello !!!
2).在Linux下可以用以下方法来执行mynev.
chmod命令: #chmod +x mynev
3).执行shell程序
命令行上: #. /mynev
3、 变量
环境变量:系统提供,不用定义,可以修改
内部变量:系统提供,不用定义,不能修改
用户变量:定义,可以修改
与其他语言的区别:非类型性质,也就是不必指定变量是数字或字符串等
4. 用户变量举例
例1:字符串变量赋值shell程序my1:
var=”string”
newvar=”Value of var is $var”
echo $newvar
执行shell程序my1,可得到如下的结果:
Value of var is string
例2:数值变量赋值shell程序mynu :
x=15
echo
x
得
到
如
下
的
结
果
:
155.
变
量
赋
值
给
变
量
赋
值
l
o
c
u
n
t
=
0
访
问
变
量
值
l
c
o
u
n
t
=
x 得到如下的结果:15 5. 变量赋值 给变量赋值locunt=0 访问变量值lcount=
x得到如下的结果:155.变量赋值给变量赋值locunt=0访问变量值lcount=var
例如要把var的值赋给变量lcount : lcount = $var
进行数值运算:(把var的值加5赋给lcount )
lcount =
(
(
((
((var+5)) 或 let lcount =$var+5
6.环境变量(注意:变量名大写)
echo $PATH
指令ls完整文件名为:/bin/ls(这是绝对路径),为什么我在任何目录下输入 ls 都可以显示呢? 这是因为环境变量 PATH 中的定义!
例如[root@www ~]# echo
P
A
T
H
/
u
s
r
/
k
e
r
b
e
r
o
s
/
s
b
i
n
:
/
u
s
r
/
k
e
r
b
e
r
o
s
/
b
i
n
:
/
u
s
r
/
l
o
c
a
l
/
s
b
i
n
:
/
u
s
r
/
l
o
c
a
l
/
b
i
n
:
/
s
b
i
n
:
/
b
i
n
:
/
u
s
r
/
s
b
i
n
:
/
u
s
r
/
b
i
n
:
/
r
o
o
t
/
b
i
n
记
录
所
有
搜
索
路
径
常
见
环
境
变
量
P
A
T
H
:
决
定
了
s
h
e
l
l
将
到
哪
些
目
录
中
寻
找
命
令
或
程
序
。
H
O
M
E
:
当
前
用
户
主
目
录
。
U
I
D
:
用
户
I
D
。
M
A
I
L
:
当
前
用
户
的
邮
件
存
放
目
录
。
S
H
E
L
L
:
当
前
用
户
用
的
是
哪
种
S
h
e
l
l
。
H
I
S
T
S
I
Z
E
:
保
存
历
史
命
令
记
录
的
条
数
L
O
G
N
A
M
E
:
当
前
用
户
的
登
录
名
。
H
O
S
T
N
A
M
E
:
主
机
的
名
称
7.
内
部
变
量
e
c
h
o
“
N
u
m
b
e
r
o
f
p
a
r
a
m
e
t
e
r
s
i
s
”
PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 记录所有搜索路径 常见环境变量 PATH:决定了shell将到哪些目录中寻找命令或程序。 HOME:当前用户主目录。 UID:用户ID。 MAIL:当前用户的邮件存放目录。 SHELL:当前用户用的是哪种Shell。 HISTSIZE:保存历史命令记录的条数 LOGNAME:当前用户的登录名。 HOSTNAME:主机的名称 7.内部变量 echo “Number of parameters is ”
PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin记录所有搜索路径常见环境变量PATH:决定了shell将到哪些目录中寻找命令或程序。HOME:当前用户主目录。UID:用户ID。MAIL:当前用户的邮件存放目录。SHELL:当前用户用的是哪种Shell。HISTSIZE:保存历史命令记录的条数LOGNAME:当前用户的登录名。HOSTNAME:主机的名称7.内部变量echo“Numberofparametersis”#
echo “Shell return code is ”$?
echo “Program name is ”
0
e
c
h
o
“
P
a
r
a
m
e
t
e
r
s
a
s
a
s
i
n
g
l
e
s
t
r
i
n
g
i
s
”
0 echo “Parameters as a single string is ”
0echo“Parametersasasinglestringis”*
在bash中,如果从命令行中执行my2如下:
#./my2 wang zhang
将得到如下的结果:
Number of parameters is 2
Program name is my2
Parameters as a single string is wang zhang
8.特殊字符
(1)双引号:在字符串含有嵌入的空格时,用双引号括起来。
这是一个有关bash的例子:
var=”test string”
newvar=”Value of var is $var”
echo $newvar
执行上面的三行shell程序,可得到如下的结果:./my1
Value of var is test string
(2)单引号: 利用单引号把字符括起来,以阻止shell解析变量。把前面的双引号改为单引号,执行程序可得到如下的结果:./my11
Value of var is
v
a
r
(
3
)
反
斜
杠
:
在
某
个
字
符
前
利
用
反
斜
杠
可
以
阻
止
s
h
e
l
l
把
后
面
的
字
符
解
释
为
特
殊
字
符
。
例
如
,
把
var (3) 反斜杠: 在某个字符前利用反斜杠可以阻止shell把后面的字符解释为特殊字符。例如,把
var(3)反斜杠:在某个字符前利用反斜杠可以阻止shell把后面的字符解释为特殊字符。例如,把test的值赋给变量var。输入如下命令:
var =
t
e
s
t
不
能
完
成
赋
值
如
下
命
令
才
把
test 不能完成赋值 如下命令才把
test不能完成赋值如下命令才把test存放在var中:
var=$test
(4)反引号: 通知shell 执行由反引号定义的字符串。
wc当需要把执行命令的结果存放在变量中时,就可以在shell 程序中利用反引号。例如,要统计当前目录下一个文件中test.txt有几行并把结果存在叫做var的变量中: var=wc -l test.txt
pdksh和bash环境
$ 指出shell变量名的开始
| 把标准输出通过管道传送到下个命令
# 标记注释开始
& 在后台执行进程
> 输出重定向操作符
< 输入重定向操作符
>> 输出重定向操作符{添加到文件}
<< 跟在输入结束自符串后(HERE)操作符
.filmname 执行(“源”)filename文件
空格 在两个字之间的间隔符
(5)通配符
? 匹配一个字符
* 匹配一个或几个字符
[] 列出字符的范围,例如 [abcd]
[a-z] 意指a到z的全部字符
[a,z] 意指a或z字符
9. bash表达式的比较
1).字符串比较
= 比较两个字符串是否相等
!= 比较两个字符串是否不相等
-n 判断字符长度是否大于零
-z 判断字符长度是否等于零
2). 数字比较
-eq 比较两个数是否相等
- ge 比较一个数是否大于或是等于另一个数
-le 比较一个数是否小于或是等于另一个数
-ne 比较两个数是否不等
-gt 比较一个数是否大于另一个数
-lt 比较一个数是否小于另一个数
3). 文件操作符
-d 确定文件是否为目录
-f 确定文件是否为普通文件
-r 确定是否对文件设置了读许可。
-s 确定文件名是否具有大于零的长度
-w 确定文件是否设置了写许可
-x 确定文件是否设置了执行许可
4). 逻辑操作符
逻辑操作符根据逻辑规则比较表达式 如!,-a,-o字符,表示NOT 、AND和OR
! 求反(”非”)逻辑表达式
-a 逻辑AND(”与 ”)两个逻辑表达式
-o 逻辑OR(”或 ”)两个逻辑表达式
gcc、gdb的使用与Linux进程创建
1.Linux的程序文件名后缀
.s 汇编语言源代码
.o 编译后的目标文件
2.GCC编译过程
预处理:调用linux的CPP预编译程序,生成.i的临时文件。
将#include 文件拷贝到要编译的源文件中。
用实际值替代#define文本。
在调用宏的地方进行宏替换。
命令#gcc –E –o test.i test.c或#cpp test.c>test.i
汇编:调用linux的as汇编编译程序,生成.s的汇编文件。
命令#gcc –S test.c
编译:调用linux的cc1编译程序,生成.o的目标文件。
命令#gcc –c test.c
链接:调用linux的ld链接程序,生成最后的可执行文件。
命令#gcc –o test test.c
执行 #./test
3.优化命令
-O0:不优化。
-O1:第一级优化。允许与-g共用,编译链接过程稍慢。
-O2:第二级优化。特别对于大型程序,可以大幅度提高运行速度。
-O3:第三级优化。与O2的区别在于它允许把函数直接插入到调用的代码处
4.命令ldd用于查出程序所用的共享函数库。
例: ldd test 例:ldd sin
gcc –o 生成的可执行文件名 1.c 2.c (后边是两个同时编译的c文件)
make程序自动确定需要重新编译的文件,只对他们进行重新编译,然后链接生成可执行文件
make程序可以自动对已修改的源程序进行编译,而对未改变的部分则跳过编译步骤,从而大大提高效率,是源程序的编译、链接、管理更加规范和有条理。
make程序需要两方面的信息:一是可执行文件和各个程序模块之间的关系,二是文件的修改日期。
可执行文件和各个程序模块之间的关系通常记录在makefile或 Makefile中。 命令前用键
调试程序 GDB
编译程序时加调试开关: gcc –g -o test test.c
进入调试状态# gdb test
进程
- 四要素:程序段、系统堆栈空间、task_struct结构(PCB)、专有内存空间
linux进程创建用以下系统调用完成:
●系统调用fork():父进程的所有资源通过数据结构复制全部给子进程。
fork()用于创建进程
●后增设的系统调用vfork(): 除了task_struct和系统空间堆栈以外的资源全部都通过数据结构指针的复制“遗传”。vfork创建的是线程
●系统调用clone():进程的资源有选择地复制给子进程,而没有复制的数据结构(资源如内存空间)通过指针的复制让子进程共享。 用clone既可以创建一个进程,也可以创建一个线程
2.创建子进程后,父进程可以有以下几种选择:
(1)父进程不受影响,继续执行,也称“异步”方式。
(2)父进程停下来,等待子进程完成后,再继续执行,也称“同步”方式。用系统调用wait()和 waitpid()实现。 wait()是等待所有子进程完成; waitpid()等待特定子进程完成。
(3)父进程创建了子进程后,马上结束自己。用系统调用exit()实现
linux安装
Linux有四大优点
成本低、可靠性高、灵活性和支持。
1.设备分区选择:
VM选择建议自动分区 ; 双引导选择手工分区
手工分区时建议为/、/boot、/swap、/usr(软件)、/home(用户)各建立一个分区
硬盘分区方案
(1) 最简单的分区方案。
SWAP分区:即交换分区,建议大小是物理内存的1~2倍。
/分区(根分区):建议大小在6GB以上。
使用以上的分区方案,所有的数据都放在/分区上,对于系统来说不安全,数据不容易备份
(2) 合理的分区方案
/分区:Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为1GB。
/boot分区:用来存放与Linux系统启动有关的程序,比如启动引导装载程序等,建议大小为100MB。
/usr分区:用来存放Linux系统中的应用程序,其相关数据较多,建议大于3GB。
/var分区:用来存放Linux系统中经常变化的数据以及日志文件,建议大小为1GB。
/home分区:存放普通用户的数据,是普通用户的宿主目录,建议大小为剩下的空间。
SWAP分区:实现虚拟内存,建议大小是物理内存的1~2倍
2.Linux目录结构
/boot、/home、/usr、/var 这四个可以安装在另一个分区
• /根目录。
• /bin:基本命令行使用程序。
• /sbin:系统管理命令。
• /boot:系统启动时所需要的命令及文件如GRUB、初始内存盘、内核
• /dev:可用的设备驱动程序。
• /etc:Linux的配置命令。
• /home:除根用户以外的所有用户的主目录。可安装在另一个分区。
• /lib:应用程序使用的程序库。
• /mnt:软盘、CD-ROM、ZIP等可拆卸介质的公共装载点。
• /proc:当前运行的所有内核相关进程。
• /usr:所有用户可用的程序和数据。例如,OpenOffice相关程序。/root:根用户的主目录。
• /opt:SUN的 StarOffice等第三方应用程序的标准位置。
• /var:变量数据,包括日志文件。打印假脱机。/tmp:临时文件存储区,如下载文件存放地
Conda虚拟环境
1 介绍
conda是一个包,依赖和环境管理工具,适用于多种语言,如: Python, R, Scala, Java, Javascript, C/ C++, FORTRAN
一个conda环境就是一个目录包含所有的安装包和依赖,不同环境之间独立且不相互影响。跟python的虚拟环境virtualenv一样
2 命令
查看当前存在哪些虚拟环境:
conda env list 或 conda info -e
进入虚拟环境
source activate yy_dec
退出当前虚拟环境
conda deactivate
克隆一个已有虚拟环境并命名:
conda create --name yy_dec --clone zlx_tensorflow3
创建新环境
conda create -n rcnn python=3.6
删除环境
conda remove -n rcnn --all
重命名环境
conda 其实没有重命名指令,实现重命名是通过 clone 完成的,分两步:
先 clone 一份 new name 的环境
删除 old name 的环境
比如,想把环境 rcnn 重命名成 tf
第1步 conda create -n tf --clone rcnn
结果为:
Source: /anaconda3/envs/rcnn
Destination: /anaconda3/envs/tf
Packages: 37
Files: 8463
第2步 conda remove -n rcnn --all
结果
conda info -e 查看当前所有的虚拟环境
# conda environments:
crawl /anaconda3/envs/crawl
flask /anaconda3/envs/flask
tf /anaconda3/envs/tf
root * /anaconda3
3 pip
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ pip -V #查看pip版本
4 Ipynb文件和py文件转换
到要转的demo.ipynb所在目录下,然后输入命令:
jupyter nbconvert --to script demo.ipynb