How to use the command 'strip' (with examples)
- Linux
- December 17, 2024
The strip
command is a tool commonly found in Unix and Unix-like operating systems, used to discard symbols from executable or object files. This process of removing symbols is also known as stripping. Symbols in this context refer to the information such as function names, global variables, and debugging information contained in the binary files. Stripping these symbols can significantly reduce the size of the files and sometimes improve loading times for executables. However, removing symbols can make debugging more difficult as the symbolic names are no longer available. This command is particularly beneficial in deployment scenarios where you want smaller binaries and do not need debugging symbols.
Use case 1: Replace the input file with its stripped version
Code:
strip path/to/file
Motivation:
In some scenarios, applications that are deployed in a production environment require the smallest possible file size to save storage space, improve load performance, or save network bandwidth during deployments. By stripping unnecessary symbols from executable or object files, you can achieve these reductions in size. This use case is useful when you want the original file to be replaced entirely by its stripped version, assuming you do not require any of the debugging symbols for later error diagnostics.
Explanation:
strip
: This is the base command that initiates the stripping process.path/to/file
: This specifies the path of the file (either an executable or object file) from which you wish to strip symbols. The input file is replaced with the stripped version, thereby reducing its size.
Example output:
After executing this command, the file path/to/file
will have reduced in size, but there will not be a direct console output to indicate the success of this operation. You might use a file size analysis tool like ls -lh path/to/file
to see the reduced file size.
Use case 2: Strip symbols from a file, saving the output to a specific file
Code:
strip path/to/input_file -o path/to/output_file
Motivation:
This use case is particularly applicable when you need to keep the original file intact and also have a stripped version of the file. By specifying an output file, you protect your original file from any unwanted changes or loss of important symbolic information. Keeping both versions can be crucial in development environments where debugging may be necessary later.
Explanation:
strip
: This is the command used to initiate the stripping of symbols.path/to/input_file
: This specifies the path to the input file, usually an executable or object file, which contains the symbols to be removed.-o path/to/output_file
: The-o
option specifies the desired output path and filename for the stripped file. This ensures that the stripped version is saved separately, leaving the original file unchanged.
Example output:
After running this command, the stripped file will be saved at path/to/output_file
. The size reduction and the separation of symbolic information would be apparent if you compared the sizes of path/to/input_file
and path/to/output_file
using a command like ls -lh
.
Use case 3: Strip debug symbols only
Code:
strip --strip-debug path/to/file.o
Motivation:
Sometimes, it is necessary to balance between the need for symbol removal to reduce file sizes and the need to retain some symbolic information for runtime diagnostics or profiling purposes. Debug symbols are often the most voluminous part of symbolic information in an executable, and targeting them specifically can provide significant size reduction while retaining other potential useful symbols. This is ideal when you aim to reduce the file size but still want to keep some important non-debug symbols for future needs.
Explanation:
strip
: This serves as the command for symbol stripping.--strip-debug
: This option instructsstrip
to remove only the symbols related to debugging. It leaves other symbols intact, which might be needed for linking or other runtime requirements.path/to/file.o
: Path to the object file from which you want to remove debug symbols specifically.
Example output:
The resultant file would be smaller, having retained its original function names and other symbols but discarded any symbols that were specifically for debugging purposes. There would not be a console message for success, but the file size could be checked with ls -lh path/to/file.o
.
Conclusion:
Using the strip
command can provide great benefits in terms of reducing file sizes of executables and object files, which is vital in resource constraint environments. Care should be taken, as reducing file sizes by stripping symbols will also decrease the debuggability of the application. Depending on your specific use case needs, you can choose to strip all symbols or only debug symbols and choose whether to overwrite the original file or save to a new output file.