问题
linux操作, ssh, vi
- 自动获取IP的网卡设置怎嘛查看IPv4?
将/etc/sysconfig/network-scripts/ifcfg-eth0中的BOOTPROTO的值更改成dhcp. 然后ifdown 网卡名, ifup 网卡名. - linux某一项service没有找到?
将可执行文件的路径加入PATH中。相关文件(ubuntu): /etc/environment - 能Ping通linux,但是不能ssh远程登录。
查看ssh服务是否开启,ps -e |grep ssh
没有ssh存在就说明没有ssh服务。
则是存在的.
解决ssh服务问题: 在/etc/init.d中没有ssh则没有安装ssh。如果存在直接重启。否则安装,建议命令行+网络方式。
如果存在,那么查看22端口是否开放
ssh localhost
出现连接拒绝的信息就说明端口有问题。
解决端口问题: 编辑/etc/ssh/ssh_config
将port 22和protocol 2,1注释掉。重启即可。
- Ubuntu的root密码是多少?
Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码。可以使用sudo passwd root来解决这个问题。 - 假设安装软件后有图标,但是不知道可执行文件的路径怎么办?
可以将软件运行起来,然后ps -e |grep processname
得到进程号,接着输入ll /proc/pid
。查看,存在类似exe -> /usr/bin/
的信息,它即是绝对路径。 - ssh远程登录运行Qt,出现错误:QXcbConnection: Could not connect to display
首先,确定远端允许X11转发,将/etc/ssh/sshd_config中X11Forwarding 置成yes
然后,在本地安装xshell + xmanager。
设置xshell: 文件——属性——SSH——隧道——转发x11到——xmanager——确定
xshell远程登录后即可正常使用软件。 - 在vi(vim)中怎样删除某一列,或者某几列,某几行?
使用visual模式,找到一个角点,按下ctrl+v,进入visual block模式,选中对角线的另一个角点,选中的部分按下x(或者 d)就能删除。 - root也杀不死进程?
可以查看进程树,找一找进程间的关系:
然后找到父进程杀死:
重新远程登录后,程序udp1消失了
- 上面出现过的pts/4是什么东西?
pts即虚拟终端. 最开始打开一个终端,他叫pts/0。
与之相关的还有tty, 有一个tty7是表示图形界面,tty1-tty6表示文字界面 - cp: omitting directory 省略目录错误?
自己copy的是目录,应该用递归的方式来拷贝。 - error: …file is busy. source insight: it is not currently avalible for write access
多半是自己仅仅给文件夹赋予了响应的权限,没有给其子目录赋予权限。
记录
linux网络, C 指针
- 在dos cmd中进行exe安装
假设文件在H:/install 中
- linux查看磁盘的信息
fdisk -l - 设置linux ubuntu和Windows联网:
首先,插上网线。
假设Windows的网络设置为:
IP: 10.21.1.109
掩码: 255.255.0.0
网关: 10.21.0.254
那么修改文件
/etc/network/interfaces
增添内容:
再输入命令: sudo /etc/init.d/networking restart
- ubuntu桌面上的软件有一部分是在/opt中的。
- 软连接的建立: ln -s 软件所在路径 创建快捷方式的路径
- 查看所有的端口: netstat -an (windows or linux)
- Linux C read()和scanf()的区别:
ssize_t read(int fd, void *buf, size_t count);
对于read(STDIN_FILENO,buff,size_len),如果我们在屏幕上输入hello, 再敲入enter,那么’\n’也是存进buff了的。
也即对于:
有这样的结果:
recvfrom和read一样。
- 编译错误:
将const int len=1<<7; 改成enum{ len=1<<7 };
- 一次测试发现的奇怪现象:
他的输出是这样的:
这是因为,sizeof(指针)得到的不是数组的长度而是指针的长度!
改之:
C程序编译过程探究
编译过程分为如下部分:
预处理:在预处理阶段,主要完成对源代码中的预编译语句(如宏定义#define等)和文件包含进行处理。需要完成的工作是对预编译指令进行替换,把包含文件放置到需要编译的文件中。完成这些工作后,会生成一个非常完整的C程序源文件。
编译:gcc对预处理以后的文件进行编译,生成以.s为后缀的汇编语言文件。该汇编语言文件是源代码编译得到的汇编语言代码,接下来交给汇编过程进行处理。汇编语言是一种比C语言更低级的语言,可以直接对硬件进行操作。程序需要编译成汇编指令以后再编译成机器代码。
汇编:汇编过程是处理汇编语言的阶段,主要调用汇编处理程序完成将汇编语言会变成二进制机器代码的过程。通常来说,汇编过程是将.s的汇编语言代码文件汇编为.o的目标文件的过程。所生成的目标文件作为下一步链接过程的输入文件。
链接:链接过程就是将多个汇编生成的目标文件及引用的库文件进行模块链接生成一个完整的可执行文件。在链接阶段,所有的目标文件被安排在可执行程序中的适当的位置。同时,该程序所调用到的库函数也从各自所在的函数库中链接到程序中。经过了这个过程以后,生成的文件就是可执行的程序。
写一个折半查找的程序:
- 用gcc进行预处理过程。产生文件out1
gcc -E -o out1 binary_search.c
head -10 out1
- 生成汇编代码
gcc -S -o out2 binary_search.c
vi out2:
- 生成目标代码
生成可重定位的目标代码文件out3
该文件还不能直接执行,可以尝试,不过他会输出这样的信息:
bash: ./out3: Permission denied
就算是用root也会得到这样的结果。
- 链接生成可执行文件